Java会话技术
一,Cookie对象:
cookie是一种会话技术,它用于将会话过程中的数据保存到用户的浏览器中,从而使浏览器和服务器可以更好的地进行数据交互;
创建Serlet:
创建一个chapter05项目,创建一个自己喜欢的包,在该包中编写一个为LastAccessSerclet的Servlet类,实现获取Cookiie信息并将当前时间Cookie值发送给客户端;
代码如下:
package chapter05.access; import java.io.IOException; import java.util.Date; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import jdk.javadoc.doclet.Reporter; /** * Servlet implementation class LastAccessServlet */ @WebServlet("/LastAccessServlet") public class LastAccessServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public LastAccessServlet() { // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType("text/html;charset=utf-8"); Cookie[ ] cookies=request.getCookies(); String lastTime=null; for (int i = 0; cookies != null&&i<cookies.length; i++) { String name = cookies[i].getName(); if ("lastaccess".equals(name)) { lastTime=cookies[i].getValue(); } } if (lastTime==null) { response.getWriter().print("您是第一次访问本网站!"); }else { response.getWriter().print("您上次访问的时间是:"+lastTime); } String time = String.format("%tF%<tT", new Date()); Cookie cookie=new Cookie("lastaccess", time); Cookie cookie1 =new Cookie("dashuju","2004"); response.addCookie(cookie); response.addCookie(cookie1); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
运行结果:
第二次访问会看到第一次访问时间。
二,Session对象:
Cookie技术可以将用户的信息保存在各自的浏览器中,并且可以在多次请求下实现数据的共享,但是,如果传递的信息比较多,使用Cookie技术显然会增大服务器程序处理的难度,这时,可以使用Session技术;
实现购物车:
创建book类:
package chpter05.session; import java.io.Serializable; public class Book implements Serializable{ private static final long serialVersionUID = 1L; private String id; private String name; public Book() { } public Book(String id,String name) { this.id=id; this.name=name; } public String getId() { return id; } public void setId(String id) { this.id=id; } public String getName() { return name; } public void setName(String name) { this.name= name; } }
创建数据库模拟类;
package chpter05.session; import java.util.Collection; import java.util.LinkedHashMap; import java.util.Map; public class BookBD { private static Map<String,Book> map = new LinkedHashMap<String,Book>(); static { map.put("1", new Book("1","javaweb开发")); map.put("2", new Book("2","jdbc开发")); map.put("3", new Book("3","java基础")); map.put("4", new Book("4","struts框架")); map.put("5", new Book("5","hibernate开发")); } public static Collection<Book> getAll() { return map.values(); } public static Book getBook(String id) { return map.get(id); } }
创建Servlet:
1.创建一个名为ListBookServlet的类,用于操作单击 “购买” 链接,就可以把书加进购物车;
实现效果:
创建一个名为PurchaseServlet的servlet类:
此代码的作用是用来保存到Session对象中;
创建一个名称为CartServlet的Servlet类,显示用户义卖图书列表:
代码实现效果:
三,实现用户登录:
1.创建封装用户信息类:
2.创建indexServlet类显示网站首页,如果用户没有登陆,那么首页界面提示用户登录,否则,显示用户已经登录信息,判断用户是否真的登录:
3.LoginServlet,用于显示用户登录后的界面:
4.创建LogouServlet类会将用户信息移除,并转跳到首页:
5.创建名称login.html的创业面,页面包含表单信息: