首页 > 代码库 > Servlet学习笔记(七)—— JSP概述
Servlet学习笔记(七)—— JSP概述
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 |
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 <%= java.util.Calendar.getInstance().getTime() %> 表达式后面不需要分号
关闭脚本元素:随着Expression Language的发展,建议利用EL来访问服务器端的对象,而不是在JSP页面中编写Java代码。因此,原本开启的脚本元素,可以在部署描述符的<jsp-property-group>中定义一个scripting-invalid元素,将它关闭,例如:
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>true</scripting-invalid>
</jsp-property-group>
(3)动作action:被编译成执行某个动作的Java代码
①useBean:创建一个与某个Java对象相关的脚本变量,将表现逻辑与业务逻辑分开
②setProperty与getProperty:保存与获取一个java对象中的一个属性
③include动作:
include指令和include动作的区别:
include指令是在页面转换时使用,比如JSP容器将页面转换成一个生成的Servlet的时候;include动作是在发生请求的时候使用。
可以通过include动作传递参数,但是include指令不可以。
使用include指令时,被包含资源的文件扩展名并不重要;使用include动作时,文件扩展名必须是jsp
④forward:将当前页面跳转到另一个不同的资源
forword与redirect的区别:
http://zhulin902.iteye.com/blog/939049
http://www.2cto.com/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
(8)添加完一个新的JSP页面不需要重启Tomcat
7.如何查看JSP转译成servlet后的源代码?
在eclipse的工作区\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\(项目名)\org\apache\jsp这里。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。