-
JSP 基本结构
JSP 页面组成:模板文本(HTML,XML,纯文本),JSP 元素;
JSP 元素:脚本元素,指令元素,动作元素
脚本元素 脚本 <% %> 表达式 <%=%> 声明 <%!%> 注释 <%-- --%> 指令元素 <%@page <%@include <%@taglib 动作元素 <jsp:include <jsp:forward <jsp:param <jsp:useBean
-
JSP 脚本
语法:<% JSP脚本 %> JSP 表达式(简单的输出形式) 语法:<%= 表达式 %> JSP 声明(声明一个或多个变量和方法,在 JSP 页面初始化时进行初始化,类的成员变量和方法) 语法:<%! JSP 声明 %> JSP 注释 语法:<%-- JSP注释 --%>
-
JSP 指令
-
page 指令
描述了和页面相关的信息,导入所需类包,指明输出内容类型,控制 Session 等;
语法:<%@page 属性列表 %>属性:
language Java import 导入 Java 软件包或类名列表 isThreadSafe true contentType MIME 类型和 JSP 页面响应时的编码方式,"text/htm;charset=ISO8859-1" pageEncoding 指定 JSP 文件本身编码方式,pageEncoding="UTF-8" session true errorPage 设定 JSP 页面异常时重新指向的页面 URL isErrorPage true isELIgnored false buffer autoFlush
-
include 指令(静态包含)
在页面翻译期间引入另一个文件,被包含的文件可以是 JSP,HTML 或文本文件;
语法:<%@include file="文件"%> -
taglib 指令
指定 JSP 页面所使用的标签库,可以在 JSP 页面中使用标签库中的标签
语法:<%@taglib url="标签库URI" prefix="标签前缀"%>保留前缀有:java,javax,jsp,jspx,servlet,sun,sunw
-
-
JSP 动作
JSP 标准动作:在 JSP 中可以使用 XML 语法格式的一些特殊标记来控制行为,
动态地插入文件,调用 JavaBean 组件,重定向页面等功能;<jsp:include> 在页面被请求时引入一个文件;(动态包含) <jsp:forward> 把请求转发给另一个页面; <jsp:useBean> 用于查找或实例化一个 JavaBean; <jsp:setProperty> 设置 JavaBean 的属性; <jsp:getProperty> 输出某个 JavaBean 的属性;
-
<jsp:include>
语法:<jsp:include page="urlSpec" flush="true"/><jsp:include page="urlSpec" flush="true"> <jsp:param name="name" value="value"/> ....... </jsp:include> flush="true" 表示设定是否自动刷新缓冲区,包含大量数据时为缩短客户端延迟, 可将一部分内容先行输出;
-
<jsp:forward>
语法:
<jsp:forward page="relativeURLSpec" /><jsp:forward page="relativeURLSpec" /> <jsp:param name="name" value="value"/> ....... </jsp:forward> <jsp:forward>带着 request 信息跳转;sendRedirect 不带 request 信息跳转;
-
<jsp:useBean>
语法:<jsp:useBean id="name" class="className" scope="page|request|session|application" /> <jsp:useBean id="name" type="typeName" scope="page|request|session|application" /> id 指定该 JavaBean 实例的变量名,通过 id 可以访问这个实例; class 指定 JavaBean 的类名; scope 指定 JavaBean 的作用范围;默认 page type 指定 JavaBean 对象的类型,通常在查找已存在的 JavaBean 时使用,这时使用 type 将不会产生新的对象;
-
<jsp:setProperty>
语法:<jsp:setProperty name="beanName" property="propertyName" value="propertyValue" /> <jsp:setProperty name="beanName" property="propertyName" param="parameterName" /> name 指定 JavaBean 对象名,与 useBean 动作中的 id 相对应; property 指定 JavaBean 中需要赋值的属性名; value 指定要为属性设置的值; param 指定请求中的参数名(表单传值,或 URL 传值),并将参数的值赋给 property 所指定的属性;
- <jsp:getProperty>
语法:<jsp:getProperty name="beanName" property="propertyName" /> 转换成 String 类型的值
-
-
JSP 内置对象
request javax.servlet.http.HttpServletRequest 请求对象,提供客户端 HTTP 请求数据的访问
response javax.servlet.http.HttpServletResponse 响应对象,用来向客户端输出响应
out javax.servlet.jsp.JspWriter 输出对象,提供对象输出流的访问
session javax.servlet.http.HttpSession 会话对象,用来保存服务器与每个客户端会话过程中的信息
application javax.servlet.ServletContext 应用程序对象,用来保存整个应用环境的信息
pageContext javax.servlet.jsp.PageContext 页面上下文对象,用来存储当前 JSP 页面的相关信息
config javax.servlet.ServletConfig 页面配置对象,JSP 页面的配置信息对象
page javax.servlet.jsp.HttpJspPage 当前 JSP 页面对象,即 this
exception java.lang.Throwable 异常对象,用于处理 JSP 页面中的错误
1. request
void setCharacterEncoding(String charset)
String getParameter(String name)
String[] getParameterValues(String name)
void setAttribute(String name, Object value)
Object getAttribute(String name)
2. response
void setContentType(String name)
void sendRedirect(String url)
3. out
javax.servlet.jsp.JspWriter 与 HttpServletResponse 接口的 getWriter() 方法获得的 PrintWriter 对象功能相同,
继承自 java.io.Writer 类
数据的输出
print/println(基本数据类型) 输出一个基本数据类型的值
print/println(Object obj) 输出对象的引用地址
print/println(String str) 输出一个换行符
newLine() 换行符
缓冲区的处理
void clear() 清除输出缓冲区的内容,若缓冲区为空,则产生 IOException 异常
void clearBuffer() 清除输出缓冲区的内容,若缓冲区为空,不会产生 IOException 异常
void flush() 直接将目前暂存于缓冲区的数据刷新输出
void close() 关闭输出流,流一旦被关闭,则不能再使用 out 对象做任何操作
int getBufferSize() 获取目前缓冲区的大小(kb)
int getRemaining() 获取目前使用后还剩下的缓冲区大小(kb)
boolean isAutoFlush() 返回 true 表示缓冲区满时(8kb)会自动刷新输出;false 表示缓冲区满时
不会自动清除并产生异常处理
4. session
一次对话可以包含多次请求与响应
void setAttribute(String name, Object value)
Object getAttribute(String name)
void invalidate() 使 session 对象失效,释放所有属性空间
通常把与用户会话状态相关的信息放入 session 范围内,对于一次请求资源间的信息传递,应该把信息传递给
request 范围内,然后通过请求转发实现;
5. application
application 对象在容器启动时实例化,在容器关闭时销毁。作用域为整个 Web 容器的生命周期
实现了 javax.servlet.ServletContext 接口
void setAttribute(String name, Object value)
Object getAttribute(String name)
void removeAttribute(String name) 根据属性名从 application 域中移除属性
6. pageContext
表示当前页面运行环境,用以获取当前 JSP 页面的相关信息;
pageContext 对象作用范围为当前 JSP 页面,可以访问当前 JSP 页面所有的内置对象
ServletRequest getRequest() 获取当前 JSP 页面的请求对象
ServletResponse getResponse() 获取当前 JSP 页面的响应对象
HttpSession getSession() 获取当前 JSP 页面有联系的会话对象
ServletConfig getServletConfig() 获取当前 JSP 页面的 ServletConfig 对象
ServletContext getServletContext() 获取当前 JSP 页面的运行环境对象
Object getPage() 获取当前 JSP 页面的 Servlet 实体
Exception getException() 获取当前 JSP 页面的异常对象,page指令的 isErrorPage 设为 true
JspWriter getOut() 获取当前 JSP 页面的输出流对象
存取域属性的方法
Object getAttribute(String name, int scope) 获取范围为 scope,名为 name 的属性对象
void setAttribute(String name, Object value, int scope) 以名/值对的方式存储 scope 范围域属性
void removeAttribute(String name, int scope) 从 scope 范围移除名为 name 的属性
Enumeration getArributeNamesInScope(int scope) 从 scope 范围中获取所有属性的名称
scope 参数
PAGE_SCOPE = 1 代表 page 范围
REQUEST_SCOPE = 2 代表 request 范围
SESSION_SCOPE = 3 代表 session 范围
APPICATION_SCOPE = 4 代表 application 范围
7. page 对象
JSP 翻译后的 Servlet 对象,很少使用
8. config 对象
JSP 翻译后的 Servlet 的 ServletConfig 对象,Servlet 初始化参数,web.xml
9. exception 对象
必须将此页面中 page 指令的 isErrorPage 属性值设为 true
-
JSP 四种作用域
-
页面域
生命周期:页面执行期间
可访问性:存储在页面域的对象只对它所在的页面可访问的 -
请求域
生命周期:一次请求过程,包括请求被转发(forward)或者被包含(include)的情况
可访问性:存储在请求域中的对象只有在此请求过程中才可以被访问 -
会话域
生命周期:某个客户端与服务器所连接的时间,客户端在第一次访问服务器时创建会话,在关闭浏览器或主动退出后,会话结束
可访问性:存储在会话域中的对象在整个会话期间(可能包含多次请求)都可以被访问 -
应用域
生命周期:从服务器开始执行服务到服务器关闭为止,时间最长的
可访问性:存储在应用域中的对象在整个应用程序运行期间可以被所有 JSP 和 Servlet 共享访问,使用时要特别注意存储数据的大小和安全性,否则可能会造成服务器负载过重和线程安全性问题对应 pageContext,request,session,application
都通过 setAttribute(String name, Object value) getAttribute(String name) 实现属性对象在不同作用域的数据共享
-
-
JavaBean
-
简介
一种是有用户界面(UI,UserInterface)的 JavaBean,例如 GUI 组件
另一种是没有用户界面,主要负责封装数据,业务处理的 JavaBean.(JSP 通常访问后一种) -
规范(Java 类)
- JavaBean 是一个公开的(public)类,以便被外部程序访问;
- 具有一个无参的构造方法(默认构造方法),以便被外部程序实例化时调用;
- 提供 setXxx() 方法和 getXxx() 方法,以便让外部程序设置和获取其属性;
-
<jsp:useBean>: 创建或查找 JavaBean 实例对象
<jsp:setProperty>: 设置 JavaBean 对象的属性值,相当于调用 JavaBean 对象的 setter 方法
<jsp:getProperty>: 获取 JavaBean 对象的属性值<jsp:useBean id="product" class="ProductBean" /> <jsp:setProperty property="price" value="23.5" name="product" /> <jsp:setProperty property="num" value="2" name="product" /> <jsp:getProperty property="totalPrice" name="product" />
<jsp:useBean>
语法: <jsp:useBean id="beanInstanceName" class="package.class" scope="page|request|session|application" /> id 属性:指定 JavaBean 对象的引用名称和其存储域属性名; class属性:指定 JavaBean 对象的完整类名; scope 属性:默认 page
<jsp:setProperty>
语法: <jsp:setProperty name="beanInstanceName" property="propertyName" value="propertyName"| property="propertyName" param="parameterName"| //有请求 property="propertyName"| property="*" /> name 属性指定 JavaBean 对象的名称,其值应与<jsp:useBean>标签中的 id 属性值相同; property 属性指定 JavaBean 对象的属性名; value 属性指定 JavaBean 对象的某个属性的值,可选; param 属性将一个请求参数的值赋给 JavaBean 对象的某个属性,可选; <jsp:setProperty>元素还可用于<jsp:useBean>元素起始标签和终止标签间, 表示 JavaBean 对象实例化时,对其属性进行初始化。若对象已存在,不执行。
<jsp:getProperty>
语法: <jsp:getProperty name="beanInstanceName" property="propertyName" />
-
-
表达式式语言(EL)
-
EL 的启用
<%@page isELIgnored = "true|false" %> true EL表达式被当成字符串直接输出 false JSP引擎调用EL引擎解释执行(默认)
特点:
可以访问 JSP 的内置对象; 简化了对 JavaBean,集合的访问方式; 可以对数据进行自动类型转换; 可以通过各种运算符进行运算; 可以使用自定义函数实现复杂业务功能;
-
EL 语法
${表达式}
表达式可以是常量,变量,可以使用 EL 隐含对象,EL 运算符和 EL 函数;
-
EL中的常量
布尔常量:true,false
整形常量:Long.MIN_VALUE 到 Long.MAX_VALUE 之间
浮点数常量:Double.MIN_VALUE 到 Double.MAX_VALUE
字符串常量:使用单引号或双引号引起来的一连串字符
NULL常量:表示引用对象为空,${null} 输出空 -
EL中的变量
${varname}
表达式按照 page, request, session, application 范围顺次查找名为 varname 的属性,
找到传回,没有找到回传 nullEL保留字
and or not empty div mod instance of eq ne It gt le ge true false null
-
EL中的操作符
"."操作符:访问对象的某个属性 ${productBean.category.name} "[]"操作符:可用于访问对象的属性,属性需使用双引号括起来 ${productBean["category"]["name"]} 当属性中包含了特殊字符,如:"."和"-" ${header["user-agent"]} "[]"可以访问有序集合或数组中的指定索引位置的某个元素 ${array[0]} "[]"可以访问 Map 对象的 key 关键字的值 ${map["key"]} "[]"可以和点操作符结合使用 ${user[0].username}
-
EL的错误处理机制
不提供警告,只提供默认值和错误,默认值是空字符串,错误是抛出一个异常不存在的变量:输出空字符串
不存在对象的属性:输出空字符串
存在对象的不存在属性:抛出 PropertyNotFoundException
-
-
3. EL隐含对象
1. 与范围有关的隐含对象
pageScope =pageContext.getAttribute()
requestScope =request.getAttrbute()
sessionScope =session.getAttrbute()
applicationScope =application.getAttrbute()
2.与请求参数有关的隐含对象
param =request.getParameter()
paramValues =request.getParameterValues()
3.其它隐含对象
pageContext 相当于 JSP 页面中的 pageContext 对象,用于获取 ServletContext,request,response,session
header =request.getHeader(String name)
headerValues =request.getHeader(String name)
cookie
initParam =application.getInitParameter(String name)
4. 运算符
1. 算术运算符
+ - * /或div %或mod
2. 关系运算符
==或eq !=或ne <或lt >或gt <=或le >=或ge
3. 逻辑运算符
&&或and ||或or !或not
4. 条件运算符
A?B:C
5. empty运算符
检测一个值是否为null或"空"
当操作数指向的对象为null时,返回true
当操作数是空字符串时,返回true
当操作数是集合或数组时,如没有任何元素,返回true
当操作数是java.util.Map对象一个关键字时,如Map为空,返回true
-
标准标签库(JSTL)
- JSTL函数库分类
标签库 前缀名称 URI 核心标签库 c http://java.sun.com/jsp/jstl/core 包含Web应用的通用操作的标签 I18N标签库 fmt http://java.sun.com/jsp/jstl/fmt 包含实现Web应用程序的国际化的标签 SQL标签库 sql http://java.sun.com/jsp/jstl/sql 包含用于访问数据库和对数据库中的数据进行操作的标签 XML标签库 x http://java.sun.com/jsp/jstl/xml 包含对XML文档中的数据进行操作的标签 函数标签库 fn http://java.sun.com/jsp/jstl/functions 由JSTL提供一套EL自定义函数,包含了JSP页面制作者经常要用到的字符串操作
-
将四个jar包导入相应工程下的WebContent/WEB-INF/lib
使用:在JSP页面使用JSTL标签库时,使用 taglib 指令指定需要使用的函数库前缀和URI
例:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
核心标签库
-
通用标签,用于操作变量
<c:out>标签 用于输出数据,等同于<%=表达式%><c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] /> value表示要输出的数据,可以是JSP表达式,EL表达式或静态值 escapeXml表示是否将>,<,&,'," 等特殊字符进行HTML字符实体转换后再进行输出,默认值为 true default表示如果value属性的值为null时所输出的默认值
<c:set>标签 用于设置各种范围域的属性
<c:set var="varName" value="value" [scope="{page|request|session|application}"] /> varName 指定要设置的范围域属性名; value 指定var属性的属性值; scope 指定var属性的范围域,默认page;
<c:remove>标签 用于删除各种范围域属性
<c:remove var="varName" [scope="{page|request|session|application}"] />
<c:catch>标签 用于捕获嵌套在标签体中的内容抛出的异常
<c:catch [var="varName"]> nested actions </c:catch> var属性用于标识捕获的异常对象名称,并将异常对象保存在page域中; 若未指定var属性,则仅捕获异常而不在page域中保存异常对象
-
条件标签,用于流程控制
<c:if> 用于条件判断
<c:if test="condition" [var="varName"] [scope="{page|request|session|application}"] > //condition为true时执行的代码 </c:if> test 用于指定条件表达式,返回boolean类型值; var 用于指定将test属性的执行结果保存到某个范围作用域的属性名称; scope 用于指定将test属性的执行结果保存到哪个范围作用域中
<c:choose>
<c:choose> //<c:when>或<c:otherwise>子标签 </c:choose>
<c:when>
<c:when test="condition"> //condition为true时,执行的代码 </c:when> <c:when>标签代表<c:choose>标签的一个条件分支,必须以<c:choose>为父标签,且必须在<c:otherwise>标签之前
<c:otherwise>
<c:otherwise> //执行的代码 </c:otherwise>
-
迭代标签,用于循环遍历集合
<c:forEach>
<c:forEach [var="varName"] items="collection" [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]> //标签体内容 </c:forEach> var用于指定将当前迭代到的元素保存到page域中的属性名称; items指定将要迭代的集合对象; varStatus表示当前被迭代到的对象的状态信息,包括四个属性: index:当前迭代成员的索引值; count:当前已迭代成员的数量; first:当前迭代到的成员是否为第一个; last:当前迭代到的成员是否为最后一个; begin表示遍历的起始索引,值为整数; end表示遍历的结束索引,值为整数; step表示迭代的步长,值为整数;
<c:forTokens>
<c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin=begin] [end=end] [step=step]> //标签体内容 </c:forTokens> items用于指定将要迭代的字符串; delims用于指定一个或多个分隔符; var用于将当前迭代的子字符串保存到page域中的属性名称;
-
URL标签,用于针对URL相关的操作
<c:url>
<c:url value="value" [var="varName"] [scope="{page|request|session|application}"] [context="context"]> [<c:param name="paramName" value="paramValue"/>] </c:url> value 指定要构造的 URL; var 指定构造出的 URL 结果保存到范围域中的属性名称; context 指定 URL 地址所需的同一容器下的 Web 应用上下文;此时value属性中地址必须是以"/"开头的地址 <c:param>标签指定 URL 地址传递的参数;(可选)
<c:import>
在 JSP 页面中导入一个 URL 地址指向的资源内容,静态或动态文件 <c:import url="url" [var="varName"] [scope="{page|request|session|application}"] [context="context"] [charEncoding="charEncoding"]> [<c:param name="paramName" value="paramValue"/>] </c:import> <c:import>标签与<jsp:include>动作指令功能相似,但<jsp:include>只能包含当前应用下的文件资源; 而<c:import>标签可以包含任何其他应用或网站下的资源
<c:redirect>
=response.sendRedirect() <c:redirect url="value" [context="context"]> [<c:param name="paramName" value="paramValue"/>] </c:redirect> url 用于指定重定向的目标资源的 URL 地址;
-
-
I18N 标签库
实现国际化和格式化功能,封装了 java.util 和 java.text国际化标签:绑定资源包,从资源包中的本地资源文件读取文本内荣的功能
格式化标签:对数字,日期时间等本地敏感的数据按本地化信息显示的功能
导入I18N标签库:<%@ taglib="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:formatDate>标签
<fmt:formatData value="date" [type="{time|date|both}"] [dateStyle="{default|short|medium|long|full}"] [timeStyle="{default|short|medium|long|full}"] [pattern="customPattern"] [timeZone="timeZone"] [var="varName"] [scope="{page|request|session|application"] /> value 指定要格式化的日期或时间; type 指定输出时间部分还是日期部分,或者两者都输出; dateStyle 指定日期部分的输出格式,type=date或both timeStyle 指定时间部分的输出格式,type=time或both pattern 指定一个自定义的日期和时间输出格式 timeZone 指定当前采用的时区; var 指定将格式化结果保存到某个范围域中某个属性的名称;
<fmt:formatNumber>标签
<fmt:formatNumber value="numbericValue" [type="{number|currency|percent}"] [pattern="customPattern"] [currencyCode="currencyCode"] [currencySymbol="currencySymbol"] [groupingUsed="{true|false}"] [var="varName"] [scope="{page|request|session|application"] /> value 指定需要格式化的数字; type 指定值得类型,数字(number),货币(currency),百分比(percent); currencyCode 指定货币编码; currencySymbol 指定货币符号 <fmt:setLocale value="zh_CN"/>
-
函数标签库
<%@ taglib="fn" uri="http://java.sun.com/jsp/jstl/functions" %>${fn:函数名(参数列表)}
- JSTL函数库分类
作者:jslancer
链接:http://www.jianshu.com/p/0799aa610 http://www.jianshu.com/p/0799aa610262
來源:简书