衍微 2024-03-30 17:13 采纳率: 33.3%
浏览 6

关于无法从登录页面跳转至welcome页面

有无师傅知道为什么loginservlet类、登录页欢迎页写好后使用浏览器运行时无法跳转到欢迎页:
代码依据书上所给的敲上去,没有显示报错,制作的用户注册界面、登录界面都能成功运行

img

img


但是登录界面输入密码和用户名后却显示404不管正确还是错误都是404

img


以下是三个界面的代码
loginservlet:

package cn.itcast.cha1.response;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet(name = "LoginServlet", urlPatterns = "/LoginServlet")

public class LoginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charest=utf-8");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        if (("itcast").equals(username)&&("123").equals(password)){
            String contextPath = request.getContextPath();
            response.sendRedirect("welcome.html");

        }else {
            response.sendRedirect("login.html");
        }

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }
}

**welcome:**

```javascript
<!DOCTYPE html>
<head>
    <meta charset="UTF-8"; http-equiv="content-type"; content="text/html">
    <title>登录成功</title>
</head>
<body>
欢迎您,登陆成功!
</body>
</html>
**login:**
```javascript
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"; http-equiv="content-type"; content="text/html">
    <title>用户登录</title>
</head>
<body>
<!--把表单内容提交到loginServelt-->
<form action="/cha1/LoginServlet" method="post">
    用户名: <input type="text" name="username"/><br />&nbsp;&nbsp;&nbsp;码:<input type="password" name="password"><br />
    <input type="submit" value="登录" />
</form>
</body>
</html>

以上代码idea并没有显示报错,询问了ai并尝试修改代码发现也没有用。想问问是哪个地方出错了,求指点
  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-30 17:13
    关注

    引自免费微信小程序:皆我百晓生

    在Java Web应用程序中,HttpServletResponse对象在请求处理完成后,会通过sendRedirect()方法重定向到新的URL,这通常用于在某些情况下强制刷新网页,比如重定向到一个静态文件(例如.css, .js, .html, etc.)或一个特定目录下的资源(例如welcome.html)。但是,当请求到达LoginServlet,但尚未达到预期的登录逻辑(例如,用户名或密码验证失败,或其他登录相关异常),HttpServletResponse对象调用sendRedirect()方法,导致重定向到login.html页面,但并不会执行该页面上的JavaScript逻辑。

    下面是可能的解决方案:

    1. LoginServletdoPost()方法中添加异常处理代码:
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doDeleteToken(request);
        // handle login logic (e.g., username and password validation)
        String loginResult = validateLoginRequest(request);
        
        if (loginResult.equals("success")) {
            try {
                // 创建一个新的Servlet用于登录成功后的响应
                LoginSuccessServlet loginSuccessServlet = new LoginSuccessServlet(response.getWriter());
                
                // 重定向到登录成功的页面
                response.sendRedirect(loginSuccessServlet.getServletPath());
            } catch (IOException e) {
                // 如果出现了错误,将这个错误传递给登录失败Servlet
                LoginFailureServlet loginFailureServlet = new LoginFailureServlet(e.getMessage());
                loginFailureServlet.writeEntity(response.getWriter());
            }
        } else {
            // 遇到其他未预期的登录异常,则重定向到登录失败页面
            LoginFailedServlet loginFailedServlet = new LoginFailedServlet("Invalid username or password.");
            loginFailedServlet.writeEntity(response.getWriter());
        }
    }
    
    1. LoginServletdoGet()方法中添加常规返回代码,以表明登录过程并未完成:
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // ...
        
        // 如果验证过程未通过,发送常规的登录失败页面
        LoginFailedServlet loginFailedServlet = new LoginFailedServlet("Invalid username or password.");
        loginFailedServlet.writeEntity(response.getWriter());
        
        response.setContentType("text/html;charset=UTF-8");
        response.setStatus(HttpServletResponse.SC_OK);
    }
    

    这两种方案允许LoginServlet在遇到登录失败的情况下,采取适当的策略,如显示错误消息,并重定向到另一个页面(例如login.html)。注意,在实际应用中,可能会根据具体需求和网站结构的不同,对这些实现进行调整和优化。例如,如果用户已经使用第三方登录服务(例如Facebook或Google登录),则可能不需要在LoginServlet内部包含额外的逻辑来管理登录状态。在这种情况下,客户端和服务端之间可以通过API或集成到Web站点架构中的登录中间件来完成登录流程。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月30日

悬赏问题

  • ¥15 R语言绘制生存曲线时出现警告:All aesthetics have length 1, but the data has 2 rows.
  • ¥15 苍穹外卖拦截器token为null
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关
  • ¥15 C#中的编译平台的区别影响