4JSP基础.ppt_第1页
4JSP基础.ppt_第2页
4JSP基础.ppt_第3页
4JSP基础.ppt_第4页
4JSP基础.ppt_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、,Copyright 2008 By Neusoft Group. All rights reserved,JAVA WEB 编程JSP基础,东软人才实训中心,第四章:JSP基础,学时:5学时 教学方法:讲授ppt上机练习,目标: 本章旨在向学员介绍JSP作用及运行原理,JSP标签、JSP脚本元素、WEB应用的编码问题等。使学员能够熟练使用JSP技术进行动态页面编写。,主要内容,JSP的运行原理 JSP标签 JSP脚本元素 JSP注释 JSP程序片 JSP声明 JSP表达式 Web应用中的乱码问题,JSP基本原理,为什么是JSP?,思考 Servlet的缺点?,Servlet代码中的html标

2、签是作为字符串输出的,该代码中的html标签没法校验。 在Servlet中做表示逻辑、做显示非常不方便,而且处理和表示逻辑不清晰。因此,产生JSP,JSP是做显示逻辑的。,3.1 JSP基本原理(续),JSP介绍 JSP:JavaServer Pages。 JSP的目标:支持表示逻辑与业务逻辑的分离 简化表示逻辑的开发 明确开发人员的职责分工 表示逻辑: Web开发人员不需掌握Java 业务逻辑:Java开发人员不需使用Web页面 JSP的理想 不包含业务逻辑 不包含Java代码,3.1 JSP基本原理(续),创建并运行第一个JSP-login.jsp 如何执行JSP 首先应该将JSP正确的部

3、署到Tomcat服务器某一个应用当中 JSP文件放到WEB应用的目录下 不需要在web.xml文件中编写任何内容 Web应用目录结构体系必须完整,至少要描述出根目录,3.1 JSP基本原理(续),JSP的翻译 JSP的页面代码不能直接运行 JSP的页面代码被翻译成Java的源代码 翻译生成的Java类实现javax.servlet.jsp.HttpJspPage接口 Tomcat产生的类文件:tomcat_homeworkCatalinalocalhostAddressManageorgapachejsp viewlogin_jsp.java HttpJspPage接口的继承关系如下图,3.1

4、 JSP基本原理(续),Servlet和JSP两种技术的区别 Web层有两种技术:Servlet和JSP。JSP技术是java servlet API的扩展。JSP技术继承servlet,和servlet是同源的。 二者实现的技术和表现手段不一样: Servlet是由java源代码组成的。 JSP不是全由java源代码组成。JSP页面通常由静态HTML/XML组件,自定义JSP标签和称为scriptlet的java代码片断组成。 用JSP 和Servlet实现的功能是一样的,所有可以用servlet处理的功能都可以用JSP处理。反之亦然。,3.1 JSP基本原理(续),JSP与Servlet的

5、对应,3.1 JSP基本原理(续),JSP生命周期 翻译 编译 加载类 实例化类 jspInit()调用 _jspService()调用 jspDestroy()调用,3.1 JSP基本原理(续),第一步:翻译成Servlet。 在JSP第一次处理请求之前,JSP页面会被翻译为Servlet源文件。,3.1 JSP基本原理(续),第二步:编译。 Servlet源文件被编译成Java的字节码文件,3.1 JSP基本原理(续),第三步:容器加载Servlet类。,3.1 JSP基本原理(续),第四步:容器创建Servlet的实例。,3.1 JSP基本原理(续),第五步: Web容器调用实例的jsp

6、Init方法;准备阶段完成。 注:前5步,只是发生在JSP页面第一次被请求时。,3.1 JSP基本原理(续),第六步:Web容器调用_ jspService方法处理相应的请求。 当收到JSP页面的每个客户机请求时, Web容器调用_ jspService方法,并把请求和响应传递给该方法。 JSP生成的java代码中,不分get和post方法,只调用_ jspService方法。 JSP scriptlet和表达式就包括在该方法中,并进行处理。,3.1 JSP基本原理(续),第七步:当需要销毁实例时,Web容器调用jspDestroy方法,3.1 JSP基本原理(续),小结 JSP运行原理? J

