2016-09-18 45 views
0

我正在一个训练营参加商业Java编程课程。如何使用doGet中的参数将表单提交传递给Java servlet上的doPost?

我想构建一个单一的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>"); 
    } 


    } 

} 
+0

你或许应该作出这样的' ' –

+0

谢谢。这工作,因为我现在看到在URL中输入的参数,但我不能显示从doPost方法的信息。一旦我输入了SSN,就会返回一个404页面,但url接受输入的参数。所以,我得到一个URL与输入的SSN,但URL显示一个404页面。 –

+0

听起来就像你想要移除'request.getRequestDispatcher(“AboutME”)。forward(request,response);'(这实际上是一个更好的设计模式,但不适合与你的out.println调用混合)。 –

回答

0

你的servlet只处理/ AboutMe按行@WebServlet("/AboutMe")但你的表单动作指向的地址/的AddEntry。

要么改变形式的行动也/ AboutMe和POST方法添加一个处理/的AddEntry(,改变它的形式方法POST)与

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

+0

非常感谢你!这解决了问题。我并不知道提交表单中的这种小改动会对我的整个servlet产生如此巨大的影响。 –

相关问题