当前位置: 首页 > 知识库问答 >
问题:

JSP Servlet中的登录页面

浦毅
2023-03-14

我正在尝试用JSP和Servlet实现一个简单的登录页面示例。下面是我的servlet代码;

package servlet;

import java.io.IOException;

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 javax.servlet.http.HttpSession;

import model.UserBean;

/**
 * Servlet implementation class LoginController
 */
@WebServlet("/login")
public class LoginController extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginController() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.doPost(request, response);

        System.out.println("in do post");

        String page = "";
        try {
            UserBean user = new UserBean();
            user.setUserName(request.getParameter("username"));
            user.setPassword(request.getParameter("password"));

            System.out.println(user.getUsername());
            System.out.println(user.getPassword());

            if (user.getUsername().equalsIgnoreCase("jsp") && user.getPassword().equalsIgnoreCase("1234")) {

//                  HttpSession session = request.getSession(true);
//                  session.setAttribute("currentSessionUser", user);
                page = "cashtransactions.jsp";

            } else {
                page = "invalidLogin.jsp"; // error page
            }
        } catch (Exception e) {
            System.out.println(e);
        }

        response.sendRedirect(page);
    }

}
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Welcome to Bank</title>
<link rel="stylesheet"
    href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
    integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
    crossorigin="anonymous">
</head>
<body>

    <div class="container col-md-4 col-md-offset-3 align-middle"
        style="overflow: auto; margin-top: 100px;">
        <h2>Bank</h2>
        <form action="<%=request.getContextPath()%>/login" method="post">
            <div class="form-group">
                <label for="uname">User Name:</label> <input type="text"
                    class="form-control" id="username" placeholder="User Name"
                    name="username" required>
            </div>

            <div class="form-group">
                <label for="uname">Password:</label> <input type="password"
                    class="form-control" id="password" placeholder="Password"
                    name="password" required>
            </div>


            <button type="submit" value="Login" class="btn btn-primary">Submit</button>
        </form>
    </div>
</body>
</html>
INFO: Server startup in 653 ms
in do post
jsp
1234
Aug 24, 2020 9:39:52 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [servlet.LoginController] in context with path [/BankApplication] threw exception
java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed
    at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:483)
    at servlet.LoginController.doPost(LoginController.java:74)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

共有1个答案

申屠宏胜
2023-03-14

错误告诉您,在提交响应后不能调用sendRedirect()。
通过servlet显示jsp页面的正确方法如下:

this.getServletContext().getRequestDispatcher("your_page_url").forward( request, response );

同时拆下此零件:

super.doPost( request, response );
 类似资料:
  • 我想用selenium登录这个网页。我尝试了selenium的find_element_by_,并使用浏览器中的检查元素。但是我无法登录。我在搜索id、名称、类名,这样我就可以用send_keys传递数据,但是没有做到这些。有人能帮助我提供一些代码来将数据推送到所需的字段吗?谢谢。这就是我到目前为止所做的。 在此之后,我试图点击按钮登录使用 但它失败了。它给出了无法找到“登录”的错误。由于默认情况

  • 记录器文件中的日志- org.springframework.Security.Access.event.loggerlistener-安全授权失败,原因是:org.springframework.Security.Access.accessdeniedexception:访问被拒绝;通过身份验证的主体:org.springframework.security.authentication.ano

  • 我有grails应用程序, 我想使用Angularjs和html进行登录,没有gsp页面。 我是grails和Spring Security性的新手,所以如果可能的话,给出一些链接,这样我就可以完成这个任务了。

  • 问题内容: 我想设置我的网站,以便如果用户点击该页面并且他们已经登录,它将把他们重定向到主页。如果未登录,它将正常显示。由于登录代码内置在Django中,我该怎么做? 问题答案: 我假设你当前正在使用内置的登录视图, 或你网址中的类似内容。 你可以编写包含默认视图的登录视图。它将检查用户是否已经登录,如果已经登录则重定向,否则使用默认视图。 就像是: 当然可以相应地更改你的网址:

  • 问题内容: 我开发了一个使用Spring Security的默认登录页面的应用程序。但是我想实现自己的登录页面。我将放置一个login.html而不是一个jsp页面。我想使用JQuery。我检查了许多示例,但未能实现。我是Spring和Spring Security的新手,我使用Spring Security3。我应该遵循哪些步骤? 问题答案: Spring Security中的自定义登录页面有四

  • 我遇到过许多讨论类似问题的文章,但我找不到确切的答案。 我的公司希望开始使用Identity Server 3,但其中一个要求是能够对外部用户进行身份验证,而无需他们手动输入凭据。 这必须能够提供单一登录功能,因为我们有3个不同的系统,用户只需登录一次。 本质上,外部用户有自己的CRM。 CRM保存我们软件的用户名和密码 至关重要的是,我们不能为我们的合作伙伴改变这一进程。 我可以实现一个自定义服