7、SP最终要形成servlet类,并是以servlet对象形式工作,每个Jsp都要经过:翻译-编译-加载-实例化-初始化-处理请求-销毁7个步骤。 JSP每次运行时的1-7步是必须的吗?为什么? 不是。 因为JSP容器管理JSP页面生命周期的两个阶段:转换阶段和执行阶段。当有一个对JSP请求到来时,容器检验JSP页面的语法是否正确,将页面转换为Servlet源文件,然后调用javac工具类编译Servlet源文件,这一阶段是转换阶段。接下来,容器加载转换后的Servlet类,实例化一个对象处理客户端的请求,在请求处理完成后,响应对象被容器接收,容器将HTML格式的响应信息发送到客户端,这一阶段是

8、执行阶段。转换阶段是当一个Jsp第一次请求是处理的,以后就不会执行该阶段了。,3.1 JSP基本原理(续),小结 为什么第一次运行JSP时会很慢? 从整个过程中我们可以知道,当第一次加载JSP页面时,因为要将JSP文件转换为Servlet类,所以响应速度较慢。当再次请求时,JSP容器就会直接执行第一次请求时产生的Servlet,而不会再重新转换JSP文件,所以其执行速度和原始的Servlet执行速度几乎就相同了。在JSP执行期间,JSP容器会检查JSP文件,看是否有更新或修改。如果有更新或修改,JSP容器会再次编译JSP或Servlet;如果没有更新或修改,就直接执行前面产生的Servlet,

9、这也是JSP相对于Servlet的好处之一。,JSP标签,3.2 JSP标签,JSP 页面代码的分类 静态HTML内容 JSP的脚本元素(3.3节介绍) JSP标准动作(第7章介绍) JSP2.0的EL表达式(第7章介绍) JSP的自定义标签(第7章介绍),3.2 JSP标签(续),静态HTML的语法格式 HTML的语法 示例 My JSP 处理: 原封不动地被写入响应的主体中 翻译:被翻译成输出流的语句形式,插入到_jspService方法中,静态html内容作为输出的参数 执行与JSP代码的顺序相关,3.2 JSP标签(续),静态HTML的JSP代码示例 My JSP 示意翻译 publi

10、c void _jspService(HttpServletRequest req, HttpServletResponse res) throws out.println( “My JSP” ) ,JSP脚本元素,3.3 JSP脚本元素,JSP的脚本元素语法 脚本元素的分类 JSP Scriptlet JSP表达式 JSP声明 JSP注释 JSP指令,3.3 JSP脚本元素-Scriptlet,Java Scriptlet的语法格式 示例 处理: 按照Java的规范执行Java代码 翻译:Java代码在翻译时被直接插入到_jspService()方法中 执行与JSP代码的顺序相关,3.3 J

11、SP脚本元素-Scriptlet(续),Java Scriptlet的JSP代码示例 示意翻译 public void _jspService(HttpServletRequest req, HttpServletResponse res) throws String user=request.getParameter(“name”); ,3.3 JSP脚本元素-Scriptlet(续),思考? Scriptlet中写的变量是实例变量还是局部变量? 局部变量,因为被翻译到了_jspService()方法中。 可以在Scriptlet中定义方法吗? 不可以。因为方法中不能再定义方法。 可以在Sc

12、riptlet中定义类吗? 可以。局部的内部类。但是很少定义。 以前的servlet代码是否都可以替换成JSP代码?哪些servlet代码替换成JSP代码比较好? 都可以。但是,用于显示的servlet替换成JSP比较好。,3.3 JSP脚本元素-Scriptlet(续),Jsp的预定义变量: 在Jsp中不用声明,可以直接使用的变量。 JSP的预定义变量在翻译时,已经被声明和初始化好了的。,3.3 JSP脚本元素-Scriptlet(续),JSP的预定义变量,3.3 JSP脚本元素-Scriptlet(续),对象可以存放在如下作用域中: application:web应用。 session:一

