J2EE Architecture(9)
J2EE Architecture(9)
JSP规范
1、JSP技术帮助开发人员创建企业应用程序的表示部分,允许方便地生成动态清晰的内容。
在HTML内容中嵌入Java代码是JSP技术的思想灵魂。
JSP规范和平台允许JSP设计人员根据应用程序需要的动态内容,在HTML页面中嵌入任意数量的代码。
JSP设计允许分开编写HTML代码和Java代码,之后,可将其揉合在一起,生成JSP页。
1)在客户端访问JSP页时,需要经历以下两个阶段:
(1)转换阶段
转换阶段将JSP转换为Servlet类源文件。
在这个阶段,Web容器正确解释JSP页的内容,解释过程应生成语法和语义上正确无误的Java页面。
如果此阶段出现错误,将无法创建Servlet类,更无法将JSP提供给客户端。
(2)执行阶段
将Java源代码编译为特殊Servlet类字节码。
此阶段,Web容器将编译Servlet Java文件,必须确保不出现编译错误,并正确生成Servlet字节码。
接着,将Servlet加载到Web容器JVM,实例化JSP,此时的JSP已经可以接受客户请求。
在成功编译后,JSP页已变为多线程Servlet,交由Web容器中的JSP引擎执行。这个特殊Servlet包含3个重要方法,已控制JSP页的生命期,如下:
(1)jspInit()
(2)jspDestroy()
(3)_jspService()
注:在提供JSP页面定制特性时,可覆盖前两个方法,但不能覆盖_jspService()方法。
2、JSP语法
通过特殊标记“<%”和“%>”使用脚本元素,脚本元素通过适当方式嵌入HTML元素标记。
JSP技术的脚本元素分为以下5种:
1)注释
有3种:HTML注释、JSP注释和Java语言注释。JSP注释和Java语言注释显示在脚本标记“<%”和“%>”中,HTML注释不在脚本元素中显示。
2)指令(directive)标记
为转换阶段提供全局信息。其语法如下:
<%@ directive %>
指令类型有3种:page指令、include指令和taglib指令。
例:<%@ page session=false %>
3)声明(declaration)标记
它允许在脚本标记“<%”和“%>”中引入Java程序以及与Java相关的声明。
例:<%! public static final double pi=3.14159265; %>
Java使用的任何声明类型均可在这个标记中显示,如类变量、实例变量、实例方法、静态方法和内部类等。规范没有限制声明标记中的Java代码。
4)Scriptlet标记
Scriptlet标记允许将任何Java代码嵌入“<%”和“%>”标记中,输入代码将转换为_jspService()方法的一部分。
5)表达式(express)标记
它包含Java语言表达式的特定部分,在运行时,经过计算表达式生成输出。
可将表达式标记与HTML元素巧妙地结合在一起,以设置所需的输出格式。
例:<%= (pi*5*5)/4 %>
注意:与Scriptlet标记不同,表达式不以“;”结尾。
3、对象、隐性对象和作用域
JSP技术允许在服务器端创建对象,并使用某些隐性对象提供动态内容。
并非JSP页的所有部分都可以访问所有对象。
1)作用域
(1)页作用域
页作用域的对象只允许在说建页面中访问,对象存储在pageContext中。
在将响应返回给客户端时,将释放对象的所有引用。
(2)请求作用域
如多个页面服务同一个请求,则请求作用域的对象可供这些JSP页访问。
在将响应返回给客户端时,将释放对象的所有引用。
(3)会话作用域
比请求作用域大。会话包含多个请求/响应操作,参与会话的所有页面都可以访问会话对象域对象。
会话作用域对象的引用存储在隐性对象session中。
在会话完成后,将释放该对象的所有引用。
(4)应用程序作用域
在Web应用程序活动期间,应用程序作用域的对象将一直存在。
特定应用程序的所有Web组件都可以访问这些对象。
2)隐性对象
这些对象可简化开发人员的工作,可用于Scriptlet和表达式。
(1)请求对象
表示HttpServletRequest对象,其作用域为“请求”。
(2)响应对象
表示HttpServletResponse对象,其作用域为“响应”。
(3)pageContext对象
表示JSP的上下文,其作用域为“响应”。
(4)对话对象
HttpSession类型的对象,用于请求客户端。其作用域为“会话”。
(5)应用程序对象
ServletContext类型的对象,用于Web应用程序。其作用域为“应用程序”。
(6)out对象
该对象的作用是将输出写入输出流。其作用域为“页”。