JAVAEE HttpSession
2018-03-29 22:08
127 查看
HttpSession
昨天博客已经提到了会话有两个技术 第一种是已经解释的cookie 第二种就是今天要谈论的sessionsession是一个服务端技术
服务器会为每一个用户创建一个独立的
HttpSession
HttpSession 原理:
1. 当用户第一次访问servlet 服务器端会给该用户创建一个独立的session
2. 并且生成一个sessionID
3. 这个SessID 在响应浏览器的时候 会被装进cookie中 从而被保存到浏览器中
4. 当用户再一次访问servlet的时候 请求中会携带着 cookie中的sessionID 来访问
5. 服务器会根据这个sessionID 来查看是否有对应的sessionID 对象 有就取出使用 否则就创建新的session(相当于用户第一次访问)
因此session 和 之前的 request 和 context 很像 是一个 域对象 他们的范围大小是 Context 域 > Session 域 > request 域
session域特点是 session域 只要会话不结束 就会存在 但是 Session有默认的存活时间 30分钟
创建第一个session
// Demo01.java public class Demo01 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); request.setCharacterEncoding("UTF-8"); // 获取参数 String username = request.getParameter("username"); // 获取session对象 HttpSession session = request.getSession(); // 保存数据 session.setAttribute("username", username); System.out.println(session.getId()); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } // Demo02.java public class Demo02 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); request.setCharacterEncoding("UTF-8"); // 获取session中的数据 HttpSession session = request.getSession(); String username = (String) session.getAttribute("username"); // 响应到网页 response.getWriter().write(username +" "+ session.getId()); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
简单购物车问题
ShowAllBooks.java 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<String,Book> books = Bookutil.getBooks(); Set<String> keySet = books.keySet(); for (String string : keySet) { Book book = books.get(string); out.write("<div><a href='"+request.getContextPath()+"/addbook?id="+book.getId()+"'>"+book.getName()+"</a></div>"); } // 添加查看购物车连接 out.write("<div><a href='" + request.getContextPath() + "/showbook'>查看购物车</a></div>"); // 设置session的有效时间 HttpSession session = request.getSession(); session.setMaxInactiveInterval(10); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } Book.java public class Book implements Serializable{ /** * Session * 钝化 服务器停止 如果你在session中保存了对象 并且该对象实现了序列化接口Serializable * 系统会把你保存的session 序列化到 服务器的work文件夹 work文件夹下 * * 活化 * 当你重新启动服务器 系统会重新把钝化下的文件加载回session中 */ private static final long serialVersionUID = 1L; private String id; private String name; public Book() { // 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 + "]"; } } Bookutil.java 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", "JAVA编程思想")); } // 获取集合的方法 public static HashMap<String, Book> getBooks() { return books; } // 按id 查找对应书的方法 public static Book findBookById(String id) { return books.get(id); } } AddBook.java 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"); HttpSession session = request.getSession(); // 获取点击的是哪本书 Book books = Bookutil.findBookById(id); // 创建一个容器 // 把这个容器添加到session中 // 两种情况 1. 书已经添加 2. 书没有添加 ArrayList<Book> book = (ArrayList<Book>) session.getAttribute("id"); if (book == null) { // 相当于 第一次访问 创建容器 book = new ArrayList<>(); } // 把书添加到容器中 book.add(books); // 把容器添加到session中 session.setAttribute("id", book); // 显示添加成功 1秒后返回商品列表 response.getWriter().write("添加成功 1秒钟后跳转"); response.setHeader("refresh", "1;url=/sh-web-servlet04/showallbooks"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } ShowBook.java public class ShowBook extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); request.setCharacterEncoding("UTF-8"); HttpSession session = request.getSession(); ArrayList<Book> list = (ArrayList<Book>) session.getAttribute("id"); if (list != null) { for (Book book : list) { response.getWriter().write(book.getName() + "<br/>"); } } else { response.getWriter().write("暂无商品" + "<br/>"); response.setHeader("refresh", "1;url=/sh-web-servlet04/showallbooks"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
相关文章推荐
- Java:HttpClient篇,HttpClient4.2在Java中的几则应用:Get、Post参数、Session(会话)保持、Proxy(代理服务器)设置,多线程设置...
- java EE session对象
- Java:HttpClient篇,HttpClient4.2在Java中的几则应用:Get、Post参数、Session(会话)保持、Proxy(代理服务器)设置,多线程设置...
- JavaEE Servlet Session详解
- Java HttpSession
- java中servletContextListener、httpSessionListener和servletRequestListener使用整理
- javaEE+tomcat+mySql实现服务端http接口
- java2: HttpClient,实现登录,请求等操作,session保持
- Tomcat与JavaWeb 5.3 HTTP会话的监听-HttpSessionListener等
- java中servletContextListener、httpSessionListener和servletRequestListener使用整理
- java.lang.IllegalArgumentException: SessionContext must be an HTTP compatible implementation.:模块化本地测试shiro的一些总结
- java HttpServletRequest 获取和设置session
- Java客户端通过HttpURLConnection连接Web服务器的Session保存问题
- failed to load java type corresponding to e=web-app@http://java.sun.com/xml/ns/javaee
- failed to load java type corresponding to e=web-app@http://java.sun.com/xml/ns/javaee
- Java乔晓松-Struts2中文件上传和多文件上传以及获取HttpServletRequest / HttpSession / ServletContext / HttpServletRespons
- java中servletContextListener、httpSessionListener和servletRequestListener使用整理
- JavaWeb-会话的持久化:HttpSessionActivationListener
- Caused by: java.lang.NoClassDefFoundError: HttpSessionBindingEvent
- 【解决方案】cvc-complex-type.2.4.a: Invalid content was found starting with element 'init-param'. One of '{"http://java.sun.com/xml/ns/javaee":run-as, "http://java.sun.com/xml/ns/javaee":security-role-r