JSP概述
JSP页面允许在标准HTML页面中包含Java代码
JSP技术的目标是支持表现和业务逻辑的分离
Web设计人员可以独立设计和修改页面<前台JSP>
Java平台的程序员可以独立编写业务逻辑代码<后台Servlet>
jsp是servlet。
修改内容不需要重启服务器
处理流程
第一步:
如果第一次访问jsp页面,JSP Parser将JSP页面翻译成Servlet代码;
如果不是第一次访问执行第四步;
第二步:
编译Servlet代码,并将编译过的类文件装入Web容器(JVM)环境;
第三步:
Web容器为JSP页面创建一个Servlet类实例,并执行jspInit方法;
第四步:
Web容器为该JSP页面调用Servlet实例的_jspService方法;将结果发送给用户
脚本元素
脚本元素<% %>由JSP引擎处理;所有其它文本、脚本以外的元素均被作为响应的一部分。
JSP脚本元素分为五类:
注释标签: <%-- comment --%>
指令标签: <%@ directive %>
声明标签: <%! declaration %>
脚本标签: <% code %> 写java代码,在java控制台输出信息
表达式标签: <%=expression %> 内容输出到网页中
x=11
注释
<%-- JSP注释只在JSP代码中可见,不显示在servlet代码或响应中。–%>
指令
指令标签影响JSP页面的翻译阶段
<%@ page import=“java.util.*” %>
声明
声明标签允许JSP页面开发人员包含类级声明,声明属性和方法。
<%! public static final String DEFAULT_NAME = “Hello World”; %>
脚本
脚本标签允许JSP页面开发人员在_jspService方法中包含任意的Java代码
<% if ( gender == 1 ) { %>
I is a bod.
<% } else { %>
I is girl
<% } %>
表达式
达式标签封装Java运行时的表达式,其值被送至HTTP响应流
Ten is <%= (2 * 5) %>
脚本翻译
指令标签
根据指令内容直接翻译到Servlet相应位置
声明标签
定义的变量翻译成Servlet的属性;
声明的方法翻译成Servlet的方法;
定义的类翻译成Servlet的内部类;
脚本标签
依照先后顺序,翻译到_jspservice方法里
表达式标签
封装java运行时表达式,其值直接到相应位置。
注释标签
不翻译到Servlet中。
除上述脚本元素以外所有代码,按照先后顺序全部视为文本,翻译到_jspservice方法里,out.print直接输出。
数据库查询的结果如何返回给jsp?
内置对象
在jsp中存在9个隐含(内置)变量,这些对象不经过显示声明直接使用,也不需要专门的代码创建其实例,在程序设计中可以直接使用这些对象。
request
与请求相关的HttpServletRequest对象
response
与返回浏览器的响应相关的HttpServletResponse对象
session
返回当前用户请求会话相关的HttpSession对象
application
用于Web应用的ServletContext对象
out
与响应的输出流相关的JspWriter对象
config
与该JSP页面的servlet相关的ServletConfig对象配置
page
该变量与Java编程语言中的this变量等价
pageContext
该对象封装了一个JSP页面请求的环境
exception
由其它JSP页面抛出的Throwable对象,该变量只在“JSP错误页面”中可用
模板重用
指令重用。
指令的重用是数据共享的,不能定义相同的变量。
标准动作只是动态引入页面,数据不共享。