欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Servlet学习笔记(七)—— JSP概述

程序员文章站 2022-06-24 20:16:28
1.Servlet两个缺陷: ①所有HTML标签必须包在Java字符串中,使得发送HTTP响应十分繁琐; ②所有文本和HTML标签都必须进行硬编码,即使对表示层做极其微小的修改...
1.Servlet两个缺陷: ①所有HTML标签必须包在Java字符串中,使得发送HTTP响应十分繁琐; ②所有文本和HTML标签都必须进行硬编码,即使对表示层做极其微小的修改,也需要重新编译。
2.注释: (1)JSP备注:,不会发送到浏览器,不能嵌套 (2)HTML备注:,不被容器处理,直接发送到浏览器,用途之一是标识JSP页面。在处理带有许多JSP片段的应用程序时,开发者通过查看HTML源代码,可以轻松查出某个HTML代码部分生成了那个JSP页面。
3.隐式对象:
对象 类型
request javax.servlet.http.HttpServletRequest
response javax.servlet.http.HttpServletResponse
out javax.servlet.jsp.JspWriter
session javax.servlet.http.HttpSession
application javax.servlet.ServletContext
config javax.servlet.ServletConfig
pageContext javax.servlet.jsp.PageContext
page javax.servlet.jsp.HttpjspPage
exception java.lang.Throwable
out类似于HttpServletResponse中调用 page对象表示当前的JSP页面 getWriter()之后得到的java.io.PrintWriter
4.三个句法元素: (1)指令directive:指示JSP转换器应该如何将某JSP页面转换为Servlet ①page:就当前JSP页面的某些方面对JSP转换器提出指示 。page指令可以出现在页面的任何位置。只是当它包含contentType或者pageEncoding属性时,必须放在所有模板数据之前,并且是在利用Java 代码发送任何内容之前。这是因为必须在发送任何内容之前设置内容类型和字符编码。 ②include:将另一个文件的内容放在当前的JSP页面中。文件扩展名.jspf (2)脚本元素scripting:将Java代码和比高成一个JSP页面 ①Scriplet:在一个Scriplet中定义的变量,对于它后面的其他Scriplet也是可见的 ②声明:能在JSP页面使用的变量和方法 ③表达式:Today is 表达式后面不需要分号 关闭脚本元素:随着Expression Language的发展,建议利用EL来访问服务器端的对象,而不是在JSP页面中编写Java代码。因此,原本开启的脚本元素,可以在部署描述符的中定义一个scripting-invalid元素,将它关闭,例如: *.jsp <scripting-invalid>true</scripting-invalid> (3)动作action:被编译成执行某个动作的Java代码 ①useBean:创建一个与某个Java对象相关的脚本变量,将表现逻辑与业务逻辑分开 ②setProperty与getProperty:保存与获取一个java对象中的一个属性 ③include动作: include指令和include动作的区别: include指令是在页面转换时使用,比如JSP容器将页面转换成一个生成的Servlet的时候;include动作是在发生请求的时候使用。 可以通过include动作传递参数,但是include指令不可以。 使用include指令时,被包含资源的文件扩展名并不重要;使用include动作时,文件扩展名必须是jsp ④forward:将当前页面跳转到另一个不同的资源 forword与redirect的区别: https://zhulin902.iteye.com/blog/939049 /kf/201109/105650.html
5.错误处理: (1)用try语句处理Java代码 (2)指定一个页面,让它在应用程序遇到未捕捉的异常时显示出来。 利用page指令的isErrorPage属性,就可以把一个JSP页面变成一个错误处理页面 6.概述: (1)Jsp页面也是一个Servlet,但简单的多: ①不需要编译JSP页面; ②*.jsp为扩展名的文本文件,可以用任意文本编辑器编写。 (2)JSP页面在JSP容器中运行,Servlet容器一般也是JSP容器。Tomcat就是一个Servlet/JSP容器。 (3)第一次请求一个JSP页面时,容器所做的两件事: ①将JSP页面转换车一个JSP页面实现类,即一个实现javax.servlet.jsp.JspPage或者javax.servlet.jsp.HttpjspPage接口的Java类。JspPage是javax.servlet.Servlet的子接口,所以每个Jsp页面都编程一个Servlet。 ②转换成功,容器编译Servlet类,加载和实例化Java字节码,执行它通常对Servlet所做的生命周期操作。 (4)对于同一个JSP页面的后续请求,容器会查看这个JSP页面自从最后一次转换以来是否被修改过。如果修改过,就会重新转换、编译、执行;若没有,则执行内存中已经存在的Servlet。所以,第一次掉一个JSP页面的时间比后续请求都更长。解决这个问题的措施: ①配置应用程序,在应用程序启动而不是初始请求的时候,调用所有的JSP页面进行转换编译。 ②预先编译JSP页面,并将它们以Servlet的方式进行部署。 (5)JSP API的4个包: ①javax.servlet.jsp ②javax.servlet.jsp.target ③javax.el ④javax.servlet.jsp.el (6)JSP 页面包含句法元素和模板数据: ①就是句法元素,HTML标签和文本就是模板数据。 (7)JSP不需要在部署描述符中进行标注,或者映射成一个URL
(8)添加完一个新的JSP页面不需要重启Tomcat 7.如何查看JSP转译成servlet后的源代码? 在eclipse的工作区\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\(项目名)\org\apache\jsp这里。