在tomcat的web.xml文件中配置error-page

指定处理错误的页面

你在开发servlet和JSP页面时从不会犯错误,而且你的所有页面是那样的清晰,一般的程序员都不会被它们的搞糊涂。但是,是人总会犯错误的,用户可能会提供不合规定的参数,使用不正确的URL或者不能提供必需的表单字段值。除此之外,其它开发人员可能不那么细心,他们应该有些工具来克服自己的不足。

error-page元素就是用来克服这些问题的。它有两个可能的子元素,分别是:error-code和exception-type。第一个子元素error-code指出在给定的HTTP错误代码出现时使用的URL。第二个子元素excpetion-type指出在出现某个给定的Java异常但未捕捉到时使用的URL。error-code和exception-type都利用location元素指出相应的URL。此URL必须以/开始。location所指出的位置处的页面可通过查找HttpServletRequest对象的两个专门的属性来访问关于错误的信息,这两个属性分别是:javax.servlet.error.status_code和javax.servlet.error.message。

可回忆一下,在web.xml内以正确的次序声明web-app的子元素很重要。这里只要记住,error-page出现在web.xml文件的末尾附近,servlet、servlet-name和welcome-file-list之后即可。

1  error-code元素

为了更好地了解error-code元素的值,可考虑一下如果不正确地输入文件名,大多数站点会作出什么反映。这样做一般会出现一个404错误信息,它表示不能找到该文件,但几乎没提供更多有用的信息。另一方面,可以试一下在www.microsoft.comwww.ibm.com 处或者特别是在www.bea.com 处输出未知的文件名。这是会得出有用的消息,这些消息提供可选择的位置,以便查找感兴趣的页面。提供这样有用的错误页面对于Web应用来说是很有价值得。事实上,http://www.plinko.net/404/ 就是把整个站点专门用于404错误页面这个内容。这个站点包含来自全世界最好、最糟和最搞笑的404页面。

程序清单5-13给出一个JSP页面,此页面可返回给提供位置程序名的客户机。程序清单5-14给出指定程序清单5-13作为返回404错误代码时显示的页面的web.xml。请注意,浏览器中显示的URL仍然是客户机所提供的。错误页面是一种后台实现技术。

最后一点,请记住IE5的缺省配置显然不符合HTTP规范,它忽略了服务器生成的错误消息,而是显示自己的标准出错信息。可转到其Tools菜单,选择Internet Options,单击Advanced,取消Show Friendly HTTP Error Message来解决此问题。

程序清单5-13 NotFound.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD><TITLE>404: Not Found</TITLE></HEAD>

<BODY BGCOLOR="#FDF5E6">

<H2>Error!</H2>

I'm sorry, but I cannot find a page that matches

<%= request.getRequestURI() %> on the system. Maybe you should

try one of the following:

<UL>

<LI>Go to the server's <A HREF="/">home page</A>.

<LI>Search for relevant pages.<BR>

<FORM ACTION="http://www.google.com/search">

<CENTER>

Keywords: <INPUT TYPE="TEXT" NAME="q"><BR>

<INPUT TYPE="SUBMIT" VALUE="Search">

</CENTER>

</FORM>

<LI>Admire a random multiple of 404:

<%= 404*((int)(1000*Math.random())) %>.

<LI>Try a <A HREF="http://www.plinko.net/404/rndindex.asp"

TARGET="_blank">

random 404 error message</A>. From the amazing and

amusing plinko.net <A HREF="http://www.plinko.net/404/">

404 archive</A>.

</UL>

</BODY></HTML>

程序清单5-14 web.xml(指出HTTP错误代码的错误页面的摘录)

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<error-page>

<error-code>404</error-code>

<location>/NotFound.jsp</location>

</error-page>

<!-- ... -->

</web-app>

 

2   exception-type元素

error-code元素处理某个请求产生一个特定的HTTP状态代码时的情况。然而,对于servlet或JSP页面返回200但产生运行时异常这种同样是常见的情况怎么办呢?这正是exception-type元素要处理的情况。只需提供两样东西即可:即提供如下的一个完全限定的异常类和一个位置:

