web笔记:JSP基础
一、什么是JSP?
建立在Servlet规范之上的动态网页开发技术。在JSP文件中,HTML代码与Java代码共同存在。
- HTML代码用来实现网页中静态内容的显示。
- Java代码用来实现网页中动态内容的显示。
二、JSP的运行原理
由JSP引擎(JSP容器)将jsp转换为Servlet
当客户端向jsp页面发送请求时,此时jsp页面会经过转译变成JAVA源代码,在经过编译后转化为Servlet类,运行web服务器,最后发送响应给客户端
三、JSP的基本语法
1、JSP模板元素:
JSP页面中的静态HTML内容称之为JSP模版元素。JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观。
2、Scriptlet元素:
在JSP页面中,使用<% Java代码 %>格式嵌入Java代码,这些Java代码必须严格遵守Java语法规范。
3-1、JSP声明:
使用<%!Java代码 %>格式,被声明的Java代码将被翻译到Servlet的_jspService()方法之外,即在JSP声明中定义的都是成员方法、成员变量、静态方法、静态变量、静态代码块等。
3-2、JSP声明(jsp表达式):
使用<%=expression%>格式,在Scriptlet中声明变量是在服务方法之内的局部变量。
4、JSP注释:
使用<%-- 注释信息 --%>格式,Tomcat在将JSP页面翻译成Servlet程序时,会忽略JSP页面中被注释的内容,不会将注释信息发送到客户端,而HTML注释<!-- 注释信息-->会被发往客户端。 在浏览器中查看网页源代码时,jsp注释看不见,html注释可以看见。
5、指令
(1)page指令:
在JSP页面中,经常需要对页面的某些特性进行描述,例如,页面的编码方式,JSP页面采用的语言等,可以通过page指令来实现,语法格式如下: <%@ page 属性名= "属性值"%>
(2)include指令:
有时候需要在JSP页面静态包含一个文件,例如HTML文件,文本文件等,可以通过include指令来实现,语法格式如下: <%@ include file="relativeURL"%> file属性用于指定被引入文件的相对路径。
- 被引入的文件必须遵循JSP语法,其中的内容可以包含静态HTML、JSP脚本元素和JSP指令等普通JSP页面所具有的一切内容。
- 除了指令元素之外,被引入的文件中的其它元素都被转换成相应的Java源代码,然后插入进当前JSP页面所翻译成的Servlet源文件中,插入位置与include指令在当前JSP页面中的位置保持一致。
- file属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录。
四、JSP的隐式对象(9个)
1、out对象:
在JSP页面中,向客户端发送文本内容时,可以使用out对象来实现。out对象是javax.servlet.jsp.JspWriter类的实例对象,它的作用与ServletResponse.getWriter()方法返回的PrintWriter对象非常相似,不同的是,out对象的类型为JspWriter,它相当于一种带缓存功能的PrintWriter。
从运行结果可以看出,尽管out.println语句位于response.getWriter().println语句之前,但它的输出内容却在后面。由此可以说明,out对象通过print语句写入数据后,直到整个JSP页面结束,out对象中输入缓冲区的数据(即:first)才真正写入到Serlvet引擎提供的缓冲区中,而response.getWriter().println语句则是直接把内容(即:second)写入Servlet引擎提供的缓冲区中,Servlet引擎按照缓冲区中的数据存放顺序输出内容。
out对象可以直接将数据写入Servlet引擎提供的缓冲区中,可以通过page指令中操作缓冲区的buffer属性来实现。
从运行结果可以看出,out对象输出的内容在response.getWriter().println语句输出的内容之前,由此可见,out对象中的数据直接写入了Servlet引擎提供的缓冲区中。此外,当写入到out对象中的内容充满了out对象的缓冲区时,out对象中输入缓冲区的数据也会真正写入到Serlvet引擎
2、request对象:
request对象常用方法 ①String getParameter(String name):根据页面表单组件名称获取请求页面提交数据 ②String[ ] getParameterValues (String name) 获取页面请求中一个表单组件对应多个值时的用户的请求数据 ③Enumeration getParameterNames( ):获取请求所有参数 ④getSession([boolean]):获取、创建会话 ⑤setAttribute(属性,属性值) :设置请求属性 ⑥getAttribute(属性) :获取请求属性
3、response对象:
response对象常用方法: void setContentType (String name):设置作为响应生成的内容的类型和字符编码 void sendRedirect (String name):发送一个响应给浏览器,指示其应请求另一个URL(重定向)
4、session对象:
session对象:Web 服务器为单个用户发送的多个请求创建会话,存储有关用户会话的所有信息。 是javax.servlet.http.HttpSession接口的实例。 session 对象最常用的方法有: setAttribute(String name,Object value)、getAttribute(String name)、getId()、invalidate()、removeAttribute(String name)
5、application对象:
作用在JSP页面所属的应用程序(类似上下文ServletContext),javax.servlet.ServletContext接口实例 application对象最常用的方法有: setAttribute(String name,Object value) 以键/值的方式,将一个对象的值存放到application中getAttribute(String name) 根据名称去获取application中存放对象的值
6、pageContext对象:
使用户可以访问页面作用域中定义的所有隐式对象,它的作用范围是在同一页面,是javax.servlet.jsp.PageContext 类的实例。
7、page对象:
page对象代表JSP页面正在运行所产生的类对象本身,只在JSP页面内使用。page对象本质上包含当前Servlet接口引用的变量,类似Java类中this 指针,是java.lang.Object的实例。
8、config对象:
存储在编译 JSP 页面的过程中创建的Servlet 的信息,是javax.servlet.ServletConfig 接口的实例, 提供了检索 Servlet 初始化参数的方法。
9、exception对象:
在JSP页面中,经常需要处理一些异常信息,可以通过exception对象来实现。exception对象是java.lang.Exception类的实例对象,它用于封装JSP中抛出的异常信息。exception对象只有在错误处理页面才可以使用,即page指令中指定了属性<%@ page isErrorPage=”true”%>的页面。
五、JSP的动作
1.什么是JSP的动作?
利用XML语法格式的标记来控制Servlet引擎的行为。利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户请求重定向到另外的页面、为Java插件生成HTML代码。
2.JSP常用的动作有:
(1)<jsp:param>
(2) <jsp:include>
用来把指定文件(文本、HTML、JSP)插入正在生成的页面中,还可以向被加载的JSP文件传递参数。
语法格式如下:
<jsp:include page="relativeURL" flush="true"/>
<jsp:include page="fileName" flush="true">
<jsp:param name="paramName" value="paramValue"/> </jsp:include>
(3)<jsp:forward>
转发请求到另一个页面,在请求的过程中会连同请求的参数一起转发到目标页面。只有一个page属性,语法格式如下: <jsp:forward page="relativeURL" /> 或者 <jsp:forward page="fileName""> <jsp:param name="paramName" value="paramValue"/> </jsp:forward>
(4)<jsp:useBean>
(5)<jsp:setProperty>
(6)<jsp:getProperty>
六、JSP中使用JavaBean
1.什么是JavaBean
是Java开发语言中一个可以重复使用的软件组件,它本质上就是一个Java类。 在JSP页面,用JavaBean来实现业务功能的扩展,使JSP页面干净简洁,易于维护。(减少页面对java代码嵌入)
一个标准的JavaBean组件需要遵循一定的编码规范: (1)它必须具有一个公共的、无参的构造方法,这个方法可以是编译器自动产生的【缺省】构造方法。 (2)它提供公共的setter方法和getter方法让外部程序设置和获取JavaBean的属性。
2.使用JavaBean涉及的标签
(1)<jsp:useBean>:
用于在某个指定的域范围(pageContext、request、session、application)中查找一个指定名称的JavaBean对象,如果存在则直接返回该JavaBean对象的引用,如果不存在则实例化一个新的JavaBean对象并将它按指定的名称存储在指定的域范围中。
<jsp:useBean id=“ “ class=“ “ scope=“ “ type=“ “/>
id:Bean的变量名;
class:Bean的类路径,必须是严格的包名.类名;
type:指定父类或接口的类型;
scope:Bean的有效范围。
(2)<jsp:setProperty>
为Bean的属性赋值。
- 指定属性名,为其赋值: <jsp:setProperty name=“对象名” property=“属性名” value=“属性值”/> 其中:name后的对象名为:<jsp:useBean id=”对象名”>
- 请求参数名与指定属性名相同: <jsp:setProperty name=“id” property=“属性名”/> property指定Bean的属性名,而且Bean属性和request参数的名字应相同。
- 利用param属性,把指定属性名设置为一个请求参数的值: <jsp:setProperty name=“id” property=“属性名” param=“请求参数名”/>
- 所有请求参数名与bean属性名相同
<jsp:setProperty name=“id” property=“*”/>
(3)<jsp:getProperty>
获取Bean的属性值。
<jsp:getProperty name=“对象名” property=“属性名”/>
其中:name后的对象名为:<jsp:useBean id=”对象名”>
七、EL标签
1.什么是EL标签
在jsp页面中,经常利用jsp表达式<%=变量或表达式%>来输出声明的变量以及页面传递的参数,当变量很多的时候,这样的表达显得很累赘,EL标签简化了表达式,很好的解决了这个问题。 EL标签的语法形式如下: ${参数名}
EL标签是在jsp2.0(Servlet2.3)以后才有的新特性,之前版本不支持; 如果在某个页面中禁止EL标签,可通过page指令设置: <%@page isELIgnored=”true” %>
2.EL标签的功能
(1)可以访问jsp中不同域的对象;
(2)可以访问JavaBean中的属性;
(3)可以访问集合元素;
(4)支持简单的运算符操作。
3.EL标签的隐式对象(11个)
(1)pageContext:与JSP中的pageContext对象相同,可以获取其它对象。
(2)与范围有关的隐含对象(4个):
pageScope、requestScope、sessionScope、applicationScope
它们基本上和JSP的pageContext、request、session和application一样,JSP中的4个对象除获取属性外,还可以有其它用途
(3)与输入有关的隐含对象(2个):
param:按名称存储请求参数单一值的Map类 paramValues:请求参数的所有值构成的String数组 例如: ${param.name} 相当于:request.getParameter(“name”) ${paramValues.hobby} 相当于:request.getParameterValues(“hobby”)
(4)与请求头有关的隐含对象(2个):
header:请求头参数值的Map类。例如:${header.host} header Values:请求头参数的所有值构成的 String 数组 (5)获取web应用程序初始参数的隐含对象: initParameter 例如:${initParam.userid} 相当于 String userid = (String)application.getInitParameter(“userid”); 用来获得名为userid的web上下文参数
(6)获取Cookie对象的隐含对象:
例如:要取得cookie中有一个名color的值,可以使用${cookie.color}来获得
八、JSTL标签
1.什么是JSTL标签
是由Apache的Jakarta小组开发的一个开源的JSP标准标签库,是一组与HTML标签相似但又比HTML标签强大的功能标签,编程人员可以通过它编写出动态的JSP页面。
在jsp页面中使用JSTL标签,需要使用taglib指令,例如引入核心库(core),格式如下:
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”%>
2.JSTL标签的优点
①简化JSP和WEB程序的开发,本需要由大量的Java代码完成的功能,可以用少量的JSTL代码替代;
②JSTL可读性强,易于理解;
③利用JSTL标签编写的Web程序易于维护。
3.JSTL的使用方式
1)官网下载,将jstl.jar和standard.jar添加到项目中,如果需要Tomcat中所有项目都能使用JSTL,将两个jar包拷贝到Tomcat安装目录中的lib文件夹中;
(2)在pom.xml文件中添加依赖。
4.JSTL的标签库
(1)core标签库(核心标签库):
包括通用标签(输出标签)、流程控制标签和循环控制标签等;
core标签:用于显示数据的内容,功能与jsp表达式<%=表达式%>类似。
<c:out value=“… “ escapeXml=“true|false” default=“缺省值”/>
<c:out value=“… “ escapeXml=“true|false” >
缺省值
</c:out>
c:set标签:用于在某个作用域范围中设置某个值,或者设置某个对象(JavaBean、Map)的属性。
<c:set var=“变量名” value=“…” [scope=“page|request|session|application”]/>
c:remove标签:删除某个变量
<c:remove var=“变量名” [scope=“范围”]/>
c:if标签:用于if条件语句测试
<c:if test=“条件表达式” [var=“变量名”][scope=“范围”]/>
<c:choose>标签用于条件选择,它常和<c:when>以及<c:otherwise>一起使用,类似switch功能。
<c:forEach>标签可以对某一段标签体内容遍历多次或者遍历一个对象集合(Collection、Map、数组)。
<c:forEach [var=“变量名”]begin=“起始索引” end=“结束索引” [step=“步长”]>
标签体
</c:forTokens>标签遍历一组由指定分隔符隔开的字符串,类似于Java中的split()方法。
<c:forTokens items=“迭代对象” delims=“分隔符”
[var=“变量名”][varStatus=“迭代状态”][begin=“起始索引”]
[end=“结束索引”] [step=“步长”]>
标签体
</c:forTokens>