从Servlet重定向后,其他表单不起作用

时间:2013-02-21 14:56:43

标签: java jsp servlets jstl

所以,我现在正在尝试学习一些JSP,我无法弄清楚如何解决这个问题。

目前,我有一个包含多种表单的index.jsp页面。对于一个表单,它有两个文本字段,它们发送到servlet test.java,以便构建一个字符串。构建字符串后,servlet会重定向回index.jsp

原始index.jsp地址:      http://localhost:8080/TestJSPConversion/

重定向后,地址为      http://localhost:8080/TestJSPConversion/test

当我尝试在index.jsp上使用另一个表单时出现问题,然后它将我带到地址的空白页面,      http://localhost:8080/TestJSPConversion/test?author=Peter+Johnson

我认为这是由于我用来从servlet重定向的方法(request.getRequestDispatcher(“/ index.jsp”)。forward(request,response); 但是,我不太确定如何解决这个问题。即使在servlet重定向回index.jsp之后,我也想让表单工作。

Servlet代码:

protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    // Get parameters from the request.
    String name = request.getParameter("name");
    String email = request.getParameter("email");

    String message = null;
    GregorianCalendar calendar = new GregorianCalendar();
    if (calendar.get(Calendar.AM_PM) == Calendar.AM) {
        message = "Good Morning, ";
    } else {
        message = "Good Afternoon, ";
    }
    message += name + " with the email, " + email;

    request.setAttribute("message", message);
    request.getRequestDispatcher("/index.jsp").forward(request, response);
}

Index.jsp代码:

<h2>Choose authors:</h2>
<form method="get">
    <input type="checkbox" name="author" value="Tan Ah Teck">Tan
    <input type="checkbox" name="author" value="Mohd Ali">Ali 
    <input type="checkbox" name="author" value="Kumar">Kumar 
    <input type="checkbox" name="author" value="Peter Johnson">Peter
    <input type="submit" value="Query">
</form>

<c:set var="authorName" value="${param.author}" />
</br>
<c:if test="${not empty authorName}">
    <c:out value="${authorName}" />
</c:if>
</br>
<form  action="test" method="POST">  
    First Name: <input type="text" name="name" size="20"><br />  
    Surname: <input type="text" name="email" size="20">  
    <br /><br />  
    <input type="submit" value="Submit">  
</form>
<c:out value="${message}" /> 

3 个答案:

答案 0 :(得分:0)

还为其他<form>设置了action =“test”。

如果这会引导您访问某些网址,例如domain / TestJspConnection / test / test ...那么请尝试将action =“/ TestJSPConnection / test”作为您的<form>属性

哦,是的,完全没有注意到这一点!...你没有在你的sevlet中实现doGet()......所以<form method="get" >让你登陆空白页

所以..两个解决方案:

1)在servlet中实现doGet() 或
2)为第一个表单设置method="post"

答案 1 :(得分:0)

尝试response.sendRedirect("index.jsp?message=hello");并使用${param.message}(EL)显示它。如果您在<form action="test" method="POST">中使用方法作为帖子,那么您必须使用doPost方法编写代码。

答案 2 :(得分:0)

首先:你只实现了doPost,所以你的第一个Form with method = Get将是概率。失败。

第二:你应该使用sendRedirect而不是forward。这样,如果你在浏览器上点击刷新,你就不会收到有关重新发布数据的警告!当服务器进程完成并且您希望在JSP中显示结果时,总是更好地发送sendRedirect。

问候