JSP中有如下form登陆表单,其中应该采用何种方式进行提交? Get Post Put
时间: 2024-01-19 22:03:43 浏览: 175
在这种情况下,应该采用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登录验证程序。
开发登录模块。 1) 创建一个login.jsp文件实现表单功能。 2)再创建一个loginuser.jsp页面完成用户身份验证逻辑,若用户身份合法,则转向一个欢迎页面welcome.jsp,在welcome.jsp中显示登录用户名。所以需要再loginuser.jsp上用请求转发到welcome.jsp上,而不能用重新定向。 3) 创建一个显示登录成功的欢迎页面(welcome.jsp),在欢迎页面显示用户名(必须用请求转发) 4) 在welcome.jsp页面放置一个到a.jsp页面的超链接,试着在a.jsp页面上输出用户名。
### 使用 JSP 开发登录模块
#### 表单创建与提交 (login.jsp)
为了构建一个功能完整的登录模块,首先需要设计 `login.jsp` 文件用于收集用户的凭证信息。此文件应放置于 Web 应用程序的根目录或者特定子目录下[^1]。
```html
<form method="POST" action="loginCL.jsp">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
```
上述代码片段展示了如何定义 HTML `<form>` 元素及其属性以便正确地向服务器端发送 POST 请求,并指定目标处理页面为 `loginCL.jsp`[^3]。
#### 身份验证逻辑 (loginCL.jsp)
接下来是在 `loginCL.jsp` 中执行实际的身份验证过程。这里假设有一个简单的硬编码用户名/密码组合来进行匹配测试:
```jsp
<%@ page import="java.util.HashMap"%>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
// 假设这是数据库中的有效账户数据
HashMap<String, String> users = new HashMap<>();
users.put("admin", "123456"); // 示例账号
if (users.containsKey(username) && users.get(username).equals(password)) {
session.setAttribute("user", username);
response.sendRedirect("success.jsp");
} else {
response.sendRedirect("login.jsp?error=true");
}
%>
```
这段脚本实现了基本的身份验证流程:获取客户端提交的数据、对比预存的有效凭据集、设置会话变量以及重定向响应给相应的视图层组件。
#### 成功消息展示 (success.jsp)
一旦用户被成功认证,则会被导向至 `success.jsp` 来查看欢迎信息和个人资料等具体内容。该页面可以从当前 HTTPSession 对象中检索之前存储起来的用户标识符并将其呈现出来:
```jsp
<%
Object userObj = session.getAttribute("user");
String userName = "";
if(userObj != null){
userName = userObj.toString();
}else{
response.sendRedirect("login.jsp");
}
boolean errorFlag = false;
if(request.getParameter("error") != null){
errorFlag = true;
}
%>
<html>
<body>
<h2>Hello <%=userName %></h2>
<p>Login Success!</p>
<% if(errorFlag){ %>
<span style='color:red;'>Invalid credentials.</span>
<% } %>
<a href="logout.jsp">Logout</a>
</body>
</html>
```
在此处不仅能够正常显示已登录用户的名称,还加入了对于非法访问尝试(即直接请求 success.jsp 或者 loginCL.jsp 的情况)的安全防护措施——强制跳转回初始入口页 login.jsp。
#### 数据传递与显示 (welcome.jsp 和 a.jsp)
考虑到题目提到的需求,在 welcome.jsp 接收由 loginCL.jsp 发送过来的信息之后再进一步转发到另一个名为 a.jsp 的页面上继续使用这些参数值的话,可以采用如下方式操作:
- **在 welcome.jsp 设置好要共享的数据**
```jsp
<%
session.setAttribute("sharedUsername", userName); // 将用户名保存进 Session Scope
response.sendRedirect("a.jsp");
%>
```
- **最后到达的目标页面 a.jsp 获取所需信息**
```jsp
<%
String sharedUserName = (String)session.getAttribute("sharedUsername");
out.println("<strong>Welcome back,</strong>" + sharedUserName +"!");
%>
```
这样就完成了整个过程中跨多个页面之间安全有效地传输必要的上下文环境信息的任务。
阅读全文
相关推荐

















