博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何配置web.xml文件?
阅读量:4091 次
发布时间:2019-05-25

本文共 2322 字,大约阅读时间需要 7 分钟。

 由发表在

Servlet本身只是HttpServlet抽象类的子类,通过重写doGet()doPost()等方法来确定它响应HTTP请求的处理逻辑。在Servlet 3.0版本以后,在Servlet类上表明@WebServlet注解可以定义它处理的URL模式——Servlet容器在加载Servlet时会扫描到注解中的信息,并将URL模式与该Servlet的映射关系记录下来,在接收HTTP请求以后根据这张映射关系表进行请求分发处理。这样做的好处是:

  • 单一职责——明确Servlet本身的职责,而将URL的映射关系交给容器管理
  • 复用——Servlet本身和URL映射关系解耦,它可以被引入任意Web应用中匹配不同的URL模式(注解不会影响Servlet本身的功能)

Web.xml文件

在Servlet 3.0之前,Servlet和URL的映射关系必须在WEB-INF/web.xml文件中定义:

registerServlet
com.tianmaying.RegisterServlet
registerServlet
/register

<servlet>标签定义了一个Servlet——它的名字(必须唯一)以及对应的Servlet类,Servlet容器在初始化时会直接加载这个Servlet;而<servlet-mapping>标签则定义的Servlet处理的URL匹配模式。

同样,Filter也可以在web.xml文件中定义:

createPostFilter
com.tianmaying.filter.CreatePostFilter
createPostFilter
/createPost

web.xml是描述Java Web应用的XML文件,它定义了Web应用中的各个组件(Servlet, Filter等)以及部署信息。但是随着Web应用的规模逐渐庞大,web.xml可能会过于臃肿(几百个Servlet以及Filter)以至于不容易维护,所以我们推荐在定义Servlet与Filter时使用@WebServlet@WebFilter注解。

HTTP错误处理

程序运行过程中,总是难免会遇到各类错误:

  • 用户访问了一个不存在的URL
  • Servlet/JSP代码中抛出了异常

对于这些错误,Servlet容器提供了默认的处理方式,例如当用户访问了一个不存在的URL,会出现如下提示:

对于各类HTTP的错误返回码(4xx和5xx),Tomcat都提供了默认的错误页面,但是这个页面比较简单同时还包含了一些程序调试信息(异常Stacktrace),很多时候网站的这些错误提示页面都需要自己设计并配置。

这里用一个JSP页面WEB-INF/templates/error/404.jsp作为404错误返回:

啊哦!

404 Not Found

错误404: 你访问的页面不存在

web.xml中的<error-page>标签中配置JSP:

404
/WEB-INF/templates/error/404.jsp

这样如果访问网站出现404错误,页面就会显示:

同理,<error-page>标签能够指定任意HTTP状态码对应的错误页面——常用的包括403,500等等。

异常处理

除了错误的HTTP状态码,很多时候我们还希望能够对特定类型的异常(Exception)进行处理。例如我们自定义了一个异常:

package com.tianmaying;public class PostNotFoundException extends Exception {    public PostNotFoundException(long id) {        super("Post " + id + " not found!");    }}

当程序中抛出这个异常时,我们希望能够显示一个特定的错误页面,那么在web.xml可以这样配置:

com.tianmaying.PostNotFoundException
/WEB-INF/templates/error/post.jsp

<error-page>标签中,<error-code><exception-type>二者必选其一,代表处理不同类型的错误。<location>标签可以是任意Web应用中的URL(只要他们对应的JSP/Servlet输出的HTML即可)。

更多文章请访问

你可能感兴趣的文章
我觉得嵌入式面试三要素:基础吃透+项目+大量刷题,缺一不可。不刷题是不行的。而且得是大量刷,刷出感觉套路,别人做题都做得是固定题型套路条件反射了,你还在那慢慢理解慢慢推是不行的,也是考研的教训。
查看>>
删除docker容器和镜像的命令
查看>>
gazebo似乎就是在装ROS的时候一起装了,装ROS的时候选择的是ros-melodic-desktop-full的话。
查看>>
React + TypeScript 实现泛型组件
查看>>
TypeScript 完全手册
查看>>
React Native之原理浅析
查看>>
Git操作清单
查看>>
基础算法
查看>>
前端面试
查看>>
JavaScript实现DOM树的深度优先遍历和广度优先遍历
查看>>
webpack4 中的 React 全家桶配置指南,实战!
查看>>
react 设置代理(proxy) 实现跨域请求
查看>>
通过试题理解JavaScript
查看>>
webpack的面试题总结
查看>>
实践这一次,彻底搞懂浏览器缓存机制
查看>>
Koa2教程(常用中间件篇)
查看>>
React Hooks 完全指南
查看>>
nvm 和 nrm 的安装与使用
查看>>
React Redux常见问题总结
查看>>
总结vue知识体系之实用技巧
查看>>