zoukankan      html  css  js  c++  java
  • Servlet-xml配置简介以及url-pattern简介

    编写一个Servlet是需要实现Servlet接口,或者继承HttpServlet。

    一个已经注册的Servlet可以被多次映射,如下图所示

    或者多个url-pattern放在同一个servlet-mapping中,如下

    每个<url-pattern>标签代表1个匹配规则。

    无论我访问的是http://localhost:8080/Demo1还是http://localhost:8080/ouzicheng。我访问的都是Demo1。

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

    注意Filter的匹配规则与servlet一样,但对于filter,不会像servlet那样只匹配一个servlet,因为filter的集合是一个链,所以只会有处理的顺序不同,而不会出现只选择一个filter。Filter的处理顺序和filter-mapping在web.xml中定义的顺序相同。 

    Servlet映射的URL可以使用通配符(分为精确匹配、路径匹配、扩展名匹配)

    通配符有两种格式:

    1. *.扩展名

    2. 正斜杠(/)开头并以“/*”结尾。

     精确匹配如下

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

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

    扩展名匹配如下

    路径匹配如下

     

    注意:路径和扩展名匹配无法同时设置,比如下面的三个<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都可以被匹配上。其中/*是路径匹配,只是路径就是/。

    优先顺序

    当一个url与多个servlet的匹配规则可以匹配时,则按照 “ 精确路径 > 最长路径>扩展名”这样的优先级匹配到对应的servlet。举例如下:

    例1:比如servletA 的url-pattern为 /test,servletB的url-pattern为 /* ,这个时候,如果我访问的url为http://localhost/test ,这个时候容器就会先进行精确路径匹配,发现/test正好被servletA精确匹配,那么就去调用servletA,不会去管servletB。

    例2:比如servletA的url-pattern为/test/*,而servletB的url-pattern为/test/a/*,此时访问http://localhost/test/a时,容器会选择路径最长的servlet来匹配,也就是这里的servletB。 

    例3: 比如servletA的url-pattern:*.action ,servletB的url-pattern为 /* ,这个时候,如果我访问的url为http://localhost/test.action,这个时候容器就会优先进行路径匹配,而不是去匹配扩展名,这样就去调用servletB。

  • 相关阅读:
    EF工作流程
    EF简单的CodeFirst示例(自己创建数据库,不使用数据迁移)
    VS2017连接MySQL数据库
    Entity Framework简介
    ADO.NET
    linq连接
    linq语法
    linq和转换运算符
    学习MVC之前必须掌握的c#知识
    java 中 System
  • 原文地址:https://www.cnblogs.com/hongchengshise/p/10371358.html
Copyright © 2011-2022 走看看