VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Java教程 >
  • Java中Session的详解

1.什么是session:

  ·服务器会给每一个用户(浏览器)创建一个session对象

  ·一个session独占一个浏览器,只要浏览器不关闭,这个session就一直存在

  ·session称为会话控制,存储用户会话所需的属性和配置信息,这样,用户在应用程序的web页面跳转时,存储在session对象中的用户信息不会丢掷,而是在整个用户会话中一直保持下去

2.session的经典应用场景:

  ·一个用户登陆后,访问该网站的其他网页时,一直处于登录状态

  ·保存购物车信息等等

3.session中常用的方法

  ·getId():获取session的唯一标识

  ·getServletContext():代表整个web服务

  ·getAttribute(String):获取session的节点,比如你在其中一个Servlet中通过setAttribute(String,Object)配置了相关的session信息,然后通过另一个Servlet获取这个Servlet中的session信息,就要用到getAttribute(String)这个方法

  ·setAttribute(String,Object):设置session节点

  ·removeAttribute(String):一出一个session节点

  ·isNew():判断一个session是否是一个新的session

  ·invalidate():注销session的

4.例1:创建一个session并获取到session的ID,判断这个session是否是新的session

  ·步骤1:新建一个maven项目,使用webapp模板

  ·步骤2:在Java文件夹下创建一个com.xiaoma.servlet.SessionDemo01的类,编写servlet类文件

复制代码
 1 package com.xiaoma.servlet;
 2 
 3 import com.xiaoma.pojo.Person;
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 import javax.servlet.http.HttpSession;
10 import java.io.IOException;
11 
12 public class SessionDemo01 extends HttpServlet {
13     @Override
14     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
15         //解决中文乱码
16         resp.setHeader("content-type","text/html;charset=UTF-8");
17         //得到session
18         HttpSession session = req.getSession();
19         //通过setAttribute方法向Session中存放信息
20         session.setAttribute("name","小马");
21         //获取session相关信息,包括id,是否是新的session等
22         String sessionId = session.getId();
23         if(session.isNew()) {
24             resp.getWriter().write("创建Session成功,ID为:" + sessionId);
25         }else{
26             resp.getWriter().write("Session已经存在了,ID为:" + sessionId);
27         }
28     }
29 
30     @Override
31     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
32         doGet(req, resp);
33     }
34 }
复制代码

  ·步骤2:配置XML文件

复制代码
1     <servlet>
2         <servlet-name>SessionDemo01</servlet-name>
3         <servlet-class>com.xiaoma.servlet.SessionDemo01</servlet-class>
4     </servlet>
5     <servlet-mapping>
6         <servlet-name>SessionDemo01</servlet-name>
7         <url-pattern>/s1</url-pattern>
8     </servlet-mapping>
复制代码

 例2:从一个servlet中读取另一个servlet中的session信息

  ·步骤1:在Java文件夹下创建一个com.xiaoma.servlet.SessionDemo01的类,编写servlet类文件

复制代码
 1 package com.xiaoma.servlet;
 2 
 3 import com.xiaoma.pojo.Person;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 import javax.servlet.http.HttpSession;
10 import java.io.IOException;
11 
12 public class SessionDemo01 extends HttpServlet {
13     @Override
14     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
15         //解决中文乱码
16         resp.setHeader("content-type","text/html;charset=UTF-8");
17         //得到session
18         HttpSession session = req.getSession();
19         //通过setAttribute方法向Session中存放信息
20         session.setAttribute("name","小马");
21         //获取session相关信息,包括id,是否是新的session等
22         String sessionId = session.getId();
23         if(session.isNew()) {
24             resp.getWriter().write("创建Session成功,ID为:" + sessionId);
25         }else{
26             resp.getWriter().write("Session已经存在了,ID为:" + sessionId);
27         }
28     }
29 
30     @Override
31     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
32         doGet(req, resp);
33     }
34 }
复制代码

  ·步骤2:在Java文件夹下创建一个com.xiaoma.servlet.SessionDemo02的类,编写另一个用来读取的servlet类,通过SessionDemo02来读取SessionDemo01中的session信息

复制代码
 1 package com.xiaoma.servlet;
 2 
 3 import com.xiaoma.pojo.Person;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 import javax.servlet.http.HttpSession;
 9 import java.io.IOException;
10 
11 public class SessionDemo02 extends HttpServlet {
12     @Override
13     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
14         //解决中文乱码
15         resp.setHeader("content-type","text/html;charset=UTF-8");
16         //得到session
17         HttpSession session = req.getSession();
18         String name=(String) session.getAttribute("name");
19         resp.getWriter().write(name);
20     }
21 
22     @Override
23     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
24         super.doPost(req, resp);
25     }
26 }
复制代码

  ·步骤3:配置xml文件

