Presentation is loading. Please wait.

Presentation is loading. Please wait.

J2EE——第12章JavaSerer Pages技术

Similar presentations


Presentation on theme: "J2EE——第12章JavaSerer Pages技术"— Presentation transcript:

1 J2EE——第12章JavaSerer Pages技术

2 JavaServer Pages技术 主要特性 JSP页面 开发JSP页面的语言 访问服务器端对象的表达式语言 定义JSP语言扩展的机制
供Web容器开发人员使用的API JSP页面 静态数据(HTML, SVG, WML, XML) JSP元素(用于构造动态内容,标准、XML语法)

3 JSP示例(1) <%@ page contentType="text/html; charset=UTF-8" %>
taglib uri=" prefix="c" %> taglib uri="/functions" prefix="f" %> <html> <head><title>Localized Dates</title></head> <body bgcolor="white"> <jsp:useBean id="locales" scope="application“ class="mypkg.MyLocales"/> <form name="localeForm" action="index.jsp" method="post"> <c:set var="selectedLocaleString" value="${param.locale}" /> <c:set var="selectedFlag" value="${!empty selectedLocaleString}" /> <b>Locale:</b>

4 JSP示例(2) <select name=locale>
<c:forEach var="localeString" items="${locales.localeNames}" > <c:choose><c:when test="${selectedFlag}"> <c:choose> <c:when test="${f:equals(selectedLocaleString,localeString)}"> <option selected>${localeString}</option> </c:when> <c:otherwise> <option>${localeString}</option></c:otherwise> </c:choose> </c:when><c:otherwise><option>${localeString}</option></c:otherwise> </c:choose></c:forEach> </select> <input type="submit" name="Submit" value="Get Date"> </form> <c:if test="${selectedFlag}" > <jsp:setProperty name="locales" property="selectedLocaleString" value="${selectedLocaleString}" /> <jsp:useBean id="date" class="mypkg.MyDate"/> <jsp:setProperty name="date" property="locale" value="${locales.selectedLocale}"/> <b>Date: </b>${date.date}</c:if></body></html>

5 JSP示例(3)

6 MVC体系结构 模型 系统的内部状态 可以改变状态的操作(事务逻辑) 视图 提供可交互的界面,向用户显示模型数据 控制器
响应客户的请求,根据客户的请求来操纵模型,并把模型的响应结果用视图显示个客户

7 Struts MVC示意图

8 JavaServer Pages Standard Tag Library
流程控制 c:if、c:choose、c:when、c:otherwise 设置作用域变量 c:set 编码URL c:url 提供地区敏感的消息、编号和日期 fmt:message、fmt:formatNumber fmt:formatDate

9 JSP页面的生命周期 如果servlet更旧,则将jsp转换为servlet并编译 静态数据:可将该数据发送到响应流中的代码 JSP元素
指令:控制Web控制器如何转换和执行JSP页面 表达式:作为参数传递到JSP表达式计算器的调用 jsp:[set|get]Property:到JavaBeans组件的调用 jsp:[include|forward]:到Java Servlet API的调用 jsp:plugin:转换为激活applet的浏览器特定标记 自定义标签:到实现自定义标签的标签处理器调用

10 转换和编译后的生命周期 如果JSP页面的servlet的实例不存在,则容器将
通过调用jspInit方法初始化servlet实例 容器调用_jspService方法,传递request和response对象 如果容器需要删除JSP页面的servlet,则调用jspDestroy方法

11 页面指令--缓冲 <%@ page buffer=“none|xxxkb” %>
大的缓冲区允许在实际发回客户端前编写更多的内容,从而使JSP页面有更多的时间来设置适当的状态代码和标题,或者转发到另外的Web资源 小的缓冲区将降低服务器内存的加载量,使客户端更快地启动接收数据的操作

12 页面指令--处理错误 <%@ page errorPage=“file_name” %>
page isErrorPage="true" %> taglib uri=" prefix="c" %> taglib uri=" prefix="fmt" %> <html><head><title><fmt:message key="ServerError"/></title></head> <body bgcolor="white"><h3><fmt:message key="ServerError"/></h3> ${pageContext.errorData.throwable}<c:choose> <c:when test="${!empty pageContext.errorData.throwable.cause}"> : ${pageContext.errorData.throwable.cause} </c:when> <c:when test="${!empty pageContext.errorData.throwable.rootCause}"> : ${pageContext.errorData.throwable.rootCause} </c:when></c:choose></body></html>

13 创建静态内容和动态内容 在JSP页面中使用对象 隐含对象:page,request,session,application
page contentType="text/vnd.wap.wml"%> page contentType="text/html; charset=UTF-8" %> 在JSP页面中使用对象 隐含对象:page,request,session,application 应用程序特定对象:JSP标准标签、脚本元素 共享对象 page isThreadSafe="true|false" %> 正确同步page级别定义的所有共享对象的访问 声明、page作用域的JavaBean和pageContext

14 表达式语言 EL表达式可用于 静态文本 可以接受表达式的任何标签属性
<c:if test="${sessionScope.cart.numberOfItems > 0}"> ... </c:if> <c:if test="${bean1.a < 3}">...</c:if> <c:if test="true">...</c:if> <mytags:example attr1="an expression is ${'${'}true}" /> page isELIgnored ="true|false" %> EL表达式可用于 静态文本 可以接受表达式的任何标签属性 <some:tag value="${expr}"/> <some:tag value="some${expr}${expr}text${expr}"/> <some:tag value="sometext"/>

