J2EE (二) Servlet设置Session Cookies

  1. 背景
    1. 任何一个解决方案的提出都不是突然出现,都是为了解决某一个产生的问题而出现的解决方案,Session也可以理解为一种解决方案,它是由于Http协议本身缺陷才创建了Session Http协议是没有状态的协议即一个通信完成之后连接会断开,那么怎么才能找到我刚刚浏览过的网页或者资源呢?例如你昨天看了一个电影看到一半时停电了,如果你想在找到是否还可以找到。
    2. 如果有很多很多的客户都浏览我们的网站服务器时,那么我们岂不是需要保存很多的Session ,很多的数据呢,为了解决数据太多的问题减少服务器管理压力,又提出了Cookie方案,将很多连接数据以文本形式保存在用户端。
    3. 假如有个用户水平稍微高一些,想让自己电脑更安全一点,把浏览器里面的Cookies禁用了,又怎么办呢?把Session 写入客户端,我们利用URL重写来解决,这是一种通用的方式。
  1. 简介
    1. Servlet本质上是一个java类但又有所区别,本同末异。
      1. 它没有main()函数,可以被编译却 不可以被执行
      2. 一个单例多线程类,即只可以被实例化一次,而可以被多个线程同时访问,这样就会涉及到线程安全,一般不用声明成员变量
      3. 生命周期,Servlet由容器管理,对于容器的概念我还不太理解,可能就是一个服务器吧,先理解为TomCat,在一个Servlet从产生到生命结束的过程都是由容器进行管理的不需要我们插手,我们只管往容器里面放东西(我们编译好的Servlet.class文件)
  1. 实现原理
    1. Session用在服务器端保存数据,Internet中用户通过HTTP协议与服务器进行数据传输,HTTP连接后就会中断,每当有一个用户连接服务器时就会自动创建一个Session ID用来识别该用户所做的操作,保存其历史数据比例访问了哪些页面等等,以方便下次访问时提取出来。
    2. 有些网站为了不将很多的历史记录会话状态都保存在服务器端,当用户访问服务器时会将建立好的Session ID等信息,返回到客户端写入Cookies中,用户下如果还想访问某个服务器先从Cookies中查询记录信息,然后再访问服务器。
    3. URL 重写实际上是将Session信息附加到URL上了,没有写入Cookies中
  1. Servlet实现服务器端创建Session,然后,写入客户端Cookies
    1. 创建Session
      1. import java.io.*;
        import javax.servlet.*;
        import javax.servlet.http.*;
        
        public class SetSessionServlet extends HttpServlet{
        	
        		public void doGet(HttpServletRequest request,
        											HttpServletResponse response)
        								throws ServletException,IOException{
        					//从已经建好的Session中取数据,如果没有Session则自动创建
        					HttpSession session=request.getSession(true);
        					//设置Session值
        					session.setAttribute("ip",request.getRemoteAddr());
        				
        					response.getWriter().println("SetSession success!");
        		}
        		
        			
        }


    1. 写入Cookie
      1. import java.io.*;
        import javax.servlet.*;
        import javax.servlet.http.*;
        
        public class ShowSessionServlet extends HttpServlet{
        	
        		public void doGet(HttpServletRequest request,
        											HttpServletResponse response)
        								throws ServletException,IOException{
        					//从已经建好的Session中取数据,如果没有Session则自动创建
        					HttpSession session=request.getSession(true);
        					//从Session中取值
        					String ip=	(String)session.getAttribute("ip");
        					
        					response.getWriter().println("ip="+ip);
        		}
        		
        			
        }


    1. URL重写
      1. import java.io.*;
        import javax.servlet.*;
        import javax.servlet.http.*;
        
        public class ShowSessionServlet extends HttpServlet{
        	
        		public void doGet(HttpServletRequest request,
        											HttpServletResponse response)
        								throws ServletException,IOException{
        					//从已经建好的Session中取数据,如果没有Session则自动创建
        					HttpSession session=request.getSession(true);
        					
        					response.getWriter().println("<a href='" + response.encodeURL(request.getRequestURL().toString()) + "'>UrlRewrite</a>");
        
        					response.getWriter().println("ip="+ip);
        		}
        		
        			
        }


  1. 了解一个技术需要了解它解决了什么问题,从产生到发展的过程。
原文地址:https://www.cnblogs.com/lilongsheng1125/p/4978592.html