【问题标题】:How to pass a form submission using parameters in doGet to doPost on a Java servlet? [duplicate]java - 如何使用doGet中的参数将表单提交传递给Java servlet上的doPost? [复制]
【发布时间】:2016-09-18 04:36:40
【问题描述】:

我正在训练营学习商业 Java 编程课程。

我想构建一个单独的 servlet 基础网页来验证 SSN。

验证 SSN 后,我会向用户显示有关 SSN 的信息。

但是,当我在 Eclipse 上运行我的 servlet 时,我收到一个 404 页面。

我正在尝试调试,但无法解决问题。

我的困惑在于将参数从doGet传递给doPost方法,然后通过doPost显示有关SSN的相关信息。

我没有使用 HTML 重定向,也没有重定向到另一个 servlet。

这是一个独立的 servlet。

代码如下:

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/AboutMe")
public class AboutMe extends HttpServlet {
private static final long serialVersionUID = 1L;


public void init(ServletConfig config) throws ServletException
  {
    super.init(config);
  }

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");

    PrintWriter out = response.getWriter();

    out.println("<!DOCTYPE html>");
    out.println("<html>");
    out.println("<head>");

    out.println("   <meta charset=\"UTF-8\">");
    out.println("   <title>About Me</title>");
    out.println("</head>");
    out.println("<body>");

    out.println("<form action=\"AddEntry\" method=\"get\">");
    out.println("  SSN: <input type=\"text\" name=\"ssn\" /> <br />");
    out.println("  <input type=\"submit\" />");
    out.println("</form>");

    out.println("</body>");
    out.println("</html>");
}



protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


    String SSN = request.getParameter("ssn");


    //validate string
String message = "";
    if ( SSN == null || SSN.trim().length() == 0 || SSN.trim().length() !=     9 || !SSN.equals("123456789") ) { 
message = "Enter SSN!";
} else {


    response.setContentType( "text/html" );

    PrintWriter out = response.getWriter();
    out.println( "<html>");
    out.println("<head>"); 
    out.println("<!DOCTYPE html>");
    out.println("<html>");
    out.println("<head>");

    out.println("   <meta charset=\"UTF-8\">");
    out.println("   <title>Insert title here</title>");
    out.println("</head>");
    out.println("<body>");
    out.println("<div id = name>");
    out.println("FirstName LastName");
    out.println("</div>");
    out.println("</br>");
    out.println("</br>");
    out.println( "<p>The SSN is " + SSN + "! </p>" );
    out.println("</br>");
    out.println("</br>");
    out.println("<p class = paragraph>");
    out.println(" User information goes here." );

    out.println( "</body></html>" );
    }


    }

}

【问题讨论】:

  • 你应该这样做&lt;input type=\"text\" name=\"ssn\" /&gt;
  • 谢谢。这很有效,因为我现在在 url 中看到输入的参数,但我无法显示来自 doPost 方法的信息。输入 SSN 后,返回 404 页面,但 url 接受输入的参数。所以,我得到一个带有输入 SSN 的 url,但该 URL 显示的是 404 页面。
  • 听起来您想删除request.getRequestDispatcher("AboutME").forward(request, response);(这实际上是一种更好的设计模式,但不适合与您的out.println 调用混合使用)。
  • @ElliottFrisch,我已删除 request.getRequestDispatcher("AboutMe").forward(request, response);,但我仍然收到 404 错误。 doGet 正在接受该参数,但 doPost 正在返回 404 页面。

标签: java servlets bootcamp


【解决方案1】:

您的 servlet 仅按照 @WebServlet("/AboutMe") 行处理 /AboutMe,但您的表单操作指向地址 /AddEntry。

要么将表单操作也更改为 /AboutMe 和方法 POST

@WebServlet(ulPatterns={"/AboutMe","/AddEntry"})

【讨论】:

  • 非常感谢!这解决了问题。我不知道表单提交中如此微小的变化会对我的整个 servlet 产生如此大的影响。
猜你喜欢
  • 2015-01-06
  • 2014-05-23
  • 1970-01-01
  • 2019-06-18
  • 1970-01-01
  • 2014-05-25
  • 2015-04-01
  • 2011-01-21
  • 2011-07-09
相关资源
最近更新 更多