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的创业面,页面包含表单信息: