j2ee架构与程序设计课件

上传人:aa****6 文档编号:53680203 上传时间:2018-09-04 格式:PPT 页数:135 大小:4.98MB
返回 下载 相关 举报
j2ee架构与程序设计课件_第1页
第1页 / 共135页
j2ee架构与程序设计课件_第2页
第2页 / 共135页
j2ee架构与程序设计课件_第3页
第3页 / 共135页
j2ee架构与程序设计课件_第4页
第4页 / 共135页
j2ee架构与程序设计课件_第5页
第5页 / 共135页
点击查看更多>>
资源描述

《j2ee架构与程序设计课件》由会员分享,可在线阅读,更多相关《j2ee架构与程序设计课件(135页珍藏版)》请在金锄头文库上搜索。

1、J2EE架构与程序设计,主讲:XXX 西北工业大学软件与微电子学院,第六章 JSP(上),主要内容,JSP基本语法 JSP运行机制 JSP寿命周期管理 JSP属性,概述,JSP最终以servlet方式在容器中运行 容器将JSP文件翻译成servlet类的源文件(.java),然后将其编译成servlet class 以和手工编写servlet同样的方式运行servlet,概述,例子 JSP:BasicCounter.jsp工具类:Counter.java,Java代码片断,概述,部署方法Tomcat访问,若将包目录和类文件放在WEB-INF/classes目录下,则web应用的所有部分都能访问

2、到它,http:/localhost:8080/testJSP1/BasicCounter.jsp,JSP基本语法,指令(directive) 一个JSP元素,用来给JSP容器一个说明,在翻译的时候被解释。有三种JSP指令:page, include, taglib page指令 定义与页面相关的属性,JSP2.0定义了13种属性 import 定义将在生成的servlet类中添加的Java import语句。缺省情况下自动加入:java.lang, javax.servlet, javax.servlet.http, javax.servlet.jsp isThreadSafe 定义生成的s

3、ervlet是否实现SingleThreadModel。缺省值为“true”,表示web应用是线程安全的,不需要实现SingleThreadModel。若值为“false”,表示生成的servlet实现SingleThreadModel contentType 定义JSP响应的MIME类型 isELIgnored 定义当JSP页面翻译的时候,是否EL表达式被忽略,JSP基本语法,isErrorPage 定义当前的页面是否为另一个JSP页面的错误页面。缺省值为“false”。如果值为“true”,页面可以访问隐含的exception对象;否则不能访问 errorPage 定义一个URL资源,未捕

4、获的异常将发送到该资源。如果该资源为JSP页面,则该页面有一个isErrorPage=“true”的page指令 language 定义在脚本、表达式和声明中使用的脚本语言,现在其值只能为“java” extends 定义本JSP页面将被容器编译成的servlet类的超类 session 定义该JSP页面是否有一个隐含的session对象,缺省为“true”,JSP基本语法,buffer 定义隐含的out对象如何处理缓冲,参考JspWriter autoFlush 定义缓冲了的输出是否自动提交(flush),缺省值为“true” info 定义一个字符串,它可以放进转换后的JSP页面,并可以通

5、过servlet的getServletInfo()方法获得 pageEncoding 定义JSP页面的字符编码。缺省值为:“ISO-8859-1”,JSP基本语法,例子:使用import属性导入外部的包 导入一个包导入多个包,注意符号,用逗号分隔,JSP基本语法,include指令 定义一段文字或代码,它可以在当前页面被解析时加入其中 增强了代码的复用性 例如: taglib指令 定义JSP可以使用的标签库 例如:,JSP基本语法,表达式(expression) 表达式在运行时转化成out.print()的参数 不能将返回值为void的方法作为表达式,注意 “=” 符号,JSP基本语法,声明(

6、declaration) 在java代码片断(scriptlet)中定义的变量,所有的java代码片断和表达式代码都在一个service方法中,所以在java代码片断中声明的变量总是本地变量!,生成的servlet代码在:yourTomcatHomeDir/work/Catalina/yourServerName/yourWebAppName/org/apache/jsp,JSP基本语法,如何定义静态变量? JSP声明 用于声明生成的servlet类的成员,即变量和方法 间的部分将被添加到service方法之外 可以定义静态变量和方法 变量定义,注意 “!” 符号,JSP基本语法,方法定义,J

7、SP运行机制,容器如何处理JSP 查找指令,获取解析JSP所需的信息 创建HttpServlet子类 对于Tomcat5而言,生成的servlet扩展如果有一个具有import属性的page指令,将import声明写在类前面的包声明之后 对于Tomcat5而言,包声明为:如果有声明(declarations),就将它们写入类文件,通常在类声明之后,service方法之前 创建service方法,方法名为_jspService()。它将被servlet超类的重载service()方法调用,并接收HttpServletRequest和HttpServletResponse。容器声明并初始化所有隐含

8、对象 将HTML文本、java代码片断、表达式整理到service方法中,格式化并写入PrintWriter响应输出,JSP运行机制,一个例子,JSP运行机制,隐含对象,封装了其它隐含对象。通过它可以获得其他隐含对象和属性的引用,在error page中使用,JSP寿命周期管理,JSP寿命周期,容器实例化servlet并运行jspInit()方法,对象现在成为一个servlet,准备接收客户请求,容器创建一个新的线程来处理客户请求,servlet的_jspService()方法运行,以后与传统servlet处理方式无异,转换和编译工作仅进行一次,JSP寿命周期管理,生成的servlet 容器从

