0

所以,我目前正在尝试学习一些 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 之后,我也希望表单能够正常工作。

小服务程序代码:

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}" /> 
4

3 回答 3

1

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

于 2013-02-21T15:20:50.907 回答
0

也为其他设置 action="test" <form>

如果这会引导您访问一些 url,例如 domain/TestJspConnection/test/test... 然后尝试将 action="/TestJSPConnection/test" 作为您的<form>属性

哦,是的,根本没有注意到这一点!...您没有在您的 sevlet 中实现 doGet() ......所以让<form method="get" >您进入空白页面

所以..两种解决方案:

1) 在 servlet 中实现 doGet()

2) 设置method="post"为第一种形式

于 2013-02-21T15:06:44.930 回答
0

首先:你只实现 doPost 所以你的第一个带有 method=Get 的表单会很可能。失败。

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

问候

于 2013-02-21T15:22:37.100 回答