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. 了解一个技术需要了解它解决了什么问题,从产生到发展的过程。
  • 相关阅读:
    python Database Poll for SQL SERVER
    SQLAlchemy表操作和增删改查
    flask动态url规则
    flask配置管理
    一个Flask运行分析
    Function Set in OPEN CASCADE
    Happy New Year 2016
    Apply Newton Method to Find Extrema in OPEN CASCADE
    OPEN CASCADE Multiple Variable Function
    OPEN CASCADE Gauss Least Square
  • 原文地址:https://www.cnblogs.com/lilongsheng/p/3226048.html
Copyright © 2011-2022 走看看