JavaEE 第三周

一 Session篇web

1.  Session是什么?浏览器

    Session 对象存储特定用户会话所需的属性及配置信息;安全

    Session一词与网络协议相关联时,它又每每隐含了“面向链接”和/或“保持状态”这样两个含义,“面向链接”指的是在通讯双方在通讯以前要先创建一个通讯的渠道;服务器

    在web服务器蓬勃发展的时代,session在web开发语境下的语义又有了新的扩展,它的含义是指一类用来在客户端与服务器之间保持状态的解决方案。cookie

2. Session的工做原理网络

    1). 建立Session:当用户访问到一个服务器,若是服务器启用Session,服务器就要为该用户建立一个SESSION,在建立这个SESSION的时候,服务器首先检查这个用户发来的请求里是否包含了一个SESSION ID,这个SESSION ID是惟一的、不重复的、不容易找到规律的字符串,这个SESSION ID将被在本次响应中返回到客户端保存,而保存这个SESSION ID的正是COOKIE,这样在交互过程当中浏览器能够自动的按照规则把这个标识发送给服务器;session

    2). 使用Session:常常被使用的一种技术叫作URL重写,就是把Session id直接附加在URL路径的后面一种是做为URL路径的附加信息;另外一种是做为查询字符串附加在URL后面;还有一种就是表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时可以把Session id传递回服务器;jsp

3. 做用:性能

    Session的根本做用就是在服务端存储用户和服务器会话的一些信息。典型的应用有:this

    1). 判断用户是否登陆。

    2). 购物车功能。

4. 用法:

    能够使用 Session 对象存储特定用户会话所需的信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。 
    当用户请求来自应用程序的 Web 页时,若是该用户尚未会话,则 Web 服务器将自动建立一个 Session 对象。当会话过时或被放弃后,服务器将终止该会话。 
    Session 对象最多见的一个用法就是存储用户的首选项。例如,若是用户指明不喜欢查看图形,就能够将该信息存储在 Session 对象中。 
    注意:会话状态仅在支持 cookie 的浏览器中保留。 

5. Session与cookies的区别:

    1). cookie数据存放在客户的浏览器上,session数据放在服务器上;

    2). cookie不是很安全,别人能够分析存放在本地的COOKIE并进行cookie欺骗考虑到安全应当使用session;

    3). session会在必定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用cookie;

    4). 单个cookie保存的数据不能超过4K,不少浏览器都限制一个站点最多保存20个cookie。

    Session是经过cookie来工做的。

二 代码篇

@WebFilter(filterName="log"
,urlPatterns={"/*"})
//建立一个LOgFilter类
public class LogFilter implements Filter
{
//FilterConfig可用于访问Filter的配置信息
private FilterConfig config;
//实现初始化方法
public void init(FilterConfig config)
{
this.config = config;
}
//实现销毁方法
public void destroy()
{
this.config = null;
}
//执行过滤的核心方法
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain)
throws IOException,ServletException//建立一个doFilter 类,request参数是用于获取客户请求数据,response参数是用于发送响应数据,chain参数是过滤调用链。
{
//---------下面代码用于对用户请求执行预处理---------
//获取ServletContext对象,用于记录日志
ServletContext context = this.config.getServletContext();
long before = System.currentTimeMillis();//是得到当前时间距离1970-1-1 00:00:00通过的毫秒数
System.out.println("开始过滤...");
//将请求转换成HttpServletRequest请求
HttpServletRequest hrequest = (HttpServletRequest)request;//把request强制类型转换为HttpServletRequest对象
//输出提示信息
System.out.println("Filter已经截获到用户的请求的地址: " +
hrequest.getServletPath());//hrequest.getServletPath()是返回的是项目名到当前jsp文件的路径(意思就是在这个项目首页到文件的路径)
//Filter只是链式处理,请求依然放行到目的地址
chain.doFilter(request, response);//调用下一个filter。
//---------下面代码用于对服务器响应执行后处理---------
long after = System.currentTimeMillis();//是得到当前时间距离1970-1-1 00:00:00通过的毫秒数
//输出提示信息
System.out.println("过滤结束");
//输出提示信息
System.out.println("请求被定位到" + hrequest.getRequestURI() +
" 所花的时间为: " + (after - before));//hrequest.getRequestURI()是返回的整个URL的路径请求(意思就是返回的浏览器地址栏的整个地址)
}
}
相关文章
相关标签/搜索