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