当浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。
解析JSP文件。将JSP文件转为servlet。编译servlet。容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果您需要执行自定义的JSP初始化任务,复写jspInit()方法就行了
public void jspInit(){ // 初始化代码 }当JSP网页完成初始化后,JSP引擎将会调用_jspService()方法。 _jspService()方法需要一个HttpServletRequest对象和一个HttpServletResponse对象作为它的参数
void _jspService(HttpServletRequest request, HttpServletResponse response) { // 服务端处理代码 }_jspService()方法在每个request中被调用一次并且负责产生与之相对应的response,并且它还负责产生所有7个HTTP方法的回应,比如GET、POST、DELETE等等。
jspDestroy()方法在JSP中等价于servlet中的销毁方法。当您需要执行任何清理工作时复写 jspDestroy()方法,比如释放数据库连接或者关闭文件夹等等。
public void jspDestroy() { // 清理代码 }脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。 脚本程序的语法格式
<% 代码片段 %>一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,您必须先声明这些变量和方法然后才能使用它们。 JSP声明的语法格式:
<%! declaration; [ declaration; ]+ ... %>一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。 由于表达式的值会被转化成String,所以您可以在一个文本行中使用表达式而不用去管它是否是HTML标签。 表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。 JSP表达式的语法格式:
<%= 表达式 %>JSP指令用来设置与整个JSP页面相关的属性。 JSP指令语法格式:
<%@ directive attribute="value" %> 指令描述<%@ page … %>定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等<%@ include … %>包含其他文件<%@ taglib … %>引入标签库的定义,可以是自定义标签JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP隐式对象也被称为预定义变量。
对象描述requestHttpServletRequest类的实例responseHttpServletResponse类的实例outPrintWriter类的实例,用于把结果输出至网页上sessionHttpSession类的实例applicationServletContext类的实例,与应用上下文有关configServletConfig类的实例pageContextPageContext类的实例,提供对JSP页面所有对象以及命名空间的访问page类似于Java类中的this关键字ExceptionException类的对象,代表发生错误的JSP页面中对应的异常对象一些敏感信息,如密码等我们可以通过POST方法传递,post提交数据是隐式的。 JSP使用getParameter()来获得传递的参数,getInputStream()方法用来处理客户端的二进制数据流的请求。
过滤器将会被插入进web.xml文件中,然后映射servlet、JSP文件的名字,或URL模式。部署描述文件web.xml可以在 < Tomcat-installation-directory >\conf 目录下找到。 当JSP容器启动网络应用程序时,它会创建每一个过滤器的实例,这些过滤器必须在部署描述文件web.xml中声明,并且按声明的顺序执行。
一个过滤器就是一个Java类,它实现了javax.servlet.Filter 接口。javax.servlet.Filter接口定义了三个方法:
public void doFilter (ServletRequest, ServletResponse, FilterChain) 每当request/response要通过过滤链时容器会调用这个方法,因为客户端请求链尾的资源public void init(FilterConfig filterConfig) 容器调用这个方法来表明一个过滤器被安置在服务中public void destroy() 容器调用这个方法来表明一个过滤器正在从服务中移除过滤器被定义,然后映射成一个URL或JSP文件名,与servlet被定义然后映射的方式差不多。在部署描述文件web.xml中,使用< filter >标签来进行过滤器映射:
<filter> <filter-name>LogFilter</filter-name> <filter-class>LogFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value>Initialization Paramter</param-value> </init-param> </filter> <filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>上述过滤器将会应用在所有servlet和JSP程序中,因为我们在配置中指定了” /*”。您也可以指定一个servlet或JSP路径,如果您只想要将过滤器应用在少数几个servlet或JSP程序中的话。 现在,像平常一样访问servlet或JSP页面,您就会发现服务器日志中产生了关于此次访问的记录。您也可以使用Log4J.xml记录器来把日志记录在其它文件中。
JSP脚本通过request对象中的getCookies()方法来访问这些cookies,这个方法会返回一个Cookie对象的数组。
创建一个Cookie对象: 调用Cookie的构造函数,使用一个cookie名称和值做参数,它们都是字符串。
// 名称和值中不能包含空格以及[ ] ( ) = , " / ? @ : ; Cookie cookie = new Cookie("key","value");设置有效期:调用setMaxAge()函数表明cookie在多长时间(以秒为单位)内有效。下面的操作将有效期设为了24小时。
cookie.setMaxAge(60*60*24);将cookie发送至HTTP响应头中:调用response.addCookie()函数来向HTTP响应头中添加cookies。
response.addCookie(cookie);想要读取cookies,您就需要调用request.getCookies()方法来获得一个javax.servlet.http.Cookie对象的数组,然后遍历这个数组,使用getName()方法和getValue()方法来获取每一个cookie的名称和值。
删除cookies非常简单。如果您想要删除一个cookie,按照下面给的步骤来做就行了:
获取一个已经存在的cookie然后存储在Cookie对象中将cookie的有效期设置为0将这个cookie重新添加进响应头中JSP利用servlet提供的HttpSession接口来识别一个用户,存储这个用户的所有访问信息。 默认情况下,JSP允许会话跟踪,一个新的HttpSession对象将会自动地为新的客户端实例化。禁止会话跟踪需要显式地关掉它,通过将page指令中session属性值设为false来实现,就像下面这样:
<%@ page session="false" %>JSP引擎将隐含的session对象暴露给开发者。由于提供了session对象,开发者就可以方便地存储或检索数据。
移除一个特定的属性: 调用public void removeAttribute(String name) 方法来移除指定的属性。
删除整个会话: 调用public void invalidate() 方法来使整个session无效。
设置会话有效期: 调用 public void setMaxInactiveInterval(int interval) 方法来设置session超时。
登出用户: 支持servlet2.4版本的服务器,可以调用 logout()方法来登出用户,并且使所有相关的session无效。
配置web.xml文件: 如果使用的是Tomcat,可以向下面这样配置web.xml文件:
<session-config> <session-timeout>15</session-timeout> </session-config>超时以分钟为单位,Tomcat中的默认的超时时间是30分钟。 Servlet中的getMaxInactiveInterval( ) 方法以秒为单位返回超时时间。如果在web.xml中配置的是15分钟,则getMaxInactiveInterval( ) 方法将会返回900。