Post Redirect Get似乎正在工作,但结果JSP不显示任何内容

时间:2018-10-16 23:40:47

标签: java jsp redirect post servlets

要点:我有一个JSP表单(MyForm.JSP),它接受用户输入并将其传递给我的第一个servlet("/myfirstservlet")。

此Servlet将用户输入值的SQL插入处理到我的Fruits表中,然后将用户重定向到我的结果servlet("/results")。

然后,我的结果servlet检查一个"ADD"参数,如果结果为“ true”(即等于"success"),它将最终将用户重定向到我的Results JSP(Results.JSP),存储在路径WEB-INF/MyFolder/Results.jsp中。

我的JSP表单(MyForm.JSP)也存储在以下路径中:WEB-INF/MyFolder/MyForm.jsp

一切在控制台上运行都没有错误,但是为什么我的Results JSP(现在具有URL:"results?ADD=success" ???

却什么也没有显示

我的JSP表单(MyForm.JSP):

<form action="myfirstservlet" do="POST">
   <input type="text" name="fruit"><br>
   <input type="text" name="color"><br>
   <input type="submit" value="Submit">
</form>

我的第一个servlet("/myfirstservlet"):

protected void doPost(...){
   String fruit = request.getParameter("fruit");
   String color = request.getParameter("color");

   String sql = "INSERT INTO fruits (fruit, color) VALUES" + "(\"" + fruit +  "\", \""  + color +  "\");";

   utilitySQL.sqlInsert(sql); // My utility class that handles sql inserts

   response.sendRedirect("results?ADD=success");
}

我的结果servlet("/results"):

protected void doPost(...){

   response.setContentType("text/html");    

   if (request.getParameter("ADD").equals("SUCCESS"))
      request.getRequestDispatcher("WEB-INF/MyFolder/Results.jsp").forward(request, response);

}

我的结果JSP(Results.JSP):

<body>
<h1>Results JSP</h1>


   <%ArrayList<String> list = (ArrayList<String>) 

   utilitySQL.sqlSelectAll("Select * FROM fruits;");

   for(int i=0; i<list.size(); i++)
   {%>
      <div><%=list.get(i)%></div>
   <%
   }%>

</body>

1。)我是否正确实施了重定向后获取

2。)为什么结果JSP上没有任何显示?

编辑:

如果我从结果Servlet("ADD=success")中删除了"/results"参数条件,那么我的Results JSP将显示MySQL数据库中的值,但是如果我将"ADD=success"参数添加到我的结果中JSP不显示任何内容。为什么会这样?

2 个答案:

答案 0 :(得分:1)

由于此行,您什么都没看到:

 if (request.getParameter("ADD").equals("SUCCESS"))

.equals()区分大小写。您正在检查“成功”,但正在传递“成功”作为值。

这意味着该行将永远不会运行:

request.getRequestDispatcher("WEB-INF/MyFolder/Results.jsp").forward(request, response);

因此为空白页。

您可以以大写形式发送值,也可以将.equals()更改为.contains()

答案 1 :(得分:1)

首先将"/myfirstservlet"中的response.sendRedirect("results?ADD=success");替换为response.sendRedirect("/results?ADD=success");

"/results" servlet方法中的第二个应该是doGet。您使用了doPost。在此Servlet中,不要使用if (request.getParameter("ADD").equals("SUCCESS")) if (request.getParameter("ADD").equalsIgnoreCase("SUCCESS"))

我认为您的result.jsp中的

<% ArrayList<String> list = (ArrayList<String>) utilitySQL.sqlSelectAll("Select * FROM fruits;");

有问题。因为您正在获取对象列表。

<% ArrayList<Your class name> list = (ArrayList<String>) utilitySQL.sqlSelectAll("Select * FROM fruits;");

在本节中

for(int i=0; i<list.size(); i++)

       {%>
          <div><%=list.get(i)%></div>
       <%
       }%> 

您正在尝试打印完整的对象。