Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 针对任何JSP异常发送500错误_Java_Jsp_Tomcat_El - Fatal编程技术网

Java 针对任何JSP异常发送500错误

Java 针对任何JSP异常发送500错误,java,jsp,tomcat,el,Java,Jsp,Tomcat,El,我有一个JSP页面,里面有一些EL。不幸的是,EL表达式抛出异常。 结果,当系统记录异常并发送我的电子邮件时,用户看到了页面的一半 是否可以将容器(tomcat)配置为首先处理jsp页面,然后将其显示给用户,并在出现异常时显示500错误页面 错误页面比部分呈现页面要好得多 是的,我知道模板引擎应该处理viewmodel,它只会抛出访问器/变异器和异常,但现在我必须访问EL中的一些业务(域模型)对象。您可以使用JSTL <c:catch> 标签。例如: <%@taglib

我有一个JSP页面,里面有一些EL。不幸的是,EL表达式抛出异常。 结果,当系统记录异常并发送我的电子邮件时,用户看到了页面的一半

是否可以将容器(tomcat)配置为首先处理jsp页面,然后将其显示给用户,并在出现异常时显示500错误页面

错误页面比部分呈现页面要好得多

是的,我知道模板引擎应该处理viewmodel,它只会抛出访问器/变异器和异常,但现在我必须访问EL中的一些业务(域模型)对象。

您可以使用JSTL

<c:catch> 

标签。例如:

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  
 <c:catch var="exp">
             ${.}
 </c:catch>
 <c:if test="${exp != null}" >
      Expection was thrown in EL
 </c:if>

${.}
期待被抛到了艾尔身上

EL表达式计算不应引发异常

如果发生这种情况,那么这只意味着您的预处理代码或getter方法的设计方式存在缺陷


预处理代码(读取:前端控制器servlet)必须绝对确保页面需要访问/呈现的任何数据已经在范围内。EL表达式引用的getter方法只能返回已准备/加载的属性。

您可以使用
web.xml
为应用程序配置500错误页

<error-page>
    <error-code>500</error-code>
    <location>/WEB-INF/error-pages/500.jsp</location>
</error-page>

500
/WEB-INF/error pages/500.jsp

将其放入web.xml文件的
。对于任何服务器端异常,它都会将用户重定向到
500.jsp
page

,这不会有任何帮助。OP的具体问题是,在抛出异常时,响应已经提交。否则servletcontainer应该已经全部显示了默认错误页。@BalusC您是对的。他应该清理他的代码。这是最有意义的。但是,他似乎不顾一切地想让某些东西发挥作用。我在这里编辑了上面的代码,以显示我建议的代码。另一个疯狂的想法:增加输出缓冲区大小。也许这样,直到整个页面准备就绪(或者先抛出异常),响应才会提交。同样,这也不会有任何帮助。即使在捕获到
异常时,也无法按照OP的要求清除标准HTTP 500错误页面,因为响应已经提交。这就是OP的全部问题。如果当时没有提交响应,servletcontainer将自动显示错误页面。但是OP的情况并非如此。难道不增加页面缓冲区延迟承诺的大小吗?我认为您没有像rickz一样理解OP的具体问题。然而,我可以理解您的误解,因为OP正在使用EL表达式背后的getter方法进行异常敏感的业务工作,这不是每个人都会期望/做的。啊!我今天真走运!早上好,巴卢斯克先生!是的,我这次把问题读对了。我现在的感觉是,我的答案不是问题的关键,但它为
服务器端错误
提供了一个解决方案。谢谢你的清理。祝您愉快:)OP已经有一个错误页面(即使他没有错误页面,servletcontainer仍然有一个默认页面)。具体的问题是,由于响应已经提交,所以它没有被显示。把问题的第一段全部重读一遍。好的,我明白了!所以答案的必选部分是用斜体写的…:)那部分只是噪音。只需发表评论。