Servlet和filter是J2EE开发中常用的技术,使用方便,配置简单,老少皆宜。
估计大多数朋友都是直接配置用,也没有关心过具体的细节,今天遇到一个问题,上网查了servlet的规范才发现,servlet和filter中的url-pattern还是有一些文章在里面的,总结了一些东西,放出来供大家参考,以免遇到问题又要浪费时间。
一、servlet容器对url的匹配过程:
当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://localhost/test/aaa.html,我的应用上下文是test,容器会将http://localhost/test去掉,剩下的/aaa.html部分拿来做servlet的映射匹配。这个映射匹配过程是有顺序的,而且当有一个servlet匹配成功以后,就不会去理会剩下的servlet了(filter不同,后文会提到)。其匹配规则和顺序如下:
1.?精确路径匹配。例子:比如servletA?的url-pattern为?/test,servletB的url-pattern为?/*?,这个时候,如果我访问的url为http://localhost/test?,这个时候容器就会先?进行精确路径匹配,发现/test正好被servletA精确匹配,那么就去调用servletA,也不会去理会其他的servlet了。
2.?最长路径匹配。例子:servletA的url-pattern为/test/*,而servletB的url-pattern为/test/a/*,此时访问http://localhost/test/a时,容器会选择路径最长的servlet来匹配,也就是这里的servletB。
3.?扩展匹配,如果url最后一段包含扩展,容器将会根据扩展选择合适的servlet。例子:servletA的url-pattern:*.action
4.?如果前面三条规则都没有找到一个servlet,容器会根据url选择对应的请求资源。如果应用定义了一个default?servlet,则容器会将请求丢给default?servlet(什么是default?servlet?后面会讲)。
根据这个规则表,就能很清楚的知道servlet的匹配过程,所以定义servlet的时候也要考虑url-pattern的写法,以免出错。
对于filter,不会像servlet那样只匹配一个servlet,因为filter的集合是一个链,所以只会有处理的顺序不同,而不会出现只选择一个filter。Filter的处理顺序和filter-mapping在web.xml中定义的顺序相同。
二、url-pattern详解
在web.xml文件中,以下语法用于定义映射:
以”/’开头和以”/*”结尾的是用来做路径映射的。
以前缀”*.”开头的是用来做扩展映射的。
”是用来定义default?servlet映射的。
剩下的都是用来定义详细映射的。比如:?/aa/bb/cc.action
所以,为什么定义”/*.action”这样一个看起来很正常的匹配会错?因为这个匹配即属于路径映射,也属于扩展映射,导致容器无法判断。
详细解决方案
Servlet跟filter是J2EE开发中常用的技术
热度:29 发布时间:2016-04-22 00:26:30.0
相关解决方案
- jsp servlet 读取图片!该如何处理
- Servlet 连接数据库(mongoDB)是用长连仍是短链比较好
- Spring自动扫描 <context:componet-scan>和加了<context:include-filter>以后有什么区别
- Servlet Session 购物车,该怎么解决
- Servlet.service() for servlet [jsp] in context with path解决方案
- 关于jsp+servlet+JavaBean的有关问题
- servlet+jsp能够获取表单里的数据,在控制台能够打印出来,但是不能安插到mysql,求帮忙
- Servlet Session 购物车解决办法
- JSP+Servlet+JavaBean做的留言板,在登录界面跳转不到上一个界面
- Tomcat 6.0 servlet 中文字符乱码解决思路
- The requested resource (/webtest/servlet/hello.html) is not availabl 帮忙解决解决方法
- servlet 连接mysql数据库时出现异常,麻烦高手帮看看
- Servlet struts is not available要如何解决
- servlet+jquery1.4.2(ajax error?)解决方案
- 关于JSP Servlet doGet调用的有关问题
- ,java servlet 下传文件异常。
- java学到什么程度 就可以弄JSP servlet 和SSH 什么的
- servlet 的 doGet() 中 return,网页往哪里
- java web servlet+jsp文件下传有关问题,下传图片到项目中
- jsp+servlet+javabean多表联合查询实现?解决思路
- jsp+servlet+javabean实现多表查询,该如何解决
- 办公自动化系统——议程管理(用jsp+servlet+js+html+jdbc)怎样实现
- servlet+jsp中实现分页显示的有关问题
- 呀javax.servlet.ServletException: Servlet execution threw an exception
- servlet.xml中的path,docBase,debug,reloadable,crossContext诀别代表是什么参数
- javax.servlet.jsp.tagext.TagSupport标签类使用有关问题
- Java servlet 显示多张图片的有关问题
- maven中的cannot be cast to javax.servlet.Filter怎么解决
- 小弟我在tomcat里的Server.xml部署web项目报Error instantiating servlet class
- jsp+servlet 密码批改模块