9、JSP生成一个类,它实现HttpJspPage接口 jspInit()方法 从init()方法调用,可重载 jspDestroy()方法 从destroy()方法调用,可重载 _jspService()方法 从service()方法调用,不能重载。完全由容器开发商从JSP代码生成,JSP寿命周期管理,初始化JSP 可以在JSP中进行生成的servlet初始化 配置servlet初始化参数JSP声明,重载jspInit()方法,JSP属性,使用四种隐含对象get/set属性 对应四种不同的作用域 除了标准的servlet request, session和context作用域外,增加了page作

10、用域对应pageContext对象,JSP属性,在JSP中,可以只通过pageContext隐含对象,get/set任何作用域中的属性 pageContext,思考与讨论题,JSP指令有哪些,怎样表示 JSP表达式的本质 JSP声明怎样转换成Java代码 JSP运行机制 JSP隐含对象有哪些,与标准servlet API对象如何对应? JSP的寿命周期 怎样自定义地初始化一个JSP JSP的四种作用域,思考与讨论题,JSP指令有哪些,怎样表示 JSP表达式的本质 JSP声明怎样转换成Java代码 JSP运行机制 JSP隐含对象有哪些,与标准servlet API对象如何对应? JSP的寿命周期

11、 怎样自定义地初始化一个JSP JSP的四种作用域,主要内容 JSP(下),JavaBean标准动作(Standard Action) JSP表达式语言(EL) 其他JSP标准动作 Include Forward,概述,将所有的Java代码写在JSP页面中是一种坏习惯 Web页面设计师可能不懂Java 在JSP中写Java代码使其难于更改和维护 解决方案 Action 是一种JSP元素,它可以作用于隐含对象和其他服务器端对象,或定义新的脚本变量 遵从XML element语法规范:start tag, body, end tag;tag必须使用前缀 分为标准Action和自定义Action E

12、L 提供了一种调用Java代码的简单方法 可以部分地取代JSP中的Java代码片断和表达式 使用EL,不需要在JSP中写方法的代码,可以写在JSP外部,用EL调用 EL对非Java程序员来说更简单,对Java程序员来说更容易维护,JavaBean标准动作,JavaBean标准动作 目标:消除JSP中的脚本(Java代码片断、声明、表达式) 例子: ServletJSP,JavaBean标准动作,用声明和初始化一个bean属性用获取bean对象型属性的属性值用创建一个bean 如果找不到一个名为“person”的属性对象,它就创建一个 生成的servlet根据id和scope的值检查bean,如

13、果不存在相应bean对象,它就用class中的值实例化一个对象,并把它赋予id,然后将它设置成scope中的一个属性,标识一个JavaBean标准动作,声明bean对象的标识符,声明bean对象的类,声明bean对象的属性范围,标识标准动作,标识实际的bean对象。与标签中的“id”值匹配,标识属性名(在bean类中用get/set方法读取和设置),缺省为“page”,不能是抽象的,且必须有一个无参数的构造方法,JavaBean标准动作,容器生成的servlet的_jspService()方法,根据id的值定义一个变量。这个变量可以被JSP的其它部分引用,试图在tag中定义的作用域中获取属性,

14、并将结果赋予id变量,如果在定义的作用域中没有一个具有这样名字的属性,最后,在定义的作用域中将这个新对象设置为一个属性,JavaBean标准动作, 设置bean属性值作为元素体的,当useBean有元素体时,才加入代码; 利用反射机制的通用的设置属性方法,等价于person.setName(“Fred”);,元素体中的代码运行是有条件的。只有当找不到bean型属性,并且创建了一个新的bean时才运行,JavaBean标准动作,多态bean引用标签的type属性生成的servlet类,引用类型是抽象类Person,Bean对象类型是具体类Employee,type可以是:类、抽象类或接口,typ

15、e用于定义bean(可以是抽象的);class用于实例化bean(必须是具体的),有:type x = new class(),JavaBean标准动作,标签中使用type属性,不使用class属性如果在给定作用域中存在名为id的bean对象属性,该bean对象满足type定义,则可以运行 Else,则抛出异常:判断题 servletJSP,JavaBean标准动作,在标签中使用param属性 例子:直接将请求发送到JSP,不经过servlet HTMLTestBean.jsp使用param属性,与请求参数名相同,进一步改进,JavaBean标准动作,使用与Bean property同名的请求

16、参数 HTMLTestBean.jsp,如果请求参数与bean property名匹配,则不需在标签中为该属性赋值,遍历并找到与请求参数匹配的bean property名,并将其值设为相应的请求参数值,Bean标签可以从请求参数自动转换到String和原数据类型的property,JavaBean标准动作,Bean property的类型不是String或原类型 打印person的dog的名字 Servlet,JavaBean标准动作,result.jsp,只能访问bean型属性的properties,不能访问嵌套的properties,Dogs name is: Spike,Dogs name is: foo.Dog799338,实际是调用了toString()方法,JSP表达式语言(EL),EL提供了一种调用Java代码的简单方法 用EL获取嵌套的bean类型属性的property相当简单使用非Java语法 解构EL 通常写在大括号中,前面加$符号 第一个变量是隐含对象或属性,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > 教育/培训/课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号