Spring mvc 在web.xml中的url-pattern配置
来源:互联网 发布:matlab求矩阵的相角 编辑:程序博客网 时间:2024/06/09 00:27
<servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
springMVC DispatcherServlet请求映射配置 :
1. "/" 则Spring MVC将捕获Web容器所有的请求,
*.jsp 请求 不会进入spring的 DispatcherServlet 处理,
静态资源的请求(html/js/css/img),Spring MVC会将它们当成一个普通请求处理,因此找不到对应处理器将导致错误(404)。
2. "/* " 则Spring MVC将捕获Web容器所有的请求, 请求controller 会出现返回jsp视图时 拦截*.jsp, *.jspx的请求,再次进入spring的DispatcherServlet 处理,导致找不到对应的controller所以报404错。 静态资源的请求(html/js/css/img),Spring MVC会将它们当成一个普通请求处理,因此找不到对应处理器将导致错误(404)。
DispatcherServlet配置为’/’, 为什么不拦截*.jsp, *.jspx.的请求?
前面说的当DispatcherServlet配置为’/’, 将会覆盖default servlet, 将会处理所有其他Servlet都不处理的访问请求. 所以这里不拦截拦截.jsp, .jspx.的请求, 一定有其他地方拦截了该请求, 但是仔细查找web.xml并没有发现其他的servlet啊!那一定是在容器中定义的啦~
果不其然, 在%TOMCAT_HOME%/conf/web.xml中继承过来的JspServlet会处理该请求.
<servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <load-on-startup>3</load-on-startup></servlet><servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.jspx</url-pattern></servlet-mapping>
从该web.xml也看到DefaultServlet的定义了(文件中总共就定义了这两个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>false</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>
这也就是为什么我们直接访问不在WEB-INF的jsp, 可以直接找到并解析的原因了.
我们将test.jsp拷贝一份到webapp下, 直接访问/test.jsp, 访问到jsp中的内容了.并未出现404, 从而验证了我们的猜想.
静态资源的问题
如果不对js,css和图片这种静态资源进行映射的话,DispatcherServlet就找不到,造成所有的静态资源都访问不了。这个问题有两种解决办法:
方法1.采用
在springMVC-servlet.xml中配置后,会在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求交回Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。
方法2.采用spring配置<mvc:resources location="存放静态文件的目录路径" mapping="/目录/**" />
注意:(两个”*”)指location的值所表示的目录以及所有子目录
<mvc:resources /> 由Spring MVC框架自己处理静态资源,而且这种方式可以映射WEB-INF目录 <mvc:resources location="/,classpath:/META-INF/static/" mapping="/resources/**"/>
WEB-INF是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录,页面放在WEB-INF目下面,这样可以限制访问,提高安全性.如JSPye页面。 如果客户端想访问jsp页面,可以请求controller 来分发到页面。 由于WEB-INF下对客户端是不可见的,所以相关的资源文件,如css,javascript和图片等资源文件一般不放在WEB-INF下。
- Spring mvc 在web.xml中的url-pattern配置
- spring mvc中web.xml里面url-pattern匹配规则
- 主讲spring mvc 在web.xml中的配置
- web.xml中的url-pattern
- web.xml中的url-pattern
- web.xml中的url-pattern
- web.xml中的url-pattern
- web.xml中的url-pattern
- web.xml classes:配置 /url-pattern 配置
- web.xml 非法<url-pattern>配置
- web.xml中【url-pattern的配置】
- web.xml中的url-pattern映射规则
- web.xml中的url-pattern映射规则
- Web.xml中的url-pattern详解
- web.xml中的url-pattern映射规则
- web.xml中的url-pattern照射规则
- web.xml中的url-pattern映射规则
- web.xml中的url-pattern映射规则
- string7
- javascript:;与javascript:void(0)
- mysql学习笔记
- android seekbar的用法
- 读书笔记《Effective C++》条款27:尽量少做转型动作
- Spring mvc 在web.xml中的url-pattern配置
- 你知道吗?为何C语言函数调用要堆栈,而汇编却不需要?
- 蓝桥杯训练:合并石子
- 3
- usaco5.4.3 Telecowmunication
- 简明C语言教程(一)前言
- 并查集--求解等价问题
- Source Insight中的条件编译
- D -棋盘问题