Session
钝化: 服务器停止时 如果你的Session中保存了对象 并且该对象 实现了序列化接口 Serializable
系统会把你保存的Session 序列化到 服务器的work 文件夹 你的工程下.一个文件中
活化:当你重新启动了服务器 系统会重新把钝化下来的那个文件 加载回Session中
创建一个商品 书类
public class Book implements Serializable{
private static final long serialVersionUID = 1L;
private String id;
private String name;
public Book() {
super();
// TODO Auto-generated constructor stub
}
public Book(String id, String name) {
super();
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;
}
@Override
public String toString() {
return "Book [id=" + id + ", name=" + name + "]";
}
}
模拟获取到的数据的信息.获取数据集合的方法.获取到集合中的元素一一对应的ID
public class BookUtil {
//声明一个保存数的容器
private static HashMap<String, Book> books = new HashMap<>();
//添加 数据
static {
books.put("1",new Book("1","葵花宝典"));
books.put("2",new Book("2","葵花"));
books.put("3",new Book("3","宝典"));
books.put("4",new Book("4","花宝典"));
}
//获取集合的方法
public static HashMap<String, Book> getBooks(){
return books;
}
//按id 查找对应的书的方法
public static Book findBookById(String id) {
return books.get(id);
}
}
//做一个商品列表 将 BookUtil 与Book联系起来
public class ShowAllBooks extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置响应编码格式
response.setContentType("text/html;charset=UTF-8");
//告诉服务器 请求的内容是什么编码格式的
request.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
//利用 HashMap 来获取 getbook 这个 类中的内容
HashMap<String, Book> books = BookUtil.getBooks();
//利用 HashMap中的 keySet方法 遍历 getbook这个类中的 内容
for (String key : books.keySet()) {
//获取遍历后 每个key的值
Book book = books.get(key);
//利用resopnse 将响应到网页上
out.write("<a href='"+ request.getContextPath() +"/addBook?id="+book.getId()+"'>"+book.getName()+"</a><br>");
}
//添加查看购物车的链接
out.write("<a href ='"+request.getContextPath()+"/ShowCar'>查看购物车</a>");
//设置 Session 的有效时间
request.getSession().setMaxInactiveInterval(10);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
有了商品列表后要将商品添加到购物车中所以写一个商品的添加方法
public class AddBook extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置响应编码格式
response.setContentType("text/html;charset=UTF-8");
//告诉服务器 请求的内容是什么编码格式的
request.setCharacterEncoding("UTF-8");
//从请求中获取点击的那一本书(获取参数)
String id = request.getParameter("id");
//
Book book = BookUtil.findBookById(id);
//创建一个容器 (相当于购物车 保存买的书) 两种情况: 一 已经存过书了 二 没存过书
HttpSession session = request.getSession();
ArrayList<Book> car = (ArrayList<Book>)session.getAttribute("car");
if (car==null) {
// 相当于第一次访问 创建容器
car = new ArrayList<>();
}
//把书添加到容器中
car.add(book);
//把这个容器添加到session中
session.setAttribute("car", car);
//显示添加成功
//1秒后返回商品列表页
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
有了添加商品的方法,但是目前还没有购物车,所以要写一个购物车.并且要判断这个购物车中是否添加了商品 商品是否添加成功
public class ShowCar extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置响应编码格式
response.setContentType("text/html;charset=UTF-8");
//告诉服务器 请求的内容是什么编码格式的
request.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
//获取Session对象
HttpSession session = request.getSession();
//判断session中的数据是否为空
ArrayList<Book> car = (ArrayList<Book>)session.getAttribute("car");
if (car!=null) {
//遍历输出
for (Book book : car) {
out.write(book.getName()+"<br/>");
}
}else {
out.write("购物车是空的");
//2秒跳回 商品列页面
response.setHeader("reftesh", "3;url = "+request.getContextPath()+"/ShowAllBooks");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
上面写完后还要配置servlet路径 才可以运行
<servlet>
<servlet-name>ShowAllBooks</servlet-name>
<servlet-class>com.lan3g.car.ShowAllBooks</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ShowAllBooks</servlet-name>
<url-pattern>/ShowAllBooks</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>AddBook</servlet-name>
<servlet-class>com.lan3g.car.AddBook</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AddBook</servlet-name>
<url-pattern>/addBook</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ShowCar</servlet-name>
<servlet-class>com.lan3g.car.ShowCar</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ShowCar</servlet-name>
<url-pattern>/ShowCar</url-pattern>
</servlet-mapping>