一直使用tomcat,今天想到一个问题,自定义404错误页面, 为了获得很好的用户感受,是不应当向用户暴露404这样的页面的, 问题的出发点是我在Struts2中定义错误页面, 在Struts2中是这样定义的:
<default-action-ref name="pagenotfound"></default-action-ref>
<action name="pagenotfound">
<result>/pagenotfound.html</result>
</action>
这就是说在访问action是.如果没有找到action就访问这个页面,但是我如果我不用.do或者.action的样式,而直接使用.jsp或者.html的方式来访问页面的请,struts就不会处理了.结果是404错误依然出现.
现在已经不是struts的处理范围了,那么这应当是应用的处理范围,经查证,在工程的web.xml中可以设置自定义错误页面,设置如下:
<error-page>
<error-code>404</error-code>
<location>/pagenotfound.html</location>
</error-page>
现在再访问该该工程下面一个不存在的页面,将跳转到自定义的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中添加一些配置
<error-page> <error-code>404</error-code> <location>/NotFound404.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/NotFound500.jsp</location> </error-page>
这样当你在访问不存在的页面出错的页面时就自动显示刚才指定的页面了
<!-- 400错误 --> <error-page> <error-code>400</error-code> <location>/error.jsp</location> </error-page> <!-- 404 页面不存在错误 --> <error-page> <error-code>404</error-code> <location>/error.jsp</location> </error-page> <!-- 500 服务器内部错误 --> <error-page> <error-code>500</error-code> <location>/error.jsp</location> </error-page> <!-- java.lang.Exception异常错误,依据这个标记可定义多个类似错误提示 --> <error-page> <exception-type>java.lang.Exception</exception-type> <location>/error.jsp</location> </error-page> <!-- java.lang.NullPointerException异常错误,依据这个标记可定义多个类似错误提示 --> <error-page> <exception-type>java.lang.NullPointerException </exception-type> <location>/error.jsp</location> </error-page> <error-page> <exception-type>javax.servlet.ServletException</exception-type> <location>/error.jsp</location> </error-page>
具体的如下:
Tomcat 的错误页面是由 org.apache.catalina.valves.ErrorReportValve 类输出来的。如果想自定义错误页面,不需要修改该类。Servlet 规范声明了相关的API,只需要在每个 web 应用的 web.xml 里定义。可按照错误类型、错误代码配置。例如:
<web-app xmlns="http://java.sun.com/xml/ns/javaee" 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"> <display-name>Welcome to Tomcat</display-name> <description> Welcome to Tomcat </description> <error-page> <error-code>404</error-code> <location>/errorpages/404.jsp</location> </error-page> <error-page> <exception-type>java.lang.Exception</exception-type> <location>/errorpages/exception.jsp</location> </error-page> </web-app>
注意错误页面必须以“/”开头,这样任何path的404错误页面及exception错误都会映射到这两个文件。然后在本web引用的errorpages下面放置404.jsp, exception.jsp两个文件。
错误页面 404.jsp:
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<html>
<header>
<title>404 page</title>
<body>
<pre>
<%
Enumeration<String> attributeNames = request.getAttributeNames();
while (attributeNames.hasMoreElements())
{
String attributeName = attributeNames.nextElement();
Object attribute = request.getAttribute(attributeName);
out.println("request.attribute['" + attributeName + "'] = " + attribute);
}
%>
</pre>
代码中输出了所有的 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:
<%@ page contentType="text/html; charset=UTF-8" isErrorPage="true" %>
<%@ page import="java.io.*" %>
<html>
<header>
<title>exception page</title>
<body>
<hr/>
<pre>
<%
response.getWriter().println("Exception: " + exception);
if(exception != null)
{
response.getWriter().println("<pre>");
exception.printStackTrace(response.getWriter());
response.getWriter().println("</pre>");
}
response.getWriter().println("<hr/>");
%>
注意isErrorPage熟悉必须为true,才能使用exception对象。exception即捕捉到的异常。此处可以对exception进行处理,比如记录日志、重定向等等。这里把exception trace打印出来了。
500、505 等错误页面的处理类似于404。
# Tomcat
# 404
# tomcat 安全规范(tomcat安全加固和规范)
# 一次因信号量引发的tomcat异常退出解决
# Tomcat错误页重定向问题
# 不存在
# 自定义
# 多个
# 错误提示
# 的是
# 是在
# 很好
# 我在
# 是这样
# 不需要
# 是由
# 你在
# 只需
# 要在
# 这两个
# 如果没有
# 可以看到
# 只显示
# 只需要
# 时就
相关文章:
定制建站流程步骤详解:一站式方案设计与开发指南
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
如何在宝塔面板中创建新站点?
制作销售网站教学视频,销售网站有哪些?
建站之星在线客服如何快速接入解答?
IOS倒计时设置UIButton标题title的抖动问题
如何在景安云服务器上绑定域名并配置虚拟主机?
建站之星安装后界面空白如何解决?
制作农业网站的软件,比较好的农业网站推荐一下?
如何快速生成高效建站系统源代码?
如何通过.red域名打造高辨识度品牌网站?
如何在万网自助建站平台快速创建网站?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
公司网站制作价格怎么算,公司办个官网需要多少钱?
建站之星安装步骤有哪些常见问题?
网站制作新手教程,新手建设一个网站需要注意些什么?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
如何通过FTP服务器快速搭建网站?
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
动图在线制作网站有哪些,滑动动图图集怎么做?
建站VPS选购需注意哪些关键参数?
公司网站设计制作厂家,怎么创建自己的一个网站?
如何在IIS中新建站点并解决端口绑定冲突?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
广平建站公司哪家专业可靠?如何选择?
内部网站制作流程,如何建立公司内部网站?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
大型企业网站制作流程,做网站需要注册公司吗?
如何挑选最适合建站的高性能VPS主机?
建站之家VIP精选网站模板与SEO优化教程整合指南
建站上市公司网站建设方案与SEO优化服务定制指南
全景视频制作网站有哪些,全景图怎么做成网页?
如何用虚拟主机快速搭建网站?详细步骤解析
常州自助建站费用包含哪些项目?
建站之星代理费用多少?最新价格详情介绍
c# Task.ConfigureAwait(true) 在什么场景下是必须的
移民网站制作流程,怎么看加拿大移民官网?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
宝塔建站助手安装配置与建站模板使用全流程解析
黑客如何利用漏洞与弱口令入侵网站服务器?
建站之星多图banner生成与模板自定义指南
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
如何在VPS电脑上快速搭建网站?
深圳网站制作培训,深圳哪些招聘网站比较好?
建站之星后台密码遗忘或太弱?如何重置与强化?
如何在建站之星网店版论坛获取技术支持?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
*请认真填写需求信息,我们会在24小时内与您取得联系。