【问题标题】:JSP servlet not executing doPost methodJSP servlet 不执行 doPost 方法
【发布时间】:2017-01-05 12:31:56
【问题描述】:

我最近开始用 java 编程,并且一直在尝试一些 JSP 开发。我正在尝试制作一个使用 POST 方法将数据传输到 servlet 的登录页面。这是我的代码:

<form method="POST" name ="loginForm"  action="userAuth">
            <input type="hidden" name="userAction" value="login">
            Username: <input type="text" name="txtUsername"> <br>
            Password    : <input type="password" name="txtPassword">
            <br><input type="submit"  value="Login">

</form>

以上代码来自初始登录页面。

以下代码来自 userAuth.java 文件。

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
    String userAction = request.getParameter("userAction");
    if (userAction.equals("Login")) {
    String userName = request.getParameter("txtUsername");
    String passWord = request.getParameter("txtPassword");

    if (userName.equals("hello") && passWord.equals("hello")) {
    response.sendRedirect("Homepage.jsp");
    }
    }
}

我遇到的问题是,当我输入正确的用户名和密码时,doPost 方法没有执行,因此没有发生任何重定向。而是仅执行 ProcessRequest 方法,该方法仅向 Web 浏览器显示初始模板。

提前谢谢你。

PS 我使用的是 Apache Tomcat 8.0.27.0

【问题讨论】:

  • 您能否添加更多信息,例如您如何部署 jsp(Weblogic、Tomcat ......)等?可以先用 doGet 试试,确保环境没问题。
  • @pianista 我试过 doGet 但没有成功。
  • @Override放在上面,以检查你是否以正确的方式构建了所有内容。然后检查 web.xml 或替代注释以将 URL“userAuth”映射到正确的 servlet。

标签: java jsp servlets


【解决方案1】:

processRequest() 方法有什么作用?如果按照您所说的执行,则服务器会向客户端发出响应,并且剩余的代码块不会执行。您是否尝试过不使用此功能运行?

【讨论】:

  • 是的,我尝试过不使用该功能运行,但是,我被重定向到 userAuth.java servlet 并留在那里。 doPost 未执行。而 processRequest() 什么也不做,只是向浏览器输出一些文本。
  • 您是否在调试模式下检查过您的服务器以查看 doPost() 是否执行?如果是,并且您完全确定它不是,那么 servlet 映射中可能存在一些错误。你使用 web.xml 还是注解? processRequest() 是否执行?我不清楚。
  • 尝试 RequestDispatcher rd = request.getRequestDispatcher("Homepage.jsp"); rd.forward(请求,响应);或者 response.sendRedirect(request.getContextPath() + "Homepage.jsp");
【解决方案2】:

我已经解决了这个问题...

问题出在下面一行

<input type="hidden" name="userAction" value="**login**">

以及第二块中的后续处理:

if (userAction.equals("**Login**")) {}

登录值没有大写 L。

刚刚改了这个。

【讨论】:

    【解决方案3】:

    隐藏进程请求方法。

    像这样:

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //processRequest(request, response);
        String userAction = request.getParameter("userAction");
        if (userAction.equals("Login")) {
            String userName = request.getParameter("txtUsername");
            String passWord = request.getParameter("txtPassword");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-08-18
      • 2012-02-27
      • 2011-02-01
      • 1970-01-01
      • 2018-11-19
      • 2015-08-24
      • 1970-01-01
      • 2014-09-27
      • 2014-04-14
      相关资源
      最近更新 更多