ZBLOG

假设用户登录页面login.jsp在web工程web2024的hw目录下,即访问login.jsp的URL地址是http://localhost:8080/web2024/hw/login.jsp,将login.jsp提交的用户名和密码由FirstServlet(映射地址为/servlet/firstServlet.do)获取进行判断,如果登录成功,则跳转至SecondServlet(映射地址为/servlet/secondServlet.do)显示用户名信息,如果登录不成功,则跳转至登录...

要实现你描述的功能,我们可以按照以下步骤来设计你的Web应用程序。

1. 项目结构

假设你的项目结构如下:

  1. web2024/
  2. ├── WEB-INF/
  3. ├── userinfo.txt // 存放用户名和密码
  4. ├── web.xml // 配置文件
  5. ├── hw/
  6. ├── login.jsp // 登录页面
  7. ├── failed.jsp // 登录失败页面
  8. └── 404.html // 404错误页面
  9. └── 500.html // 500错误页面
  10. └── servlet/
  11. ├── FirstServlet.java // 第一个Servlet处理登录逻辑
  12. └── SecondServlet.java // 第二个Servlet显示用户名信息

2. userinfo.txt 文件格式

假设userinfo.txt 文件内容如下,格式为“用户名:密码”的形式(每行一个):

  1. user1:password1
  2. user2:password2

3. web.xml 配置

WEB-INF/web.xml 中配置 Servlet 和错误处理:

  1. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  4. http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  5. version="3.1">
  6. <servlet>
  7. <servlet-name>FirstServlet</servlet-name>
  8. <servlet-class>com.example.FirstServlet</servlet-class>
  9. </servlet>
  10. <servlet-mapping>
  11. <servlet-name>FirstServlet</servlet-name>
  12. <url-pattern>/servlet/firstServlet.do</url-pattern>
  13. </servlet-mapping>
  14. <servlet>
  15. <servlet-name>SecondServlet</servlet-name>
  16. <servlet-class>com.example.SecondServlet</servlet-class>
  17. </servlet>
  18. <servlet-mapping>
  19. <servlet-name>SecondServlet</servlet-name>
  20. <url-pattern>/servlet/secondServlet.do</url-pattern>
  21. </servlet-mapping>
  22. <!-- Error handling -->
  23. <error-page error-code="404">
  24. <location>/hw/404.html</location>
  25. </error-page>
  26. <error-page error-code="500">
  27. <location>/hw/500.html</location>
  28. </error-page>
  29. </web-app>

4. login.jsp 页面

  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <title>Login Page</title>
  7. </head>
  8. <body>
  9. <h2>Login Page</h2>
  10. <form action="${pageContext.request.contextPath}/servlet/firstServlet.do" method="post">
  11. Username: <input type="text" name="username"><br><br>
  12. Password: <input type="password" name="password"><br><br>
  13. <input type="submit" value="Login">
  14. </form>
  15. </body></html>

5. FirstServlet.java

  1. package com.example;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.BufferedReader;
  8. import java.io.FileReader;
  9. import java.io.IOException;
  10. @WebServlet("/servlet/firstServlet.do")
  11. public class FirstServlet extends HttpServlet {
  12. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  13. String username = request.getParameter("username");
  14. String password = request.getParameter("password");
  15. boolean isValidUser = validateUser(username, password);
  16. if (isValidUser) {
  17. response.sendRedirect(request.getContextPath() + "/servlet/secondServlet.do?username=" + username);
  18. } else {
  19. response.sendRedirect(request.getContextPath() + "/hw/failed.jsp");
  20. }
  21. }
  22. private boolean validateUser(String username, String password) throws IOException {
  23. try (BufferedReader reader = new BufferedReader(new FileReader(getClass().getClassLoader().getResource("userinfo.txt").getFile()))) {
  24. String line;
  25. while ((line = reader.readLine()) != null) {
  26. String[] parts = line.split(":");
  27. if (parts.length == 2 && parts[0].equals(username) && parts[1].equals(password)) {
  28. return true; // Valid user found.
  29. }
  30. }
  31. }
  32. return false; // Invalid user.
  33. }
  34. }

6. SecondServlet.java

  1. package com.example;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. @WebServlet("/servlet/secondServlet.do")
  9. public class SecondServlet extends HttpServlet {
  10. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  11. String username = request.getParameter("username");
  12. response.setContentType("text/html;charset=UTF-8");
  13. response.getWriter().println("<h1>Welcome " + username + "!</h1>");
  14. }
  15. }

7. failed.jsp 页面

  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <title>Login Failed</title></head><body>
  7. <h2>Login Failed!</h2><p>Please check your username and password.</p><a href="/web2024/hw/login.jsp">Try Again?</a>
  8. </body></html>`

错误处理页面 (404.html, 500.html)

确保存在这两个静态 HTML 文件,用于展示相应的错误消息。

以上就是实现用户登录并根据结果跳转到不同页面的完整示例。通过此示例,你可以学习如何使用 JSP 和 Servlet 来管理会话和用户身份验证。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20901

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?