复制代码
1     <servlet>
2         <servlet-name>SessionDemo02</servlet-name>
3         <servlet-class>com.xiaoma.servlet.SessionDemo02</servlet-class>
4     </servlet>
5     <servlet-mapping>
6         <servlet-name>SessionDemo02</servlet-name>
7         <url-pattern>/s2</url-pattern>
8     </servlet-mapping>
复制代码

 例3:session中还可以存放对象信息

  ·步骤1:在Java文件夹下创建一个com.xiaoma.pojo.Person的类,编写我们的实体类

复制代码
 1 package com.xiaoma.pojo;
 2 
 3 public class Person {
 4     private String name;
 5     private int age;
 6 
 7     public Person() {
 8     }
 9 
10     public Person(String name, int age) {
11         this.name = name;
12         this.age = age;
13     }
14 
15     public String getName() {
16         return name;
17     }
18 
19     public void setName(String name) {
20         this.name = name;
21     }
22 
23     public int getAge() {
24         return age;
25     }
26 
27     public void setAge(int age) {
28         this.age = age;
29     }
30 
31     @Override
32     public String toString() {
33         return "Person{" +
34                 "name='" + name + '\'' +
35                 ", age=" + age +
36                 '}';
37     }
38 }
复制代码

  ·步骤2:在Java文件夹下创建一个com.xiaoma.servlet.SessionDemo01的类,编写servlet类文件

复制代码
 1 package com.xiaoma.servlet;
 2 
 3 import com.xiaoma.pojo.Person;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 import javax.servlet.http.HttpSession;
10 import java.io.IOException;
11 
12 public class SessionDemo01 extends HttpServlet {
13     @Override
14     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
15         //解决中文乱码
16         resp.setHeader("content-type","text/html;charset=UTF-8");
17         //得到session
18         HttpSession session = req.getSession();
19         //通过setAttribute方法向Session中存放信息
20         session.setAttribute("name",new Person("小马",18));
21         //获取session相关信息,包括id,是否是新的session等
22         String sessionId = session.getId();
23         if(session.isNew()) {
24             resp.getWriter().write("创建Session成功,ID为:" + sessionId);
25         }else{
26             resp.getWriter().write("Session已经存在了,ID为:" + sessionId);
27         }
28     }
29 
30     @Override
31     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
32         doGet(req, resp);
33     }
34 }
复制代码

  ·步骤3:在Java文件夹下创建一个com.xiaoma.servlet.SessionDemo02的类,编写另一个servlet类文件,用来读取SessionDemo01中的Session对象信息

复制代码
 1 package com.xiaoma.servlet;
 2 
 3 import com.xiaoma.pojo.Person;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 import javax.servlet.http.HttpSession;
10 import java.io.IOException;
11 
12 public class SessionDemo02 extends HttpServlet {
13     @Override
14     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
15         //获取session中的Person对象
16         //解决中文乱码
17         resp.setHeader("content-type","text/html;charset=UTF-8");
18         //得到session
19         HttpSession session = req.getSession();
20         Person person=(Person) session.getAttribute("name");
21         resp.getWriter().write(person.toString());
22     }
23 
24     @Override
25     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
26         super.doPost(req, resp);
27     }
28 }
复制代码

  ·步骤4:编写xml文件,与上同理

 例4:注销session(注销session有两种方式,一种是通过removeAttribute(String)方法,另一种是通过xml配置文件)

  ·第一种,通过removeAttribute(String)方法,这种方式是使session手动过期

复制代码
 1 package com.xiaoma.servlet;
 2 
 3 import javax.servlet.ServletException;
 4 import javax.servlet.http.HttpServlet;
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpServletResponse;
 7 import javax.servlet.http.HttpSession;
 8 import java.io.IOException;
 9 
10 public class SessionDemo03 extends HttpServlet {
11     @Override
12     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
13         //得到session
14         HttpSession session = req.getSession();
15         //手动注销session
16         session.removeAttribute("name");
17         session.invalidate();
18     }
19 
20     @Override
21     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
22         super.doPost(req, resp);
23     }
24 }
复制代码

  ·第二种,通过xml文件的方法,这种方式是时session自动过期

1     <!--设置session的存活时间-->
2     <session-config>
3         <!--以分钟为单位-->
4         <session-timeout>1</session-timeout>
5     </session-config>

5.session与cookie的区别

  ·(1)cookie是吧用户的数据写给浏览器,浏览器保存(可以保存多个)

  ·(2)session是把用户的数据写给用户独占的session中,服务器保存(保存重要信息,避免浪费服务器资源)

  ·(3)session是由服务器创建的

 

出处:https://www.cnblogs.com/XiaoMaGuai/p/15374013.html


相关教程