`
NOthingAj
  • 浏览: 16439 次
社区版块
存档分类
最新评论

servlet的<url-pattern>匹配问题

阅读更多

这个问题。。。整整折磨了我两天。。。

 

终于把它搞明白了!

 

在我的web.xml下,如果代码是:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <servlet>
        <servlet-name>Ch1Servlet</servlet-name>
        <servlet-class>demo.Ch1Servlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Ch1Servlet</servlet-name>
        <url-pattern>/Ch1Servlet</url-pattern>
    </servlet-mapping>
</web-app>

上面的配置信息,其中<servlet>标签首先配置声明一个servlet,包括servlet的名字和对应的Java类名。

其中<servlet-mapping>标签声明了与该servlet相应的匹配规则,每个<url-pattern>标签代表1个匹配规则。

 

当浏览器发起一个url请求后,该请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如url是http://localhost:8080/demo/Ch1Servlet,其应用上下文是demo,容器会将http://10.43.11.143/demo去掉,剩下的Ch1Servlet部分拿来做servlet的映射匹配。这个映射匹配过程是有优先顺序的(具体的优先顺序规则后面介绍),而且当有一个servlet匹配成功以后,就不会去理会剩下的servlet了。

 

 

精确匹配:

<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/kata/detail.html</url-pattern>
    <url-pattern>/demo.html</url-pattern>
    <url-pattern>/table</url-pattern>
</servlet-mapping>

当在浏览器中输入如下几种url时,都会被匹配到该servlet

http://10.43.11.143/myapp/kata/detail.html
http://10.43.11.143/myapp/demo.html
http://10.43.11.143/myapp/table

 

注意:

http://10.43.11.143/myapp/table/ 是非法的url,不会被当作http://10.43.11.143/myapp/table识别

另外上述url后面可以跟任意的查询条件,都会被匹配,如

http://10.43.11.143/myapp/table?hello 这个请求就会被匹配到MyServlet。

 

 

扩展名匹配

<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>*.jsp</url-pattern>
</servlet-mapping>

则任何扩展名为jsp(文件名和路径任意)的url请求都会匹配,比如下面的url都会被匹配

http://10.43.11.143/myapp/demo.jsp
http://10.43.11.143/myapp/test.jsp
 
 
路径匹配
<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/kata/*</url-pattern>
</servlet-mapping>

则请求的ulr只要前面(myapp之后)的路径是/kata,而后面的路径可以任意。比如下面的url都会被匹配。
http://10.43.11.143/myapp/kata/demo.html
http://10.43.11.143/myapp/kata/test.jsp
http://10.43.11.143/myapp/kata/test/detail.html

http://10.43.11.143/myapp/kata/action

http://10.43.11.143/myapp/kata/action/

注意:路径和扩展名匹配无法同时设置,比如下面的三个<url-pattern>都是非法的,如果设置,启动tomcat服务器会报错。

<url-pattern>/kata/*.jsp</url-pattern>

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

<url-pattern>he*.jsp</url-pattern>

 

另外注意:<url-pattern>/aa/*/bb</url-pattern>
这个是精确匹配,url必须是 /aa/*/bb,这里的*不是通配的含义

 

 

任意url匹配:

如果<url-pattern>配置成如下两种的任意一种

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

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

则所有的url都可以被匹配上。其中/*是路径匹配,只是路径就是/。

 

转载自:https://www.cnblogs.com/51kata/p/5152400.html

分享到:
评论
1 楼 jstl1point0 2018-08-25  
j2ee web服务器 servlet的知识,地址映射,

相关推荐

    url-pattern的3种写法

    在Web应用开发中,`web.xml`配置文件扮演着极其重要的角色,其中`&lt;url-pattern&gt;`元素用于定义Servlet的映射规则,即URL模式。通过不同的URL模式,我们可以精确地控制Servlet如何被客户端请求所调用。本文将详细介绍`...

    servlet url-pattern

    &lt;url-pattern&gt;/pathPattern&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; ``` 这里,`ServletName`是Servlet的逻辑名称,而`/pathPattern`则是URL-Pattern,它决定了用户如何通过浏览器访问该Servlet。URL-Pattern可以有多种...

    URL-pattern解析

    &lt;url-pattern&gt;/servlet/HelloServlet&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; ``` 这意味着所有以`/servlet/HelloServlet`开头的请求都会被映射到名为`HelloServlet`的Servlet。 其次,表单提交的路径`action`属性也会...

    servlet的url-pattern匹配规则详细描述(小结)

    Servlet的URL-Pattern匹配规则是Web应用程序中Servlet和Filter配置的核心部分,它决定了Servlet或Filter如何响应特定的HTTP请求。以下是对这些匹配规则的详细解释: 1. **精确匹配** - 在`&lt;url-pattern&gt;`中指定的...

    [jspSmartUpload]------------>jspSmartUpload上传中文文件名 乱码问题

    &lt;url-pattern&gt;/upload&lt;/url-pattern&gt; &lt;init-param&gt; &lt;param-name&gt;CharacterEncoding&lt;/param-name&gt; &lt;param-value&gt;UTF-8&lt;/param-value&gt; &lt;/init-param&gt; &lt;/servlet-mapping&gt; ``` 2. **在Servlet中设置**:在Servlet...

    详解servlet的url-pattern匹配规则

    Servlet的URL-Pattern匹配规则是Servlet配置中至关重要的一部分,它决定了Servlet如何响应特定的HTTP请求。以下是关于这个主题的详细解释: 1. **精确匹配**: 这是最直观的匹配方式,`&lt;url-pattern&gt;`中的配置必须...

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

    当设置`&lt;url-pattern&gt;/&lt;/url-pattern&gt;`时,Servlet将捕获所有不被其他更具体`url-pattern`处理的请求。这通常用于设置一个默认Servlet,处理静态资源或者提供应用程序的主页。 总结来说,正确配置Servlet的`url-...

    java-servlet-连接mysql-数据库.docx

    &lt;url-pattern&gt;/dbconnect&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; &lt;/web-app&gt; ``` 4. **编写Java代码**: 在Servlet的`doGet`或`doPost`方法中,你可以通过JNDI(Java Naming and Directory Interface)查找之前在...

    urlrewrite(把jsp变成HTML).(个人总结综合教程,适合新入门的朋友阅读)

    &lt;url-pattern&gt;/*&lt;/url-pattern&gt; &lt;/filter-mapping&gt; ``` 这里的`/*`意味着所有的请求都将通过此过滤器。接下来是`urlrewrite.xml`配置文件,其中定义了具体的重写规则: ```xml &lt;rule&gt; &lt;from&gt;^/guide/([a-z]+)/(...

    struts2和servlet的共存问题

    - 添加新的映射规则,例如只处理`.action`后缀的请求:`&lt;url-pattern&gt;*.action&lt;/url-pattern&gt;`。 - 可根据需要添加其他映射规则,比如处理JSP页面:`&lt;url-pattern&gt;*.jsp&lt;/url-pattern&gt;`。 - **优点**:配置简单,...

    Servlet的WEB工程配置文件说明

    &lt;url-pattern&gt;/&lt;/url-pattern&gt;//˴Ϊservletȡıǰϡ/;//hello(---ĿĿ¼/hello) &lt;/servlet-mapping&gt; ``` - **`&lt;servlet-name&gt;`**:这里再次出现的`servlet-name`应该与上面`servlet`元素中定义的名称相匹配,以便...

    java笔记jsp,servlet.docx

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

    servlet 正则表达式

    &lt;url-pattern&gt;*.jsp&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; ``` 更复杂的情况下,你可以使用正则表达式: ```xml &lt;servlet-mapping&gt; &lt;servlet-name&gt;MyServlet&lt;/servlet-name&gt; &lt;url-pattern&gt;^/path/(.*).jsp$&lt;/...

    jsp servlet中的过滤器Filter配置总结

    &lt;url-pattern&gt;/*&lt;/url-pattern&gt; &lt;/filter-mapping&gt; ``` 2. 过滤特定类型的文件: 如果只想过滤特定扩展名的文件,如HTML文件,可以将`&lt;url-pattern&gt;`设置为`*.html`。如果要过滤JSP文件,就改为`*.jsp`。例如,...

    Servlet注意点

    &lt;url-pattern&gt;/myservice&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; &lt;/web-app&gt; ``` 这段配置表示名为"MyServlet"的Servlet对应于`com.example.MyServlet`类,并且可以通过`/myservice` URL访问。 三、Servlet生命周期 ...

    Servlet参考手册.zip

    3. **Servlet映射**:通过`&lt;url-pattern&gt;`标签,我们可以将Servlet映射到特定的URL模式上,如上述示例中的`/myservice`。还可以使用通配符如`*.do`来匹配多种请求路径。 4. **HttpServletRequest与...

    servlet模拟器

    &lt;url-pattern&gt;/myservice&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; &lt;/web-app&gt; ``` 这段配置表示有一个名为"MyServlet"的Servlet,它的实现类是`com.example.MyServlet`,并且当用户访问`/myservice`路径时,服务器会...

    servlet相关资料介绍.zip

    &lt;url-pattern&gt;/myservice&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; ``` 这样,当请求URL匹配`/myservice`时,服务器就会调用`MyServlet`。 5. **Servlet的多线程问题** 由于一个Servlet实例可能会同时服务于多个请求...

    servlet之Filter使用范例--登陆验证

    &lt;url-pattern&gt;/protected/*&lt;/url-pattern&gt; &lt;/filter-mapping&gt; ``` 这里的`/protected/*`表示所有以`/protected/`开头的URL都将被LoginFilter拦截。 3. **处理登录与登出**:当用户成功登录后,可以在Session中设置...

    基于servlet的用户登录

    &lt;url-pattern&gt;/login&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; &lt;/web-app&gt; ``` 3. **处理请求**:在doPost()方法中,从request对象中获取用户提交的登录信息,如用户名和密码。通常,这些信息可以通过request....

Global site tag (gtag.js) - Google Analytics