Session(重点)
Session和cookie的区别:
1.Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
2.Session把用户代的数据写到用户独占的session中,服务端保存(保存重要信息,减少服务资源浪费)
3.Session对象由服务器创建
获取sessionId(sessionid是以cookie形式传递)
package com.king.servlet; import com.king.pojo.Person; import javax.servlet.ServletException; import javax.servlet.http.*; import java.io.IOException; public class SessionDemo01 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //解决乱码问题 resp.setCharacterEncoding("utf-8"); req.setCharacterEncoding("utf-8"); resp.setContentType("text/html;charset=utf-8"); //得到Session HttpSession session = req.getSession(); //给Session中存东西 session.setAttribute("name",new Person("king",18)); //获取session的ID String sessionId = session.getId(); //判断session是不是新创建的 if (session.isNew()){ resp.getWriter().write("session创建成功,ID:D:"+sessionId); }else{resp.getWriter().write("session已经存在,ID:D:"+sessionId);} //Session创建的时候做了什么事情 //Cookie cookie = new Cookie("JSESSIONID", sessionId); //resp.addCookie(cookie); //总结:session的id是以cookie形式传递的 } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
获得session存的数据
package com.king.servlet; import com.king.pojo.Person; import javax.servlet.ServletException; import javax.servlet.http.*; import java.io.IOException; public class SessionDemo02 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //解决乱码问题 resp.setCharacterEncoding("utf-8"); req.setCharacterEncoding("utf-8"); resp.setContentType("text/html;charset=utf-8"); //得到Session HttpSession session = req.getSession(); Person person = (Person) session.getAttribute("name"); System.out.println(person.toString()); System.out.println(person); resp.getWriter().write(person.toString()); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
实体类(Person)
package com.king.pojo; public class Person { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
手动注销session
package com.king.servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; public class SessionDemo03 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { HttpSession session = req.getSession(); session.removeAttribute("name"); //手动注销session session.invalidate(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
web.xml
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0" metadata-complete="true"> <servlet> <servlet-name>CookieDemo01</servlet-name> <servlet-class>com.king.servlet.CookieDemo01</servlet-class> </servlet> <servlet-mapping> <servlet-name>CookieDemo01</servlet-name> <url-pattern>/c1</url-pattern> </servlet-mapping> <servlet> <servlet-name>CookieDemo02</servlet-name> <servlet-class>com.king.servlet.CookieDemo02</servlet-class> </servlet> <servlet-mapping> <servlet-name>CookieDemo02</servlet-name> <url-pattern>/c2</url-pattern> </servlet-mapping> <servlet> <servlet-name>SessionDemo01</servlet-name> <servlet-class>com.king.servlet.SessionDemo01</servlet-class> </servlet> <servlet-mapping> <servlet-name>SessionDemo01</servlet-name> <url-pattern>/s1</url-pattern> </servlet-mapping> <servlet> <servlet-name>SessionDemo02</servlet-name> <servlet-class>com.king.servlet.SessionDemo02</servlet-class> </servlet> <servlet-mapping> <servlet-name>SessionDemo02</servlet-name> <url-pattern>/s2</url-pattern> </servlet-mapping> <servlet> <servlet-name>SessionDemo03</servlet-name> <servlet-class>com.king.servlet.SessionDemo03</servlet-class> </servlet> <servlet-mapping> <servlet-name>SessionDemo03</servlet-name> <url-pattern>/s3</url-pattern> </servlet-mapping> <!--设置session默认失效时间--> <session-config> <!--设置1分钟后session自动失效--> <session-timeout>1</session-timeout> </session-config> </web-app>