【前端异常】http://localhost:8080/user/login 登录失败,重新定向,再登录请求路径改为 http://localhost:8080/user/user/login

问题

http://localhost:8080/user/login 登录失败,重新定向,再登录请求路径改为 http://localhost:8080/user/user/login

分析

<form action="user/login" method="post">
    用户名:<input type="text" name="username"><br/>
    密码:<input type="password" name="password"><br/>
        <input type="submit" value="提交" >
</form>

没有使用thymeleaf

解决

修改为以下代码.

<form th:action="@{/user/login}" method="post">
    用户名:<input type="text" name="username"><br/>
    密码:<input type="password" name="password"><br/>
        <input type="submit" value="提交" >
</form>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您解答这个问题。 首先,您需要编写一个 HTML 页面,其中包含一个表单,该表单包含一个 userID 字段和一个 password 字段以及一个提交按钮。表单需要进行前端校验,以确保 userID 不包含字母,密码必须为 6 位数。以下是一个简单的示例: ```html <!DOCTYPE html> <html> <head> <title>Login Page</title> <script> function validate() { var userID = document.getElementById("userID").value; var password = document.getElementById("password").value; // Check if userID contains letters if (/^[a-zA-Z]+$/.test(userID)) { alert("UserID cannot contain letters!"); return false; } // Check if password is 6 characters long if (password.length != 6) { alert("Password must be 6 characters long!"); return false; } return true; } </script> </head> <body> <form action="LoginServlet" method="post" onsubmit="return validate()"> <label for="userID">UserID:</label> <input type="text" id="userID" name="userID"><br><br> <label for="password">Password:</label> <input type="password" id="password" name="password"><br><br> <input type="submit" value="Submit"> </form> </body> </html> ``` 接下来,您需要编写一个 servlet,该 servlet 处理表单提交并执行以下操作: 1. 检查 userID 和 password 是否符合格式要求。 2. 如果符合要求,则连接到数据库,并将 userID 和 password 与数据库中的数据进行比较。 3. 如果存在该用户,则将用户数据检索出来并传递给 JSP 页面进行展示。 4. 如果不存在该用户,则弹出登录失败的消息框并重定向登录页面。 以下是一个简单的示例 servlet 代码: ```java import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Get userID and password from request String userID = request.getParameter("userID"); String password = request.getParameter("password"); // Check if userID contains letters if (userID.matches(".*[a-zA-Z]+.*")) { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<script type=\"text/javascript\">"); out.println("alert('UserID cannot contain letters!');"); out.println("location='login.html';"); out.println("</script>"); return; } // Check if password is 6 characters long if (password.length() != 6) { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<script type=\"text/javascript\">"); out.println("alert('Password must be 6 characters long!');"); out.println("location='login.html';"); out.println("</script>"); return; } // Connect to database and check if user exists try { Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password"); PreparedStatement ps = con.prepareStatement("SELECT * FROM users WHERE userID=? AND password=?"); ps.setString(1, userID); ps.setString(2, password); ResultSet rs = ps.executeQuery(); if (rs.next()) { // User exists, retrieve all user data and forward to JSP page for display request.setAttribute("userData", rs); request.getRequestDispatcher("display.jsp").forward(request, response); } else { // User does not exist, display login failed message and redirect back to login page response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<script type=\"text/javascript\">"); out.println("alert('Login failed!');"); out.println("location='login.html';"); out.println("</script>"); } rs.close(); ps.close(); con.close(); } catch (Exception e) { System.out.println(e); } } } ``` 最后,您需要编写一个 JSP 页面,该页面接收 servlet 传递的用户数据并将其显示在表格中。以下是一个简单的示例: ```html <!DOCTYPE html> <html> <head> <title>User Data</title> </head> <body> <table> <tr> <th>UserID</th> <th>Name</th> <th>Email</th> <th>Phone</th> </tr> <c:forEach var="row" items="${userData}"> <tr> <td>${row.userID}</td> <td>${row.name}</td> <td>${row.email}</td> <td>${row.phone}</td> </tr> </c:forEach> </table> </body> </html> ``` 其中,`${userData}` 是从 servlet 传递过来的用户数据。注意,您需要在 JSP 页面的头部包含以下语句以启用 JSTL 标签库: ```html <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> ``` 希望这可以帮助您完成您的任务。如果您还有其他问题,请随时问我!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nickkkkkkkkk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值