zoukankan      html  css  js  c++  java
  • 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. 了解一个技术需要了解它解决了什么问题,从产生到发展的过程。
  • 相关阅读:
    IReport问题整理
    超出打开游标的最大数的原因和解决方案【131101】
    【131031】rel 属性 -- link标签中的rel属性,定义了文档与链接的关系
    【131031】html:hidden的使用
    <jsp:include>和<%@include file=""%>区别【131031】
    【131031】<meta http-equiv=...> 的功能
    【131031】asp.net <%%>&<%#%>&<%=%>&<%@%>&<%$%>用法区别
    python面向对象(类的成员及类方法)
    python网络编程知识体系
    python面向对象(类和对象及三大特性)
  • 原文地址:https://www.cnblogs.com/lilongsheng/p/3226048.html
Copyright © 2011-2022 走看看