【会话】
··什么是会话?
··会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话
··会话过程中要解决的一些问题
··每个用户与服务器进行交互的过程中,各自会有一些数据,程序要想办法保存每个用户的数据
··例如:用户点击超链接通过一个servlet购买了一个商品,程序应该保存用户购买的商品,以便于用户结账servlet时,结账servlet可以得到用户商品为用户结账
··思考:用户购买的商品保存在request或servletContext中行不行?
【保存会话数据的两种技术】
··Cookie
··Cookie是客户端技术,程序把每个用户的数据以cookie形式写个用户各自的浏览器,当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了
··Session
··Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务
【Cookie API】
··javax.servlet.http.Cookie类用于创建一个Cookie,response接口也定义了一个addCookie方法,它用于在其响应头中增加一个相应的Set-Cookie头字段。同样,request接口中也定义了一个getCookie方法,它用于获取客户端提交的Cookie。
Cookie类的方法:
+ public Cookie(String name, String value)
+ setValue()与getValue()
+ setMaxAge()与getMaxAge()
+ setPath()与getPath() default:/day06/servlet/
+ setDomain()与getDomain() .sina.com
+ getName()
【Cookie应用】
··显示用户上次访问时间
//用Cookie保存用户上次访问时间
public class CookieDemo1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.print("您上次访问的时间是:");//print较write方法的区别:print会自动换行
//获得用户的时间Cookie
Cookie[] cookies = request.getCookies();
for(int i = 0; cookies != null && i < cookies.length; i++) {
if(cookies.getName().equals("lastAccessTime")) {
long cookieValue = Long.parseLong(cookies.getValue()); //得到了用户的上次访问时间值
Date date = new Date(cookieValue);
out.print(date.toLocalString());
}
}
//给用户回送最新的访问时间
Cookie cookie = new Cookie("lastAccessTime",System.currentTimeMillis()+"");
cookie.setMaxAge(1*30*24*3600);
cookie.setPath("/day07");
response.addCookie(cookie);
}
|
|