`

Servlet和filter的JAVAEE的配置

 
阅读更多

一、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详解

  

在部署描述符中,可以使用下面的语法来定义映射。

  以/开始并且以 /* 结束的字符串用来映射路径,例如:

<url-pattern>/admin/*</url-pattern>

如果没有精确匹配,那么对/admin/路径下的资源的所有请求将由映射了上述URL样式的Servlet来处理。

以 *. 为前缀的字符串用来映射扩展名,例如:

<url-pattern>*.do</url-pattern>

如果没有精确匹配和路径匹配,那么对具有.do扩展名的资源的请求将由映射了上述URL样式的Servlet来处理。

 以一个单独的/指示这个Web应用程序默认的Servlet,例如:

<url-pattern>/</url-pattern>

如果对某个请求没有找到匹配的Servlet,那么将使用Web应用程序的默认Servlet来处理。

Ø  所有其他的字符被用于精确匹配,例如:

<url-pattern>/login</url-pattern>

如果请求/login,那么将由映射了URL样式/login的Servlet来处理。

 所以,为什么定义”/*.action”这样一个看起来很正常的匹配会错?因为这个匹配即属于路径映射,也属于扩展映射,导致容器无法判断。

下面我们看几个请求映射的例子,如表3-2和表3-3所示。

表3-2  Servlet映射

映射的URL

对应的Servlet

/hello

servlet1

/bbs/admin/*

servlet2

/bbs/*

servlet3

*.jsp

servlet4

/

servlet5

表3-3  实际请求映射的结果

去掉上下文路径的剩余路径

处理请求的Servlet

/hello

servlet1

/bbs/admin/login

servlet2

/bbs/admin/index.jsp

servlet2

/bbs/display

servlet3

/bbs/index.jsp

servlet3

/bbs

servlet3

/index.jsp

servler4

/hello/index.jsp

servlet4

/hello/index.html

servlet5

/news

servlet5

Tomcat在%CATALINA_HOME%\conf\web.xml文件中配置了默认的Servlet,配置代码如下:

<servlet>

    <servlet-name>default</servlet-name>

    <servlet-class>

         org.apache.catalina.servlets.DefaultServlet</servlet-class>

    <init-param>

        <param-name>debug</param-name>

        <param-value>0</param-value>

    </init-param>

    <init-param>

        <param-name>listings</param-name>

        <param-value>true</param-value>

    </init-param>

    <load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

    <servlet-name>default</servlet-name>

    <url-pattern>/</url-pattern>

</servlet-mapping>

%CATALINA_HOME%\conf\web.xml文件中的配置将被运行在同一个Tomcat实例中的所有Web应用程序所共享。

 

分享到:
评论

相关推荐

    javax.servlet.jar下载

    javax.servlet.Filter.class javax.servlet.FilterConfig.class javax.servlet.ServletRequestAttributeListener.class javax.servlet.ServletRequestAttributeEvent.class javax.servlet.GenericServlet.class ...

    Servlet与jsp与Filter的使用

    Servlet与jsp与Filter的使用

    Servlet概述和入门.pdf

    1、Servlet 是 JavaEE的规范之一。(规范就是接口) 2、Servlet是 三大组件之一。 JavaWeb 三大组件分别是:**Servlet 程序、Filter 过滤器、Listener 监听器**。 3、Servlet 是运行在服务器上的一个 java 小程序,...

    JavaEE综合练习项目-快递e栈源码

    JavaEE综合练习项目,涉及:html、css、js、Jquery、bootstrap、layui、layer、ajax、mysql、tomcat、servlet、filter、listener、jsp和公有云服务器。

    基于JavaEE的网上订餐系统

    实现订餐商品的展示、选择和下单

    毕业设计: 心理咨询预约管理系统(javaEE)

    毕业设计: 心理咨询预约管理系统(javaEE) 项目工程文件 src bean是数据库表对应实体类 model包下分别是dao层和service层 servlet下的是公共模块部分,admin,client,doctor分别是三个端对应的控制器 test是...

    jsp+servlet+EL(MVC项目)酒店预约完整项目

    javaEE 开发的酒店预约系统分为前台和后台 主要技术jquery+jsp+servlet+EL 开发环境:eclipse+mysql5.5+jdk1.8 后台采用bootstrap框架 数据库mysql5.5 采用MVC三层开发设计模式 主要包名如下 controller dao dao.impl...

    基于JavaEE的网上书店

    实现网上书店商品信息的浏览下单付款

    javaee笔记

    EL表达式、Filter)、mysql、jdbc、文件上传与下载、Ajax、jQuery、struts2、struts2高级、spring、hibernate、shiro、springmvc、mybatis、webservice、maven、svn、activiti、lucene、linuxPPT

    JavaEE开发的颠覆者SpringBoot实战[完整版].part2

    7.3.3 注册Servlet、Filter、Listener 186 7.4 Tomcat 配置 187 7.4.1 配置Tomcat 187 7.4.2 代码配置Tomcat 188 7.4.3 替换Tomcat 190 7.4.4 SSL 配置 191 7.5 Favicon 配置 196 7.5.1 默认的Favicon 196 7.5.2 ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    7.3.3 注册Servlet、Filter、Listener 186 7.4 Tomcat 配置 187 7.4.1 配置Tomcat 187 7.4.2 代码配置Tomcat 188 7.4.3 替换Tomcat 190 7.4.4 SSL 配置 191 7.5 Favicon 配置 196 7.5.1 默认的Favicon 196 7.5.2 ...

    Java™ Servlet 规范.

    2.3.1 加载和实例化 ................................................................................................................................16 2.3.2 初始化 ........................................

    在线书店JavaEE

    用JavaEE实现的在线书店,其中实现了jsp servlet mvc filter等多种技术,是一个很好的例子

    心理咨询预约管理系统(javaEE)-毕业设计.zip

    心理咨询预约管理系统(javaEE)-毕业设计.zip MVC模式,普通Servlet控制器,jsp视图,前台Bootstrap 工具版本:mysql5.7,JDK1.8,Tomcat8.5 主要功能模块 分为三个端:管理员、来访者(需要预约的人),咨询师 ...

    160G!全新升级版 JAVAEE云计算全栈就业班课程 完美试炼JAVAEE企业级云计算应用

    ├&lt;阶段1 java语言基础&gt; ...│ ├&lt;11-Filter和Listener&gt; │ ├ │ ├和JSON&gt; │ ├ │ ├基础&gt; │ ├旅游网&gt; │ ├ │ └ ├&lt;阶段3.1 Mybatis·&gt; │ ├课程介绍及环境搭建&gt; │ ├入门案例&gt; │ ├&lt;03.

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    7.3.3 注册Servlet、Filter、Listener 186 7.4 Tomcat 配置 187 7.4.1 配置Tomcat 187 7.4.2 代码配置Tomcat 188 7.4.3 替换Tomcat 190 7.4.4 SSL 配置 191 7.5 Favicon 配置 196 7.5.1 默认的Favicon 196 7.5.2 ...

    JavaEE求职简历-姓名-JAVA开发工程师-范文.doc

    熟练掌握java基础,包括面向对象、多线程、IO流、UDP/TCP、socket、文件上传下载、XML解析、JSON解析、servlet、filter、listener、HTTP协议等等; 熟练掌握 使用jdbc标准连接数据库,掌握DDL、DML、DCL、DQL和...

    Servlet3.1规范(最终版) PDF

    16 2.3.1 加载和实例化 ................................................................................................................................16 2.3.2 初始化 ....................................

    java及javaweb编程教程、ssm、商城实战项目、how2j网站的全站教程、包含从前端到后端全栈技术

    包括spring、spring mvc、mybatis、spring+mybatis、SSM、springboot、javaee 商城项目、ssm商城项目、springboot商城项目,工具和中间件,包括maven、git、Intellij IDEA、Redis、WebSocket、shiro、quartz、...

    JAVA EE 开发手册.CHM

    JavaEE是一个开放的、 基于标准的平台,用以开发、部署和管理N层结构、面向Web的,以服务器为中心的企业级应用。 JavaEE的具有可扩展性、性能和可靠性。 手册结构目录如下: 1、HTP协议 2、Servlet1 之基础介绍 ...

Global site tag (gtag.js) - Google Analytics