我有一个接收请求的.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。
答案 0 :(得分:0)
阅读StackOverflowError
的堆栈跟踪并注意重复模式。检查是否没有涉及任何自定义Filter
,它会反复拦截转发的请求并相应地修复Filter
的代码或配置,以便它不再执行此操作。例如,从配置中删除<dispatcher>FORWARD</dispatcher>
或设置一些请求属性,指示Filter
已完成作业。
最后但并非最不重要的一点是,您实际上不应该将JSP文件用作前端控制器,而应该使用servlet。有关新见解,您可以在our servlets wiki page中找到有用的示例。它还包括基本验证和错误处理。