`
zhou695105338
  • 浏览: 21000 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Servlet的url匹配以及url-pattern详解

    博客分类:
  • jsp
阅读更多

Servlet的url匹配以及url-pattern详解

Servlet是J2EE开发中常用的技术,使用方便,配置简单,老少皆宜。估计大多数朋友都是直接配置用,也没有关心过具体的细节,今天遇到一个问题,上网查了servlet的规范才发现,servlet中的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文件中,以下语法用于定义映射:

l 以”/’开头和以”/*”结尾的是用来做路径映射的。

l 以前缀”*.”开头的是用来做扩展映射的。

l “/” 是用来定义default servlet映射的。

l 剩下的都是用来定义详细映射的。比如: /aa/bb/cc.action

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

分享到:
评论

相关推荐

    url-pattern的3种写法

    ### URL-Pattern的三种写法详解 在Web应用开发中,`web.xml`配置文件扮演着极其重要的角色,其中`<url-pattern>`元素用于定义Servlet的映射规则,即URL模式。通过不同的URL模式,我们可以精确地控制Servlet如何被...

    详解servlet的url-pattern匹配规则

    要注意的是,Servlet 2.5版本开始,一个Servlet可以对应多个`<url-pattern>`,每个`<url-pattern>`定义了一个独立的匹配规则。 总的来说,理解Servlet的URL-Pattern匹配规则对于正确配置和管理Servlet至关重要,它...

    tomcat关于配置servlet的url-pattern的问题思路详解

    - `/`:代表根路径,匹配URL的开头部分,但不包括任何后续内容。这意味着如果设置`<url-pattern>/</url-pattern>`,那么Servlet将处理所有以`/`开头的请求,例如`/login`和`/products`。然而,它不匹配包含更具体...

    java笔记jsp,servlet.docx

    当`<url-pattern>`配置为`<url-pattern>/</url-pattern>`时,这个Servlet被称为缺省Servlet。任何未在`web.xml`中找到匹配的`servlet-mapping`的URL请求都会被转发给缺省Servlet处理。在Tomcat的`conf/web.xml`中,...

    springmvc静态资源访问

    该标签告诉Spring MVC框架,如果找不到任何匹配的处理器,则将请求转发给Web服务器的默认Servlet。这意味着对于那些未被Spring MVC控制器处理的URL,如静态资源的URL,将会由Web容器直接处理。例如: ```xml ...

    网站源代码

    - `<url-pattern>`:指定访问该Servlet的URL路径。 #### 四、具体Servlet的功能解析 1. **注册功能**: - Servlet名称:`register` - 实现类:`myservlet.control.HandleRegister` - URL映射:`/helpRegister`...

    ssm整合文档。看着文档自己操作,很简单

    这里需要注意的是,`<servlet-name>`必须与`<servlet>`元素中的`servlet-name`相匹配。 ##### 3. 加载Spring配置文件 为了让Spring能够正确加载配置文件,我们需要在`web.xml`中添加监听器来加载Spring的上下文...

    Java Servlet的注解配置与生命周期详解.docx

    当服务器接收到请求时,它会解析URL,查找匹配的`<url-pattern>`,然后根据`<servlet-class>`加载并实例化对应的Servlet类。这个过程包括加载字节码文件到内存,创建Servlet对象,以及调用`init()`方法进行初始化。 ...

    web.xml配置文件详解

    <url-pattern>/myservlet</url-pattern> </servlet-mapping> <!-- 配置会话超时 --> <session-config> <session-timeout>30</session-timeout> </session-config> <!-- 欢迎页面 --> <welcome-file-list> ...

    Tomcat(二) Tomcat实现:Servlet与web.xml介绍 以及 源码分析Tomcat实现细节1

    【Servlet与web.xml详解】 Servlet是Java EE标准中的一部分,用于构建动态Web应用程序。Tomcat作为Servlet容器,它遵循Servlet规范来运行和管理Servlet。在Servlet中,有以下几个关键概念: 1. **Listener(监听器...

    struts2和servlet的共存问题

    ### Struts2与Servlet共存问题详解 #### 一、问题背景 在Java Web开发中,Struts2框架因其简洁的MVC模式和强大的插件系统而被广泛使用。但在某些场景下,开发者可能需要同时使用Struts2和其他Servlet技术(如...

    servlet过滤器详解

    ### Servlet过滤器详解 #### 一、Filter的基本概念与作用 **过滤器(Filter)**是一种Web组件,它能够在客户端请求到达目标资源(如Servlet、JSP页面等)之前进行预处理,以及在响应返回客户端之前进行后处理。...

    servlet+mysql的jndi配置

    这里需要注意`servlet-name`和`servlet-class`必须与实际编写的Servlet类相匹配,而`url-pattern`定义了访问该Servlet的URL模式。 #### 三、在Servlet中使用数据库连接池 最后,我们来看看如何在Servlet中利用...

    FCKeditor配置

    【FCKeditor配置详解】 FCKeditor是一款流行的开源富文本编辑器,常用于网页内容的编辑和管理。本文将深入探讨如何将FCKeditor 2.4版本集成到SSH(Struts2、Hibernate、Spring)框架中,并解决可能出现的问题。 **...

    JSP配置文件解释

    这里,`ServletName`是Servlet的别名,`ServletClass`是Servlet类的全限定名,`/path/*`是匹配的URL模式。 ### 4. 过滤器配置 ```xml <filter-name>FilterName</filter-name> <filter-class>...

    J2ee中的路径问题(word文档)

    本文将深入探讨J2EE环境中路径的基本概念及其应用方法,包括相对路径和绝对路径的定义、获取路径的方法,以及在JSP和Servlet中路径使用的差异等。 #### 二、基本概念 ##### 2.1 路径类型 在J2EE中,路径主要分为...

    javaSSH框架搭建配置

    ### Java SSH框架搭建配置详解 #### 一、概述 SSH框架是Java Web开发中的一个非常流行的组合,这里的SSH指的是Spring、Struts以及Hibernate三个开源框架的首字母缩写。这三个框架各自解决不同的问题:Spring主要...

Global site tag (gtag.js) - Google Analytics