Detailed Explanation of Session in Java

  • 2021-11-24 01:24:04
  • OfStack

Directory 1. What is session: 2. Classic application scenarios for session: 3. Methods commonly used in session 4. Examples 5. Differences between session and cookie

1. What is session:

The server creates one session object for every user (browser)

One session has one browser exclusively. As long as the browser is not closed, this session will exist directly

The session is called session control and stores the attributes and configuration information required by the user's session so that the user information stored in the session object is not thrown when the user jumps to the web page of the application, but is persisted throughout the user session

2. Classic application scenarios of 2. session:

After 1 user logs in, when visiting other pages of the website, 1 is directly logged in

Save shopping cart information and so on

3. Methods commonly used in 3. session

getId (): Gets the only identity of session

getServletContext (): Represents the entire web service

getAttribute (String): Get the node of session. For example, if you configure the relevant session information through setAttribute (String, Object) in one Servlet, and then get the session information in this Servlet through another Servlet, you need to use the method of getAttribute (String)

setAttribute (String, Object): Set the session node

removeAttribute (String): 1 out of 1 session node

isNew (): Determines whether an session is a new session

invalidate (): Log off session's

4. Examples

Example 1: Create an session and get the ID of session, and judge whether this session is a new session

Step 1: Create a new maven project using the webapp template

Step 2: Create a class of com. xiaoma. servlet. SessionDemo01 in the Java folder and write the servlet class file


package com.xiaoma.servlet;
import com.xiaoma.pojo.Person;
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 SessionDemo01 extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         // Solve Chinese garbled codes 
         resp.setHeader("content-type","text/html;charset=UTF-8");
         // Get session
         HttpSession session = req.getSession();
         // Pass setAttribute Method direction Session Store information in 
         session.setAttribute("name"," Pony ");
         // Get session Related information, including id Is it new or not session Etc 
         String sessionId = session.getId();
         if(session.isNew()) {
             resp.getWriter().write(" Create Session Success, ID Is: " + sessionId);
         }else{
             resp.getWriter().write("Session It already exists, ID Is: " + sessionId);
         }
     }
     @Override
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         doGet(req, resp);
     }
 }

Step 3: Configure the XML file


<servlet>
         <servlet-name>SessionDemo01</servlet-name>
         <servlet-class>com.xiaoma.servlet.SessionDemo01</servlet-class>
     </servlet>
     <servlet-mapping>
         <servlet-name>SessionDemo01</servlet-name>
         <url-pattern>/s1</url-pattern>
     </servlet-mapping>

Example 2: Reading session information from one servlet to another servlet

Step 1: Create a class of com. xiaoma. servlet. SessionDemo01 under the Java folder and write the servlet class file


  package com.xiaoma.servlet;
  import com.xiaoma.pojo.Person;
  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 SessionDemo01 extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         // Solve Chinese garbled codes 
         resp.setHeader("content-type","text/html;charset=UTF-8");
         // Get session
         HttpSession session = req.getSession();
         // Pass setAttribute Method direction Session Store information in 
         session.setAttribute("name"," Pony ");
         // Get session Related information, including id Is it new or not session Etc 
         String sessionId = session.getId();
         if(session.isNew()) {
             resp.getWriter().write(" Create Session Success, ID Is: " + sessionId);
         }else{
             resp.getWriter().write("Session It already exists, ID Is: " + sessionId);
        }
     }
     @Override
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         doGet(req, resp);
     }
 }

Step 2: Create a class of com. xiaoma. servlet. SessionDemo02 in the Java folder, write another servlet class for reading, and read session information in SessionDemo01 through SessionDemo02


 package com.xiaoma.servlet;
  import com.xiaoma.pojo.Person;
  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 SessionDemo02 extends HttpServlet {
    @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         // Solve Chinese garbled codes 
        resp.setHeader("content-type","text/html;charset=UTF-8");
         // Get session
         HttpSession session = req.getSession();
         String name=(String) session.getAttribute("name");
         resp.getWriter().write(name);
     }
     @Override
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         super.doPost(req, resp);
     }
 }

Step 3: Configure the xml file


     <servlet>
         <servlet-name>SessionDemo02</servlet-name>
        <servlet-class>com.xiaoma.servlet.SessionDemo02</servlet-class>
     </servlet>
     <servlet-mapping>
         <servlet-name>SessionDemo02</servlet-name>
         <url-pattern>/s2</url-pattern>
     </servlet-mapping>

Example 3: Object information can also be stored in session

Step 1: Create a class of com. xiaoma. pojo. Person under the Java folder and write our entity class


 package com.xiaoma.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 void setName(String name) {
         this.name = name;
     }
      public int getAge() {
         return age;
     }
     public void setAge(int age) {
         this.age = age;
     }
     @Override
     public String toString() {
         return "Person{" +
                "name='" + name + '\'' +
                 ", age=" + age +
                 '}';
     }
 }

Step 2: Create a class of com. xiaoma. servlet. SessionDemo01 in the Java folder and write the servlet class file


  package com.xiaoma.servlet;
  import com.xiaoma.pojo.Person;
  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 SessionDemo01 extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // Solve Chinese garbled codes 
         resp.setHeader("content-type","text/html;charset=UTF-8");
        // Get session
         HttpSession session = req.getSession();
         // Pass setAttribute Method direction Session Store information in 
         session.setAttribute("name",new Person(" Pony ",18));
         // Get session Related information, including id Is it new or not session Etc 
         String sessionId = session.getId();
         if(session.isNew()) {
             resp.getWriter().write(" Create Session Success, ID Is: " + sessionId);
         }else{
             resp.getWriter().write("Session It already exists, ID Is: " + sessionId);
         }
     }
     @Override
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         doGet(req, resp);
     }
 }

Step 3: Create a class of com. xiaoma. servlet. SessionDemo02 in the Java folder, and write another servlet class file to read Session object information in SessionDemo01


 package com.xiaoma.servlet;
  import com.xiaoma.pojo.Person;
  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 SessionDemo02 extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         // Get session In Person Object 
         // Solve Chinese garbled codes 
         resp.setHeader("content-type","text/html;charset=UTF-8");
         // Get session
         HttpSession session = req.getSession();
         Person person=(Person) session.getAttribute("name");
         resp.getWriter().write(person.toString());
     }
     @Override
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         super.doPost(req, resp);
     }
 }

Step 4: Write the xml file in the same way as above

Example 4: Unregister session (There are two ways to unregister session, one through the removeAttribute (String) method, and the other through the xml configuration file)

The first, through the removeAttribute (String) method, is to manually expire session


  package com.xiaoma.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 {
         // Get session
         HttpSession session = req.getSession();
         // Manual logout session
        session.removeAttribute("name");
         session.invalidate();
     }
     @Override
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         super.doPost(req, resp);
     }
}

Second, through the method of xml file, this way is when session automatically expires


     <!-- Settings session The survival time of -->
     <session-config>
         <!-- In minutes -->
         <session-timeout>1</session-timeout>
     </session-config>

5. The difference between session and cookie

(1) cookie is it right? The user's data is written to the browser, and the browser saves it (multiple can be saved)

· (2) session is to write the user's data to the user's exclusive session, which is saved by the server (saving important information to avoid wasting server resources)

· (3) session is created by the server


Related articles: