Java Web开发:在传递请求对象(版本2)时将控制从一个servlet转移到另一个servlet

时间:2016-12-30 16:26:22

标签: java jsp servlets

编辑:将文件名更改为' follow-up.jsp'为清楚起见。

这是我今天早些时候发布的较长问题的较短版本,希望是更好的版本(链接:Java web development: transfer control from one servlet to another while passing the request object)。

我有一张表格,在提交后张贴。在POST操作完成的相应servlet中,我想再次显示表单页面或后续页面,具体取决于验证是否成功。 BOTH 表单页面 AND 后续页面需要用户提交的表单数据;表单页面需要它来重新填充表单字段,后续页面需要它来显示一些这些数据(例如,让用户仔细检查它是否正确)。因此,我希望包含提交数据的请求对象可用于两个页面。

转发回表单不是问题:

  

RequestDispatcher rd =   。getServletContext()方法的getRequestDispatcher(" /form.jsp");   rd.forward(请求,回复);

但是,我如何以这样的方式访问后续页面(例如,follow-up.jsp),以便在该后续页面中仍然可以访问包含提交的表单数据的请求对象?

以下似乎不起作用:

response.sendRedirect("/MyProject/follow-up.jsp");

这是因为如果“name”是一个表单参数,它被分配给表单处理servlet中的请求对象的属性,那么这个属性也很方便地被称为" name",那么下面的行在follow-up.jsp中:

  

您的姓名是:$ {name}。

不会打印用户提交的名称(而是不打印任何内容,即只有“您的名字是:”)。换句话说,后续.jsp中不再提供原始请求对象的属性。这有意义的是,response.sendRedirect触发 HTTP请求(具有自己的请求和响应对象)。但这不是我想要的。

另一个(次要)问题是sendRedirect无法发出POST请求(它只使用GET;请参阅[link] response.sendRedirect() from Servlet to JSP does not seem to work)。

编辑:另外,我意识到我实际上可以使用:

  

rd.forward(请求,回复);

用于BOTH请求。但是,这会导致两个页面在地址栏中显示相同的URL (即路由servlet的名称,如" ..... / Register")。这绝对是不好的,因为表单页面和后续页面是完全不同的页面;后续页面与表单几乎没有关系(除了显示一些提交的表单数据)。

感谢。

1 个答案:

答案 0 :(得分:0)

在这种情况下,我认为您需要存储数据不是在请求中,而是在会话范围....或会话范围内...关于重定向不支持post ...那么理想情况下所有重定向应该是只能得到请求.....如果你想使用POST请求重定向,请重新评估你的方法......