JSP Forward将请求发送给转发器

时间:2012-03-20 15:59:05

标签: jsp jsp-tags

我有一个接收请求的.jsp文件并检查请求的参数。在与此JSP文件相同的目录中,存在应该执行错误处理的error.jsp文件。如果参数为null,我想将请求转发到error.jsp文件,如下所示:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="ISO-8859-1"%>

<html>
  <head></head>
<body></body>
<% 
request.setCharacterEncoding("UTF-8");
String uid = request.getParameter("uid");
String procName = request.getParameter("procName");
//param check
if(uid == null || procName == null){ %>
<jsp:forward page="error.jsp"/> 
<% }%>
</html>

然而,这不起作用。在前进行之后,我将请求重新提交给相同的JSP而不是error.jsp。最终,由于服务器上的循环,我得到了一个StackOverflowException。

如果不是JSP:forward,我使用response.sendRedirect(),如:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="ISO-8859-1"%>
<html>
<head></head>
<body></body>
<% 
request.setCharacterEncoding("UTF-8");
String uid = request.getParameter("uid");
String procName = request.getParameter("procName");

//param check
if(uid == null || procName == null){
response.sendRedirect("error.jsp");
}%>
</html>
一切正常。为什么jsp:forward无法工作?根据{{​​3}}和this site,我有正确的标记。

PS。:JSP部署在JBoss AS中,版本为4.0.5 GA。

1 个答案:

答案 0 :(得分:0)

阅读StackOverflowError的堆栈跟踪并注意重复模式。检查是否没有涉及任何自定义Filter,它会反复拦截转发的请求并相应地修复Filter的代码或配置,以便它不再执行此操作。例如,从配置中删除<dispatcher>FORWARD</dispatcher>或设置一些请求属性,指示Filter已完成作业。

最后但并非最不重要的一点是,您实际上不应该将JSP文件用作前端控制器,而应该使用servlet。有关新见解,您可以在our servlets wiki page中找到有用的示例。它还包括基本验证和错误处理。