<error-page>

<exception-type>packageName.className</exception-type>

<location>/SomeURL</location>

</error-page>

这样,如果Web应用中的任何servlet或JSP页面产生一个特定类型的未捕捉到的异常,则使用指定的URL。此异常类型可以是一个标准类型,如javax.ServletException或java.lang.OutOfMemoryError,或者是一个专门针对你的应用的异常。

例如,程序清单5-15给出了一个名为DumbDeveloperException的异常类,可用它来特别标记经验较少的程序员(不是说你的开发组中一定有这种人)所犯的错误。这个类还包含一个名为dangerousComputation的静态方法,它时不时地生成这种类型的异常。程序清单5-16给出对随机整数值调用dangerousCompution的一个JSP页面。在抛出此异常时,如程序清单5-18的web.xml版本中所给出的exception-type所指出的那样,对客户机显示DDE.jsp(程序清单5-17)。图5-16和图5-17分别给出幸运和不幸的结果。

程序清单5-15 DumbDeveloperException.java

package moreservlets;

/** Exception used to flag particularly onerous

programmer blunders. Used to illustrate the

exception-type web.xml element.

* <P>

* Taken from More Servlets and JavaServer Pages
* from Prentice Hall and Sun Microsystems Press,
http://www.moreservlets.com/.
* © 2002 Marty Hall; may be freely used or adapted.
*/

 

public class DumbDeveloperException extends Exception {
public DumbDeveloperException() {
super("Duh. What was I *thinking*?");
}

public static int dangerousComputation(int n)
throws DumbDeveloperException {
if (n < 5) {
return(n + 10);
} else {
throw(new DumbDeveloperException());
}
}
}


程序清单5-16 RiskyPage.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD><TITLE>Risky JSP Page</TITLE></HEAD>
<BODY BGCOLOR="#FDF5E6">
<H2>Risky Calculations</H2>
<%@ page import="moreservlets.*" %>
<% int n = ((int)(10 * Math.random())); %>
<UL>
<LI>n: <%= n %>
<LI>dangerousComputation(n): 
<%= DumbDeveloperException.dangerousComputation(n) %>
</UL>
</BODY></HTML>


程序清单5-17 DDE.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD><TITLE>Dumb</TITLE></HEAD>
<BODY BGCOLOR="#FDF5E6">
<H2>Dumb Developer</H2>
We're brain dead. Consider using our competitors.
</BODY></HTML>


程序清单5-18 web.xml(为异常指定错误页面的摘录)
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<!-- ... -->
<servlet> … </servlet>
<!-- ... -->
<error-page>
<exception-type>
moreservlets.DumbDeveloperException
</exception-type>
<location>/DDE.jsp</location>
</error-page>
<!-- ... -->
</web-app>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Web.xmlTomcat 用来配置 Web 应用程序的主要配置文件。它位于 Web 应用程序的 WEB-INF 目录下。以下是一些常见的 Tomcat Web.xml 配置选项: 1. Servlet 配置:可以在 <servlet> 标签定义 Servlet 的名称、类名和映射路径。 示例: ```xml <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>com.example.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> ``` 2. 过滤器配置:可以使用 <filter> 标签定义过滤器,并使用 <filter-mapping> 标签指定过滤器的映射路径。 示例: ```xml <filter> <filter-name>MyFilter</filter-name> <filter-class>com.example.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>MyFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` 3. Listener 配置:可以在 <listener> 标签定义监听器。 示例: ```xml <listener> <listener-class>com.example.MyListener</listener-class> </listener> ``` 4. 错误页面配置:可以使用 <error-page> 标签定义特定错误码或异常类型对应的错误页面。 示例: ```xml <error-page> <error-code>404</error-code> <location>/error/404.html</location> </error-page> <error-page> <exception-type>java.lang.Exception</exception-type> <location>/error/exception.html</location> </error-page> ``` 这些只是 Web.xml 配置的一部分,还有其他许多配置选项,如会话管理、上下文参数等。你可以根据自己的具体需求进行配置

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值