JSP中有如下form登陆表单,其中应该采用何种方式进行提交? Get Post Put
时间: 2024-01-19 20:03:43 浏览: 28
在这种情况下,应该采用POST方式提交表单数据。
因为表单中有用户名和密码等敏感信息,使用GET方式提交会将这些信息明文显示在URL中,存在安全风险。而使用PUT方式提交需要指定资源的URI,这通常用于更新或创建资源,不适合用于表单提交。
相比之下,POST方式提交表单数据更加安全,因为它将表单数据放在HTTP请求的正文中,不会在URL中暴露敏感信息。同时,POST方式也更加灵活,可以提交大量数据,支持文件上传等功能。
因此,建议采用POST方式提交表单数据,如下所示:
```html
<form method="post" action="login.jsp">
<label>Username:</label>
<input type="text" name="username" />
<br />
<label>Password:</label>
<input type="password" name="password" />
<br />
<input type="submit" value="Login" />
</form>
```
相关问题
在Servlet中完成Web登录验证程序的编写: 在前端login.jsp页面完成用户名和密码的输入,将表单提交到LoginServlet.java中进行验证。调用UserManager提供的方法,用于验证用户名和密码是否正确,如正确,则将用户名保存在session中,并跳转到欢迎页面,该页面应能从session中得到用户名;如不正确,则跳转到登录页面。
好的,下面是代码实现:
1. 在login.jsp页面中,添加表单并设置action为LoginServlet的url:
```html
<form method="post" action="LoginServlet">
<label>用户名:</label>
<input type="text" name="username"><br>
<label>密码:</label>
<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
```
2. 创建LoginServlet.java,并在doPost方法中获取登录用户名和密码,调用UserManager提供的方法进行验证:
```java
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 java.io.IOException;
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
UserManager userManager = new UserManager();
boolean isValidUser = userManager.isValidUser(username, password);
if (isValidUser) {
request.getSession().setAttribute("username", username);
response.sendRedirect("welcome.jsp");
} else {
response.sendRedirect("login.jsp");
}
}
}
```
3. 在UserManager类中提供isValidUser方法,用于验证用户名和密码是否正确:
```java
public class UserManager {
private Map<String, String> users = new HashMap<>();
public UserManager() {
users.put("admin", "123456");
users.put("user", "password");
}
public boolean isValidUser(String username, String password) {
String savedPassword = users.get(username);
return savedPassword != null && savedPassword.equals(password);
}
}
```
4. 在welcome.jsp页面中,获取保存在session中的用户名并显示欢迎信息:
```html
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h1>欢迎 <%= session.getAttribute("username") %>!</h1>
</body>
</html>
```
这样就完成了一个基本的Web登录验证程序。
设计一个jsp文件,实现留言板功能
好的,留言板功能一般需要数据库的支持,我们先来设计一下数据库表。
假设我们需要存储留言的用户名、留言内容和留言时间,我们可以创建一个名为 message 的表,表结构如下:
```
CREATE TABLE message (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50),
content TEXT,
create_time DATETIME
);
```
接下来,我们可以创建一个 JSP 页面,实现留言板的功能。下面是一个简单的实现,代码中使用了 JSTL 和 EL 表达式。
```jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>留言板</title>
</head>
<body>
<h1>留言板</h1>
<h2>发表留言</h2>
<<form action="message.jsp" method="post">
<label for="username">用户名:</label>
<input type="text" name="username" id="username"><br>
<label for="content">留言内容:</label>
<textarea name="content" id="content" rows="5"></textarea><br>
<button type="submit">发表留言</button>
</form>
<hr>
<h2>留言列表</h2>
<c:forEach items="${messages}" var="message">
<p>${message.username} 于 ${message.create_time} 留言:</p>
<p>${message.content}</p>
<hr>
</c:forEach>
</body>
</html>
```
在 JSP 页面中,我们使用了一个表单来提交留言。表单中包含了用户名和留言内容两个字段,并且使用了 POST 方法提交表单。
在页面的下半部分,我们使用了 JSTL 的 forEach 标签来循环遍历留言列表,使用 EL 表达式来显示留言的用户名、留言时间和留言内容。
接下来,我们需要编写 message.jsp 文件来处理表单提交和查询留言的逻辑。下面是一个简单的实现。
```jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page import="java.sql.*,java.util.*" %>
<%
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "123456";
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
if (request.getMethod().equals("POST")) {
String username = request.getParameter("username");
String content = request.getParameter("content");
Date create_time = new Date();
stmt = conn.prepareStatement("INSERT INTO message(username, content, create_time) VALUES (?, ?, ?)");
stmt.setString(1, username);
stmt.setString(2, content);
stmt.setTimestamp(3, new Timestamp(create_time.getTime()));
stmt.executeUpdate();
}
stmt = conn.prepareStatement("SELECT * FROM message ORDER BY create_time DESC");
rs = stmt.executeQuery();
List<Map<String, Object>> messages = new ArrayList<>();
while (rs.next()) {
Map<String, Object> message = new HashMap<>();
message.put("username", rs.getString("username"));
message.put("content", rs.getString("content"));
message.put("create_time", rs.getTimestamp("create_time"));
messages.add(message);
}
request.setAttribute("messages", messages);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
}
%>
<jsp:forward page="message_board.jsp"></jsp:forward>
```
在 message.jsp 文件中,我们首先定义了数据库的连接参数,并且使用 JDBC 连接到数据库。然后,我们通过 request.getMethod() 方法判断当前请求的方法是否为 POST,如果是 POST 方法,就获取表单提交的用户名、留言内容和留言时间,并且插入到数据库的 message 表中。
接下来,我们通过执行 SQL 查询语句,获取留言列表,并且将留言列表保存到一个 List<Map<String, Object>> 对象中。最后,我们使用 request.setAttribute() 方法将留言列表保存到 request 对象中,并且通过 jsp:forward 标签跳转回到 message_board.jsp 页面。在 message_board.jsp 页面中,我们就可以使用 JSTL 和 EL 表达式来显示留言列表了。