HttpSession:
什么是HttpSession?
HttpSession是由JavaWeb提供的,是用来跟踪会话的类,session是服务器端的对象,保存在服务器上。它是Servlet三大域之一,同样拥有域对象的setAttribute()、getAttribute()、removeAttribute()方法。一般来说,session对象的默认寿命是30分钟。
什么是会话?
一个用户对服务器的多次连贯性的请求,连贯性请求就是用户在多次的请求中没有关闭浏览器。注意的是:一但中途关闭了浏览器,session对象就会立即失效。
如何使用session对象?
在jsp页面中,session对象是内置的,可以直接使用,而在Servlet中,需要获取session对象:
HttpSession session = request.getSession();
HttpSession的原理
每次在创建session的时候,都会有一个sessionID以Cookie的形式在浏览器保存。
1)首先在Cookie中查找有没有sessionID,没有的话,创建Session对象
2)有SessionID的话,在服务器端查找有没有对应的Session对象,有的话不继续创建,没有的话继续创建session对象
3)返回session
HttpSession的其他方法
方法 | 作用 |
String getId() | 获取Session的Id |
int getMaxInactiveInterval() | 返回最大不活动时间,默认30分钟 |
void invalidate() | 立即让Session失效 |
boolean isNew | 判断Session是否是新创建 |
HttpSession的url重写
由于在有的用户当中,浏览器是禁用Cookie的,这时就用到了url重写。若第一次访问该链接,首先给该链接分配一个JSESSIONID,之后访问就不会再次分配。
<a href="jsp或Servlet路径;JSESSIONID=<%=session.getId()%>">链接一</a>
jsp的三大指令:
page:
language:将当前jsp页面编译成何种语言,默认为Java
info:信息,用处不是很大,几乎不用
pageEncoding:指定当前页面的编码格式,在服务器将jsp编译成java文件时需要确认此编码
contentType:表示添加一个响应头,和pageEncoding若只设置一个,另一个与之默认相同,若都没有设置,则默认为ISO编码。
import:进行导包,和java文件中import作用相同
errorPage:若当前页面发生异常,转发至哪个页面(响应码200)
isErrorPage:指定页面是否是处理错误请求的页面(响应码500),设置其值为true时,这个页面可以使用9大内置对象的exception(如同java文件中的异常)
在web.xml中指定错误页面
<error-page>
<exception-type>java.lang.RuntimeException</exception-type>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/error_404.jsp</location>
</error-page>
autoFlush:指定jsp的输出流缓冲区满时,自动刷新,默认为true。
buffer:缓冲区的大小,默认为8kb。
isELIgnored:是否忽略EL表达式,默认为false。
isThreadSafe:是否支持并发访问。
session:当前页面是否支持session这个内置对象。
include:
静态的请求包含,和Servlet中include方法不同的是,它是将两个页面合并最后生成一个java文件,而Servlet中include方法则是生成两个java文件,最后调用而已。
<%@include file="指定包含的文件"%>
taglib:
使用jsp标签库中的函数等
<%@taglib prefix="前缀" uri="标签库的位置"%>
PageContext:
jsp的九大内置对象:
page:当前页面的jsp对象,即this
session:HttpSession的对象
request:HttpServletRequest对象
response:HttpServletResponse对象
out:等同于response.getWriter(),向客户端发送数据
application:ServletContext的对象
config:ServletConfig的对象
pageContext:页面的上下文对象,一顶九
exception:错误页面使用这个对象
常用方法:
方法 | 作用 |
findAttribute() | 全局寻找属性值 |
getAttribute(String name) | 在PageContext上寻找该属性值 |
getAttribute(String name, int scope) | 在指定域对象内寻找该属性值 |
其他方法:
例:getSession();获取Session对象,其它内置对象都可获取。