15 变量 PageContext.findAttribute(String)
${product}:page,request,session,application等scope expr-a.expr-b等价于expr-a[expr-b] 隐含对象 PageContext: servletContext, session, request, response param, paramValues, header, headerValues, cookie, initParam pageScope, requestScope, sessionScope, applicationScope

16 常量 true, false java整数 java浮点数 字符串:”或’ 转义:\ null

17 运算符 +、-、*、/、div、%、mod and、&&、or、||、not、!
==、eq、!=、ne、<、lt、>、gt、<=、le、>=、ge empty A?B:C 保留字:以上、instanceof

18 示例(1)

19 示例(2)

20 示例(3)

21 函数 functions.tld: <%@ taglib prefix="f" uri="/functions"%> ...
<c:when test="${f:equals(selectedLocaleString, localeString)}" > package mypkg; public class MyLocales { ... public static boolean equals( String l1, String l2 ) { return l1.equals(l2); } } functions.tld: <function> <name>equals</name> <function-class>mypkg.MyLocales</function-class> <function-signature>boolean equals( java.lang.String, java.lang.String )</function-signature> </function>

22 JavaBeans组件 可重用的Java类,符合特定的设计约定 组件属性 读/写、只读、只写 简单属性(单个值),或索引属性(值数组)
PropertyClass getProperty() {…} setProperty(PropertyClass pc) {…}

23 创建和使用JavaBeans组件 <jsp:useBean id="beanName"
class="fully_qualified_classname" scope="scope"/> class="fully_qualified_classname" scope="scope"> <jsp:setProperty … /> </jsp:useBean> <jsp:useBean id="locales" scope="application" class="mypkg.MyLocales"/>

24 设置JavaBeans组件属性 <jsp:setProperty name="beanName" property="propName" value="string constant"/> <jsp:setProperty name="beanName" property="propName" param="paramName"/> <jsp:setProperty name="beanName" property="propName"/> <jsp:setProperty name="beanName" property="*"/> <jsp:setProperty name="beanName" property="propName" value="expression"/> <jsp:setProperty name="beanName" property="propName" > <jsp:attribute name="value">expression</jsp:attribute> </jsp:setProperty> beanName必须是在useBean元素中为id属性指定的那一个 在JavaBeans组件中,setPropertyName方法必须存在 paramName必须是参数名称

25 设置JavaBeans组件属性(示例) 检索JavaBeans组件属性
<c:set var="bid" value="${param.bookId}"/> <jsp:setProperty name="bookDB" property="bookId" value="${bid}" /> <jsp:useBean id="bookDB" class="database.BookDB" scope="page"> <jsp:setProperty name="bookDB" property="database" value="${bookDBAO}" /> </jsp:useBean> 检索JavaBeans组件属性 ${bookDB.bookDetails.title} <jsp:getProperty name="beanName" property="propName"/>

26 使用自定义标签 标签文件.tag和标签库描述符文件.tld 绝对URI
<prefix:tag attr1="value" ... attrN="value" /> <prefix:tag attr1="value" ... attrN="value" > body</prefix:tag> taglib prefix="tt" [tagdir=/WEB-INF/tags/dir | uri=URI ]%> taglib prefix="tlt" uri="/WEB-INF/iterator.tld"%> taglib prefix="tlt" uri="/tlt"%> 标签文件.tag和标签库描述符文件.tld 绝对URI Core: XML: Internationalization: SQL: Functions:

27 包括标签库实现 标签文件:/WEB-INF/tag 标签处理器类:/WEB-INF/classes 打包的标签库:/WEB-INF/lib
<J2EE_HOME>/lib/appserv-jstl.jar 在JSP页面中重用内容 include file="filename" %> include file="banner.jspf" %> 动态包含<jsp:include page="includedPage" /> <jsp:include page="response.jsp"/>

28 将控制转移到另一Web组件 <jsp:forward page="/main.jsp" />
<jsp:include page="..." > <jsp:param name="param1" value="value1"/> </jsp:include> A=foo A=bar A=bar,foo

29 包括小程序 <jsp:plugin type="applet" code="DigitalClock.class" codebase="/bookstore2" jreversion="1.4" align="center" height="25" width="300" nspluginurl=" iepluginurl=" > <jsp:params> <jsp:param name="language" value="${pageContext.request.locale.language}" /> <jsp:param name="country" value="${pageContext.request.locale.country}" /> <jsp:param name="bgcolor" value="FFFFFF" /> <jsp:param name="fgcolor" value="CC0066" /></jsp:params> <jsp:fallback><p>Unable to start plugin.</p></jsp:fallback> </jsp:plugin>

30 设置JSP页面组的属性 isELIgnoreed pageEncoding(不一致导致错误) 定义隐式包含
deploytool,页面指令,标签文件指令 pageEncoding(不一致导致错误) deploytool,页面指令 定义隐式包含 deploytool preludes and codas


Download ppt "J2EE——第12章JavaSerer Pages技术"

Similar presentations


Ads by Google