登录页面在JSP Servlet中

huangapple go评论115阅读模式
英文:

Login page in JSP Servlet

问题

以下是您的代码的翻译部分:

  1. package servlet;
  2. import java.io.IOException;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.annotation.WebServlet;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import javax.servlet.http.HttpSession;
  9. import model.UserBean;
  10. /**
  11. * Servlet implementation class LoginController
  12. */
  13. @WebServlet("/login")
  14. public class LoginController extends HttpServlet {
  15. private static final long serialVersionUID = 1L;
  16. /**
  17. * @see HttpServlet#HttpServlet()
  18. */
  19. public LoginController() {
  20. super();
  21. // TODO Auto-generated constructor stub
  22. }
  23. /**
  24. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  25. */
  26. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  27. throws ServletException, IOException {
  28. // TODO Auto-generated method stub
  29. }
  30. /**
  31. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  32. */
  33. @Override
  34. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  35. throws ServletException, IOException {
  36. // TODO Auto-generated method stub
  37. super.doPost(request, response);
  38. System.out.println("in do post");
  39. String page = "";
  40. try {
  41. UserBean user = new UserBean();
  42. user.setUserName(request.getParameter("username"));
  43. user.setPassword(request.getParameter("password"));
  44. System.out.println(user.getUsername());
  45. System.out.println(user.getPassword());
  46. if (user.getUsername().equalsIgnoreCase("jsp") && user.getPassword().equalsIgnoreCase("1234")) {
  47. // HttpSession session = request.getSession(true);
  48. // session.setAttribute("currentSessionUser", user);
  49. page = "cashtransactions.jsp";
  50. } else {
  51. page = "invalidLogin.jsp"; // error page
  52. }
  53. } catch (Exception e) {
  54. System.out.println(e);
  55. }
  56. response.sendRedirect(page);
  57. }
  58. }
  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta charset="ISO-8859-1">
  7. <title>Welcome to Bank</title>
  8. <link rel="stylesheet"
  9. href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
  10. integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
  11. crossorigin="anonymous">
  12. </head>
  13. <body>
  14. <div class="container col-md-4 col-md-offset-3 align-middle"
  15. style="overflow: auto; margin-top: 100px;">
  16. <h2>Bank</h2>
  17. <form action="<%=request.getContextPath()%>/login" method="post">
  18. <div class="form-group">
  19. <label for="uname">User Name:</label> <input type="text"
  20. class="form-control" id="username" placeholder="User Name"
  21. name="username" required>
  22. </div>
  23. <div class="form-group">
  24. <label for="uname">Password:</label> <input type="password"
  25. class="form-control" id="password" placeholder="Password"
  26. name="password" required>
  27. </div>
  28. <button type="submit" value="Login" class="btn btn-primary">Submit</button>
  29. </form>
  30. </div>
  31. </body>
  32. </html>

您遇到的错误是 java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed。此错误发生在响应已经提交后尝试调用 sendRedirect() 函数时。可能的原因是您在处理请求时在某些情况下多次进行了响应操作,导致先前的响应已经完成。

为了解决这个问题,您可以移除 super.doPost(request, response); 这行代码,因为在这个方法中调用了父类的 doPost() 方法,这可能会干扰到您的响应流程。只保留您自己的业务逻辑即可。

同时,确保您没有在其他地方也进行了重定向操作,以防止多次提交响应。

英文:

I am trying to implement a simple login page example in JSP and servlet. Following is my servlet code;

  1. package servlet;
  2. import java.io.IOException;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.annotation.WebServlet;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import javax.servlet.http.HttpSession;
  9. import model.UserBean;
  10. /**
  11. * Servlet implementation class LoginController
  12. */
  13. @WebServlet(&quot;/login&quot;)
  14. public class LoginController extends HttpServlet {
  15. private static final long serialVersionUID = 1L;
  16. /**
  17. * @see HttpServlet#HttpServlet()
  18. */
  19. public LoginController() {
  20. super();
  21. // TODO Auto-generated constructor stub
  22. }
  23. /**
  24. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
  25. * response)
  26. */
  27. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  28. throws ServletException, IOException {
  29. // TODO Auto-generated method stub
  30. }
  31. /**
  32. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
  33. * response)
  34. */
  35. @Override
  36. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  37. throws ServletException, IOException {
  38. // TODO Auto-generated method stub
  39. super.doPost(request, response);
  40. System.out.println(&quot;in do post&quot;);
  41. String page = &quot;&quot;;
  42. try {
  43. UserBean user = new UserBean();
  44. user.setUserName(request.getParameter(&quot;username&quot;));
  45. user.setPassword(request.getParameter(&quot;password&quot;));
  46. System.out.println(user.getUsername());
  47. System.out.println(user.getPassword());
  48. if (user.getUsername().equalsIgnoreCase(&quot;jsp&quot;) &amp;&amp; user.getPassword().equalsIgnoreCase(&quot;1234&quot;)) {
  49. // HttpSession session = request.getSession(true);
  50. // session.setAttribute(&quot;currentSessionUser&quot;, user);
  51. page = &quot;cashtransactions.jsp&quot;;
  52. } else {
  53. page = &quot;invalidLogin.jsp&quot;; // error page
  54. }
  55. } catch (Exception e) {
  56. System.out.println(e);
  57. }
  58. response.sendRedirect(page);
  59. }
  60. }

