JSP脚本中包含9个内置对象,这9个内置对象是Servlet API接口的实例,JSP规范已经对它们进行了初始化(已经是对象),可以直接使用。着重讲最重要的5个
内置对象:
1、application:javax.servlet.ServletContext的实例。该实例代表JSP所属的Web应用本身。可用于JSP页面、Servlet之间交换信息。
常用的方法有getAttribute(String attName)、setAttribute(String attNamel,String attValue)、getInitParameter(String paramName)。
2、page:代表该页面本身,其类型就是生成的servlet类。也就是Servlet中的this。能用page的地方就可以用this。
3、request:javax.servlet.http.HttpServletRequest的实例,该对象封装了一次请求,客户端的请求参数都被封装到该对象里。这是一个常用的对象,获取客户端请求参数必须使用
该对象。常用的方法有getParameter(String paramName)、getParameterValues(String paramName)、setAttribute(String attrName,Object attrValue)、getAttribute(String attrName)
和setCharacterEncoding(String env)等。
4、response:javax.servlet.http.HttpServletResponse的实例,代表服务器端对客户端的响应。而response对象常用于重定向,常用的方法有:getOutputStream()、sendRedirect(java.lang.String location)等。
5、session:javax.servlet.http:HttpSession的实例,该对象代表一次回话。当客户端与站点建立连接时,回话开始;当客户端关闭浏览器时,回话结束。常用的方法有:getAttribute(String attrName)、
setAttribute(String attrName,Object attrValue)。
由于JSP内置对象都是在_jspService()方法中完成初始化的,因此只能在JSP脚本(<%......%>)、JSP输出表达式(<%=....%>)中使用这些内置对象。
JSP中的application,session,request和pageContext4个内置对象分别用于操作application、session、request和page范围中的数据。
4个Map结构的范围不同:
application:对于整个Web应用有效,一旦JSP、Servlet将数据放入application中,该数据将可以被该应用下的其他所有的JSP、Servlet使用。
session:仅对一次回话有效,一旦JSP、Servlet将数据放入application中,该数据将可以被该应用下的其他所有的JSP、Servlet使用。
request:仅对本次请求有效,一旦JSP、Servlet将数据放入application中,该数据将可以被该应用下的其他所有的JSP、Servlet使用。
page:仅对当前页面有效,一旦JSP、Servlet将数据放入application中,该数据将可以被该应用下的其他所有的JSP、Servlet使用。
几乎所有的Web开发语言都支持Session功能,Servlet也不例外。 Servlet/JSP中的Session功能是通过作用域(scope)这个概念来实现的。
作用域分为四种,分别为:
page | 在当前页面有效(仅用于JSP中) |
request | 在当前请求中有效 |
session | 在当前会话中有效 |
application | 在所有应用程序中有效 |
每个作用域除了实现接口不同、意义不同之外,它们的使用方法和作用都是相同的, 都是通过 getAttribute 和 setAttribute 方法进行信息传递。
作用域 | 意义 | 实现接口 |
request | HTTP请求内 | HttpServletRequest |
session | HTTP会话内 | HttpSession |
application | 服务器生命周期内 | ServletContext |
equest的生命周期是request请求域,一个请求结束,则request结束 session的生命周期是session会话域,打开一个浏览器请求一个网站的页面后,Session开始,当session超过时间限制(一般是20分种)后,session注销而失效 或是人为使用session.invalidate();使用session失效; 或是关闭浏览器后,session还存在,但是这里已经无法获取session了,过一会它还是失效。
Session的生命周期
1.1 session什么时候创建:
Session一般存储在服务器的内存中,Sessinon在用户访问第一次访问服务器时创建(注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session)。当然,强制生成Session可使用request.getSession(true)方法。
1.2 session什么时候销毁:
1.session的持有者(即客户端浏览器)在最大无活动等待时间(MaxInactiveInterval)内无任何响应或请求 ;
设置方法有许多(这里随便写两种):
1.session.setMaxInactiveInterval(2 * 3600); // Session保存两小时
2.web.xml里有:
<session-config>
<session-timeout>10</session-timeout>
</session-config>
2.调用Session的invalidate方法强制销毁。
3.jsp服务器重起或发生中断(这个和tomcat服务器的配置有关(默认不销毁,可以设置全部销毁),重启默认前会把session写入文件里保存,重启后会读取session文件,所以session默认时间没过还是存在的)
注意:关闭浏览器并不会销毁session,默认下次开启浏览器会新建session,但是旧的session会在最大无活动等待时间后自动执行销毁。