servlet保存session
时间: 2023-09-19 08:05:47 浏览: 54
在Servlet中,可以通过以下方式保存Session:
1. 获取当前请求的Session对象:`HttpSession session = request.getSession();`
2. 向Session中保存数据:`session.setAttribute("key", value);`
3. 获取Session中保存的数据:`Object value = session.getAttribute("key");`
4. 删除Session中保存的数据:`session.removeAttribute("key");`
5. 设置Session的失效时间(单位为秒):`session.setMaxInactiveInterval(60);`
6. 手动使Session失效:`session.invalidate();`
需要注意的是,Session的数据是保存在服务器端的,因此在使用Session时需要考虑并发访问的问题。此外,Session也会占用服务器的内存资源,因此不应该保存过多的数据。
相关问题
利用servlet修改了用户信息如何将修改后的信息保存到session中
在Servlet中,您可以通过以下步骤将修改后的用户信息保存到会话(session)中:
1. 获取会话对象:在Servlet中,可以通过`HttpServletRequest`对象的`getSession()`方法获取当前请求的会话对象。如果会话对象不存在,则会创建一个新的会话。
```java
HttpSession session = request.getSession();
```
2. 修改用户信息:根据您的需求,从请求参数中获取修改后的用户信息,并进行相应的处理。
```java
String name = request.getParameter("name");
String email = request.getParameter("email");
// 进行用户信息的修改操作
```
3. 将修改后的用户信息存储到会话中:使用会话对象的`setAttribute()`方法将修改后的用户信息存储到会话中。可以使用键值对的形式存储用户信息。
```java
session.setAttribute("name", name);
session.setAttribute("email", email);
```
4. 在需要的时候从会话中提取用户信息:在其他Servlet或JSP页面中,可以通过相同的会话对象获取保存在会话中的用户信息。
```java
String name = (String) session.getAttribute("name");
String email = (String) session.getAttribute("email");
```
这样,您就可以在Servlet中将修改后的用户信息保存到会话中,并在需要的时候提取出来使用了。请注意,会话对象在整个会话期间保持持久状态,可以在多个请求间共享和访问会话数据。
用javaweb 设计一个账户的登录与注册 要求运用servlet JDBC JSTL 实现多个用户轮流注册 登录成功后保存session数据 并把注册信息存入一个表中
好的,下面我会给你提供一个简单的JavaWeb项目,实现账户的登录与注册功能,包含servlet、JDBC、JSTL等技术。
首先,我们需要建立一个JavaWeb项目,并且引入以下依赖:
- mysql-connector-java.jar
- jstl-1.2.jar
接下来,我们需要创建一个MySQL数据库,名为“account”,并创建一个名为“user”的表,表结构如下:
```sql
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
然后我们需要编写注册页面register.jsp,代码如下:
```html
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<h1>注册页面</h1>
<form action="register" method="post">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="注册">
</form>
</body>
</html>
```
这里我们定义了一个表单,用户可以输入用户名和密码进行注册。
接下来我们需要编写RegisterServlet.java,代码如下:
```java
package com.example.servlet;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/register")
public class RegisterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String DB_DRIVER = "com.mysql.jdbc.Driver";
private static final String DB_URL = "jdbc:mysql://localhost:3306/account";
private static final String DB_USER = "root";
private static final String DB_PASSWORD = "123456";
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
Connection conn = null;
PreparedStatement stmt = null;
try {
Class.forName(DB_DRIVER);
conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
stmt = conn.prepareStatement("INSERT INTO user (username, password) VALUES (?, ?)");
stmt.setString(1, username);
stmt.setString(2, password);
stmt.executeUpdate();
response.sendRedirect("login.jsp");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
} finally {
try { if (stmt != null) stmt.close(); } catch (SQLException e) { e.printStackTrace(); }
try { if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); }
}
}
}
```
在这个Servlet中,我们先获取用户输入的用户名和密码,然后通过JDBC连接MySQL数据库,并将用户注册信息保存到“user”表中。最后重定向到登录页面login.jsp。
接下来我们需要编写登录页面login.jsp,代码如下:
```html
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<h1>登录页面</h1>
<form action="login" method="post">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
```
这里同样定义了一个表单,用户可以输入用户名和密码进行登录。
接下来我们需要编写LoginServlet.java,代码如下:
```java
package com.example.servlet;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String DB_DRIVER = "com.mysql.jdbc.Driver";
private static final String DB_URL = "jdbc:mysql://localhost:3306/account";
private static final String DB_USER = "root";
private static final String DB_PASSWORD = "123456";
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
Class.forName(DB_DRIVER);
conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
stmt = conn.prepareStatement("SELECT id FROM user WHERE username=? AND password=?");
stmt.setString(1, username);
stmt.setString(2, password);
rs = stmt.executeQuery();
if (rs.next()) {
HttpSession session = request.getSession();
session.setAttribute("userId", rs.getInt("id"));
response.sendRedirect("index.jsp");
} else {
response.sendRedirect("login.jsp");
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
} finally {
try { if (rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); }
try { if (stmt != null) stmt.close(); } catch (SQLException e) { e.printStackTrace(); }
try { if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); }
}
}
}
```
在这个Servlet中,我们同样先获取用户输入的用户名和密码,然后通过JDBC连接MySQL数据库,查询“user”表中是否存在该用户。如果存在,则保存用户ID到Session中,并重定向到主页index.jsp;否则重定向到登录页面login.jsp。
最后,我们需要在主页index.jsp中展示用户信息,代码如下:
```html
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>主页</title>
</head>
<body>
<h1>欢迎访问主页!</h1>
<c:if test="${not empty sessionScope.userId}">
<p>您的用户ID为:${sessionScope.userId}</p>
</c:if>
</body>
</html>
```
这里我们使用了JSTL标签库,判断Session中是否存在用户ID,如果存在则展示用户ID。
最后,我们需要在web.xml中配置Servlet,代码如下:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<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">
<servlet>
<servlet-name>RegisterServlet</servlet-name>
<servlet-class>com.example.servlet.RegisterServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.example.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegisterServlet</servlet-name>
<url-pattern>/register</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
```
这里我们将RegisterServlet映射到/register,将LoginServlet映射到/login,并设置主页为index.jsp。
好了,现在我们就完成了一个简单的JavaWeb项目,实现了账户的登录与注册功能,包含servlet、JDBC、JSTL等技术。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)