在 web.xml 中 < servlet-mapping >和< filter-mapping >都有< url-pattern >配置项 它们的作用都是匹配一次请求是否会执行这个 Servlet 文中介绍了一个请求最终被分配到一个 Servlet 中是通过 org.apache.tomcat.util.http.Mapper 类完成的,此类会根据请求的 URL 匹配在每个 Servlet 中配置的< url-pattern Filter 的 url-pattern 匹配是在创建 ApplicationFilterChain 对象时进行的,它会把所有定义的 Filter 的 url-pattern 与当前的 URL 匹配,若匹配成功就将这个 Filter 保存到ApplicationFilterChain 的 filters 数组中,然后在 FilterChain 中依次调用 在 web.xml 加载时,会首先检查< url-pattern > /a/.htm in Servletmapping*异常 < url-pattern>的解析规则,对 Servlet 和 Filter 是一样的,匹配的规则有如下三种 精确匹配:如/foo.htm
servlet和filter中的url-pattern有一些文章在里面的,总结了一些东西,以免遇到问题又要浪费时间。 例子:比如servletA 的url-pattern为 /test,servletB的url-pattern为 /* ,这个时候,如果我访问的url为http://localhost/test ,这个时候容器就会先进行精确路径匹配 例子:servletA的url-pattern为/test/*,而servletB的url-pattern为/test/a/*,此 时访问http://localhost/test/a时,容器会选择路径最长的 例子:servletA的url-pattern:*.action 4. 如果前面三条规则都没有找到一个servlet,容器会根据url选择对应的请求资源。 根据这个规则表,就能很清楚的知道servlet的匹配过程,所以定义servlet的时候也要考虑url-pattern的写法,以免出错。
1 前言 关于servlet的路径映射有三种配置方法,通过配置xml文件中的url-pattern来实现,其按优先级排序分别为:完全路径匹配、目录匹配、扩展名匹配。 >/a</url-pattern> </servlet-mapping> 访问结果为: ? >/aaa/*</url-pattern> </servlet-mapping> 其访问结果为: ? >*.do</url-pattern> </servlet-mapping> 访问结果为: ? >/aaa</url-pattern> </servlet-mapping> <servlet> <servlet-name>bServlet</servlet-name>
学习Spring的时候,在配置web.xml的时候,把url-pattern 配置成/*,启动项目后去访问自己的Controller总是报404.检查了很多发现资源是存在的,配置的地址也没有问题,为什么会出现 最后发现是自己配置的 url-pattern 不对! 现整理一下: (1):在使用springmvc时,都会在web.xml中配置一个dispatchservlet,如下: <! >/</url-pattern> </servlet-mapping> (2):配置spring的配置文件 <! >/</url-pattern> 会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url ②:<url-pattern>/*</url-pattern> 会匹配所有url (4):总结 < url-pattern > / < url-pattern > /* 能匹配所有请求URL,会匹配到*.jsp,会出现返回jsp视图时再次进入spring的DispatcherServlet
SpringMVC3中关于url-pattern设成"/"后,CSS等资源的访问会报错:No mapping found for HTTP request with URI。
Servlet入门 - Servlet执行原理、Servlet路径的配置url-pattern的三种方式 前言 在上一章中,我们已经掌握了使用 web.xml 配置 Servlet 路径,以及 使用 注解的配置路径方式 下面来看看 Servlet 执行原理,以及配置 url-pattern的三种方式。 通过上述流程图我们重点需要掌握如下几个点: Servlet对象是由服务器创建(反射) request与response对象也是由tomcat服务器创建 service()方法也是服务器调用的 Servlet路径的配置url-pattern
http://blog.csdn.net/sun9528/article/details/72423112】的写法: ①完全匹配:以“/”开头,以字母(非“*”)结束 如:上面提到的本项目中:<url-pattern >/servlet/addBookServlet</url-pattern> ②目录匹配:以“/”开头且以“/*”结尾 如:<url-pattern>/test/*</url-pattern> <url-pattern>/*</url-pattern> ③扩展名匹配:以“*.”开头,以扩展名结束 如:<url-pattern>*.do</url-pattern> ④“/”用来表明对应的Servlet /servlet-class> </servlet> <servlet-mapping> <servlet-name>AddBookServlet</servlet-name> <url-pattern >/servlet/addBookServlet</url-pattern> </servlet-mapping> 当点击了页面提交表单的命令之后,一个请求发送到servlet容器,
所以想要更好的书写规范有用的路径代码 需要对路径有一个清晰地认知 路径基本上分三类 客户端路径 服务端路径 其他 路径相关的操作类型 超链接 表单 重定向 转发 包含 <url-pattern ---- 其他 url-pattern <url-pattern>必须使用“/”开头,并且相对的是当前应用。
--url-pattern>/jsp/*</url-pattern--> <url-pattern>*.do</url-pattern> <url-pattern>/ app</url-pattern> <url-pattern>/ui/*</url-pattern> <url-pattern>*.cc</url-pattern> <url-pattern>*.ls</url-pattern> <url-pattern>/SoftwareFileUploader.up</url-pattern> <url-pattern>/WOResolutionFileUploader.up</url-pattern> <url-pattern>*.json</url-pattern> <url-pattern>*.jsp</url-pattern> <url-pattern>/servlet/*</url-pattern> <url-pattern>/ze/*
>/*</url-pattern> </filter-mapping> <! -- 静态文件 --> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern > <url-pattern>*.png</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</ >default</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping> <servlet-mapping> < > <servlet-name>default</servlet-name> <url-pattern>*.svg</url-pattern> </servlet-mapping> <!
在 web.xml 中加入 <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern >/assets/*</url-pattern> <url-pattern>/js/*</url-pattern> <url-pattern>*.js</url-pattern > <url-pattern>*.jpg</url-pattern> <url-pattern>*.gif</url-pattern> <url-pattern >*.png</url-pattern> <url-pattern>*.css</url-pattern> </servlet-mapping> 或者在spring的配置文件中加入
> <url-pattern>*.gif</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name >default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping > <servlet-name>default</servlet-name> <url-pattern>*.png</url-pattern> </servlet-mapping > <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern >*.html</url-pattern> </servlet-mapping>
<url-pattern>*.png</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name > <url-pattern>*.gif</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default </servlet-name> <url-pattern>*.ico</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name >default</servlet-name> <url-pattern>*.gif</url-pattern> </servlet-mapping> <servlet-mapping> > <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping>
-- <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping > <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping > <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.gif</url-pattern> </servlet-mapping > <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping > <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.png</url-pattern> </servlet-mapping
> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name >default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping > <servlet-name>default</servlet-name> <url-pattern>*.JPG</url-pattern> </servlet-mapping >default</servlet-name> <url-pattern>*.PNG</url-pattern> </servlet-mapping> <servlet-mapping > <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.GIF</url-pattern
标签<url-pattern> <url-pattern>是我们用Servlet做Web项目时需要经常配置的标签,例: <servlet> <servlet-name>index</servlet-name name=admin&pass=admin 这是其中一种明文表示的方式 标签<url-pattern>中*的使用 我们知道在写<url-pattern>时有一种通配符的使用写法,即* 1.当我使用<url-pattern <url-pattern>/index</url-pattern> <url-pattern>/*</url-pattern> 上边我们已经说过,/*可以匹配所有的请求,而/index也可以匹配我们的URL >/index/login</url-pattern>匹配http://localhost:8080/we/index/login <url-pattern>/index/logout</url-pattern >*.do</url-pattern>来过滤请求, 这样如果我们在页面中的请求中添加后缀名.do就可以避免对静态资源的过滤了,也就不需要对静态资源做特殊处理了 注:<url-pattern>/</url-pattern
> <url-pattern>*.jsp</url-pattern>[崔4] <url-pattern>*.jspx</url-pattern> </servlet-mapping <url-pattern>/index</url-pattern> <url-pattern>/*</url-pattern> 上边我们已经说过,/*可以匹配所有的请求,而/index也可以匹配我们的URL >/index/login</url-pattern>匹配http://localhost:8080/we/index/login <url-pattern>/index/logout</url-pattern >*.do</url-pattern>来过滤请求, 这样如果我们在页面中的请求中添加后缀名.do就可以避免对静态资源的过滤了,也就不需要对静态资源做特殊处理了 注:<url-pattern>/</url-pattern >和<url-pattern>/*</url-pattern>效果是一样的
> <url-pattern>/resources/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name> default</servlet-name> <url-pattern>/upload/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.png</url-pattern> </servlet-mapping> <servlet-mapping > <servlet-name>default</servlet-name> <url-pattern>*.gif</url-pattern> </servlet-mapping> <servlet-mapping > <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> 下面是使用
-- 静态文件 --> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern > <url-pattern>*.png</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</ servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name >default</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping> <servlet-mapping> < > <servlet-name>default</servlet-name> <url-pattern>*.svg</url-pattern> </servlet-mapping> <!
>change-headers-filter</filter-name> <url-pattern>*.png</url-pattern> </filter-mapping> --> </filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name > <filter-name>csrf-filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>plugins-filter</filter-name> <url-pattern>/*</url-pattern> </ >/loginEntry</url-pattern> <!