Detailed Explanation of Session in Java
- 2021-11-24 01:24:04
- OfStack
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