java 自定义错误页面跳转页面跳转页面_在Tomcat中配置404自定义错误页面详解

一直使用tomcat,今天想到一个问题,自定义404错误页面, 为了获得很好的用户感受,是不应当向用户暴露404这样的页面的, 问题的出发点是我在Struts2中定义错误页面, 在Struts2中是这样定义的:

/pagenotfound.html

这就是说在访问action是.如果没有找到action就访问这个页面,但是我如果我不用.do或者.action的样式,而直接使用.jsp或者.html的方式来访问页面的请,struts就不会处理了.结果是404错误依然出现.

现在已经不是struts的处理范围了,那么这应当是应用的处理范围,经查证,在工程的web.xml中可以设置自定义错误页面,设置如下:

404

/pagenotfound.html

现在再访问该该工程下面一个不存在的页面,将跳转到自定义的pagenotfound页面,这样,struts中的那个default-action-ref 配置是可以去掉的了.因为404交给tomcat处理了.

然后,然后我输入http://localhost/asdfasdfafd一个不存在的地址,结果404依然出现,

回头想一下,刚才我们的web.xml是在某一个应用下面的,他处理的应当是本应用的404,而http://localhost/访问的是tomcat自已的应用,那么这个web.xml配置就应当在webapp/Root/下面的应用来配了,

Root目录下面放着Tomcat的应用,把里面换成自已的就行了.

于是现在再进行输入不存在的地址,成功跳向自定义的错误页面.

Tomcat中404/500 错误,自定义错误页面

当服务器出现404、500错误时候希望能够给用户友好的现实界面

只需要在项目的web.xml中添加一些配置

404

/NotFound404.jsp

500

/NotFound500.jsp

这样当你在访问不存在的页面出错的页面时就自动显示刚才指定的页面了

400

/error.jsp

404

/error.jsp

500

/error.jsp

java.lang.Exception

/error.jsp

java.lang.NullPointerException

/error.jsp

javax.servlet.ServletException

/error.jsp

具体的如下:

Tomcat 的错误页面是由 org.apache.catalina.valves.ErrorReportValve 类输出来的。如果想自定义错误页面,不需要修改该类。Servlet 规范声明了相关的API,只需要在每个 web 应用的 web.xml 里定义。可按照错误类型、错误代码配置。例如:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

version="2.5">

Welcome to Tomcat

Welcome to Tomcat

404

/errorpages/404.jsp

java.lang.Exception

/errorpages/exception.jsp

注意错误页面必须以“/”开头,这样任何path的404错误页面及exception错误都会映射到这两个文件。然后在本web引用的errorpages下面放置404.jsp, exception.jsp两个文件。

错误页面 404.jsp:

404 page
 
 

Enumeration attributeNames = request.getAttributeNames();

while (attributeNames.hasMoreElements())

{

String attributeName = attributeNames.nextElement();

Object attribute = request.getAttribute(attributeName);

out.println("request.attribute['" + attributeName + "'] = " + attribute);

}

%>

代码中输出了所有的 request 中的变量。从中也可以看到访问哪个文件出错,跳到哪个错误页面了,从而进行更详细、更人性化的错误处理。例如,提示可能的正确网址等等。

例如:访问一个不存在的页面 page_not_exist.html,显示的信息为:

request.attribute['javax.servlet.forward.request_uri'] = /page_not_exists.html

request.attribute['javax.servlet.forward.context_path'] =

request.attribute['javax.servlet.forward.servlet_path'] = /page_not_exists.html

request.attribute['javax.servlet.forward.path_info'] = /errorpages/404.jsp

request.attribute['javax.servlet.error.message'] = /page_not_exists.html

request.attribute['javax.servlet.error.status_code'] = 404

request.attribute['javax.servlet.error.servlet_name'] = default

request.attribute['javax.servlet.error.request_uri'] = /page_not_exists.html

注意,该错误页面必须大于512字节,否则IE将不予显示。因为IE默认只显示大于512字节的错误页面。Firefox中正常显示。可以添加一些其他信息,将页面大小扩充到512字节以上。如果仍不能显示,请检查IE设置,将该选项选中。

异常处理页面 exception.jsp:

exception page
 
 

response.getWriter().println("Exception: " + exception);

if(exception != null)

{

response.getWriter().println("

");

exception.printStackTrace(response.getWriter());

response.getWriter().println("

");

}

response.getWriter().println("


");

%>

注意isErrorPage熟悉必须为true,才能使用exception对象。exception即捕捉到的异常。此处可以对exception进行处理,比如记录日志、重定向等等。这里把exception trace打印出来了。

500、505 等错误页面的处理类似于404。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Nginx,可以使用error_page指令来自定义错误页面。通过在主配置文件添加error_page指令,可以设置不同类型的错误对应的处理方式。例如,可以为每种类型的错误单独设置处理页面,也可以利用在线资源处理指定的错误,还可以更改网站响应的状态码等多种设置。 具体的配置方式如下: 1. 为每种类型的错误设置单独的处理方式: ``` error_page 403 /40x.html; # 处理403错误 error_page 404 /404.jpg; # 处理404错误 ``` 通过以上配置,当发生403错误时,会使用网站根目录下的40x.html文件进行处理;当发生404错误时,会使用网站根目录下的404.jpg图片进行处理。 2. 利用在线资源进行处理错误: ``` error_page 403 http://example.com/forbidden.html; # 处理403错误到指定URL error_page 500 502 503 504 http://example.com/notfound.html; # 处理一系列指定错误到指定URL ``` 通过以上配置,在发生指定错误时,会到指定的在线资源进行处理。 3. 隐藏服务器返回的真实状态码信息: ``` error_page 404 =200 /40x.html; ``` 通过以上配置,当发生404错误时,实际的响应状态码会被隐藏,使用自定义的状态码200来响应。 以上是Nginx配置定义错误页面的几种常用使用方式。通过修改Nginx的主配置文件并重新加载配置,可以使这些配置生效。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [nginx自定义错误页](https://blog.csdn.net/qq_41684621/article/details/109424006)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Nginx——自定义错误页面](https://blog.csdn.net/cold___play/article/details/106697766)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值