13、个客户的多个请求。 request:当前的请求。 pageContext:是当前线程的当前页面。 ApplicationsessionrequestpageContext,3.3 JSP脚本元素-JSP表达式,JSP表达式的语法格式 注意:表达式后面不包括分号。 示例 处理: Java表达式的值被写入响应的主体中 翻译:被翻译成输出流的语句形式,插入到_jspService方法中,Java表达式的值作为输出参数 执行与JSP代码的顺序相关,3.3 JSP脚本元素-JSP表达式(续),JSP表达式的JSP代码示例 示意翻译 public void _jspService(HttpServletR

14、equest req, HttpServletResponse res) throws out.println( new java.util.Date() ); ,3.3 JSP脚本元素-JSP声明,JSP声明的语法格式 示例 处理: 按照Java的规范执行Java代码 翻译:Java声明在翻译时被直接插入到类中。 执行与JSP代码的顺序相关,3.3 JSP脚本元素-JSP声明(续),JSP声明的JSP代码示例 示意翻译 class Xxx implements HttpJspPage int counter = 0; public String getName(HttpServletRequ

15、est request) return request.getParameter(“name”); public void _jspService() throws ,3.3 JSP脚本元素-JSP声明(续),思考? Jsp声明中写的变量、方法和类,分别是什么属性? 变量为实例变量 方法为实例方法 类为内部类。,3.3 JSP脚本元素-JSP注释(续),JSP注释的语法格式 示例 处理 翻译时忽略,不包含在Java源文件中,3.3 JSP脚本元素-JSP注释(续),JSP注释 示例: 分类:JSP脚本元素,JSP注释 处理:翻译时忽略 HTML注释 分类:静态HTML内容 示例: 处理:包含在

16、响应中 Java注释 分类: JSP脚本元素,Java Scriptlet 示例: 处理:翻译时包含,编译时忽略,不包含在响应中,3.3 JSP脚本元素-JSP指令(续),JSP指令: 指令提供了JSP页面到JSP引擎的一些信息,JSP引擎根据提供的信息,作出一些翻译的设定。 JSP指令的语法格式 三种JSP指令 Page指令: Include指令: Taglib指令: 示例 ,3.3 JSP脚本元素-JSP指令(续),Page指令 示例 说明 在翻译时起作用,作用在整个JSP文件 位置无关,最好写在JSP的最前面 一个页面可以有多个page指令,但每个属性只允许出现一次(import属性除外

17、),3.3 JSP脚本元素-JSP指令(续),page指令的属性 contentType: pageEncoding: Buffer: Autoflush: Language: Extends: Import: Info: isThreadSafe: Session: errorPage: isErrorPage:,3.3 JSP脚本元素-JSP指令(续),page指令的language属性 指明页面的脚本语言 Java是缺省的、当前唯一合法的选择 page指令的extends属性 指定此JSP页面生成的Java类的超类 page指令的import属性 定义此JSP页面生成的Java类应输入的

18、包 page指令中唯一允许多次出现的属性 默认的导入包:java.lang.*, javax.servlet.*, javax.servlet.http.*, java.servlet.jsp.*,3.3 JSP脚本元素-JSP指令(续),page指令的contentType属性 定义输出的MIME TYPE,对应响应信息的Content-Type标题 缺省的是text/html page指令的pageEncoding属性 定义输出流的字符编码 缺省的是ISO-8859-1,3.3 JSP脚本元素-JSP指令(续),输出流的缓冲 输出流的内容不直接发送给客户,使用缓冲 清空缓冲区会将缓冲区的内容发送给客户 缓冲区的清空:明确清空(ServletResponse.flushBuffer方法)、页面完成、缓冲区已满后自动清空 page指令的buffer属性 定义输出流(JspWriter)使用的缓冲区大小 none或者nkb,例:buffer=“8kb”或者buffer=“none” 缺省值一般是8kb page指令的autoFlush属性 定义缓冲区已满后,是否自动清空 属性值是true表示自动清空,false表示抛出异常 缺省值是true,3.3 JSP脚本元素-JSP指令(续),page指令的info属性 定义JSP页面

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论