and following is my JSP code;

  1. &lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=ISO-8859-1&quot;
  2. pageEncoding=&quot;ISO-8859-1&quot;%&gt;
  3. &lt;!DOCTYPE html&gt;
  4. &lt;html&gt;
  5. &lt;head&gt;
  6. &lt;meta charset=&quot;ISO-8859-1&quot;&gt;
  7. &lt;title&gt;Welcome to Bank&lt;/title&gt;
  8. &lt;link rel=&quot;stylesheet&quot;
  9. href=&quot;https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css&quot;
  10. integrity=&quot;sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T&quot;
  11. crossorigin=&quot;anonymous&quot;&gt;
  12. &lt;/head&gt;
  13. &lt;body&gt;
  14. &lt;div class=&quot;container col-md-4 col-md-offset-3 align-middle&quot;
  15. style=&quot;overflow: auto; margin-top: 100px;&quot;&gt;
  16. &lt;h2&gt;Bank&lt;/h2&gt;
  17. &lt;form action=&quot;&lt;%=request.getContextPath()%&gt;/login&quot; method=&quot;post&quot;&gt;
  18. &lt;div class=&quot;form-group&quot;&gt;
  19. &lt;label for=&quot;uname&quot;&gt;User Name:&lt;/label&gt; &lt;input type=&quot;text&quot;
  20. class=&quot;form-control&quot; id=&quot;username&quot; placeholder=&quot;User Name&quot;
  21. name=&quot;username&quot; required&gt;
  22. &lt;/div&gt;
  23. &lt;div class=&quot;form-group&quot;&gt;
  24. &lt;label for=&quot;uname&quot;&gt;Password:&lt;/label&gt; &lt;input type=&quot;password&quot;
  25. class=&quot;form-control&quot; id=&quot;password&quot; placeholder=&quot;Password&quot;
  26. name=&quot;password&quot; required&gt;
  27. &lt;/div&gt;
  28. &lt;button type=&quot;submit&quot; value=&quot;Login&quot; class=&quot;btn btn-primary&quot;&gt;Submit&lt;/button&gt;
  29. &lt;/form&gt;
  30. &lt;/div&gt;
  31. &lt;/body&gt;
  32. &lt;/html&gt;

I am getting the following error;

  1. INFO: Server startup in 653 ms
  2. in do post
  3. jsp
  4. 1234
  5. Aug 24, 2020 9:39:52 PM org.apache.catalina.core.StandardWrapperValve invoke
  6. SEVERE: Servlet.service() for servlet [servlet.LoginController] in context with path [/BankApplication] threw exception
  7. java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed
  8. at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:483)
  9. at servlet.LoginController.doPost(LoginController.java:74)
  10. at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
  11. at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
  12. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
  13. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
  14. at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
  15. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
  16. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
  17. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
  18. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
  19. at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
  20. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
  21. at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
  22. at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
  23. at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
  24. at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
  25. at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
  26. at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
  27. at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
  28. at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
  29. at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
  30. at java.lang.Thread.run(Unknown Source)

I am able to retrieve the value from the username and password. I checked this link for reference but still no luck. What am I missing here?

Appreciate the help!

答案1

得分: 1

根据错误信息,在响应已提交后,无法调用sendRedirect()
通过Servlet显示JSP页面的正确方法如下:

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

还要删除以下部分:

  1. super.doPost(request, response);
英文:

As the error tells you, you can not call sendRedirect() after the response has been committed.
The right way of displaying a jsp page via a servlet is the following :

  1. this.getServletContext().getRequestDispatcher(&quot;your_page_url&quot;).forward( request, response );

Also remove this part :

  1. super.doPost( request, response );

huangapple
  • 本文由 发表于 2020年8月25日 10:09:04
  • 转载请务必保留本文链接:https://go.coder-hub.com/63571086.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定