当前位置: 首页 > 工具软件 > Pattern Web > 使用案例 >

web.xml中配置访问资源URL<url-pattern>/</url-pattern>时无法访问.html、.jsp、.js、.css等静态资源时的解决方案

司马高昂
2023-12-01
在web应用中,我们在web.xml配置URL路径问题时,经常这样配置:
  1. <servlet-mapping>  
  2.     <servlet-name>spring-MVC</servlet-name>  
  3.     <url-pattern>/</url-pattern>  
  4. </servlet-mapping>  
<servlet-mapping>
	<servlet-name>spring-MVC</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>

当然也存在这样的配置:

  1. <servlet-mapping>  
  2.     <servlet-name>spring-MVC</servlet-name>  
  3.     <url-pattern>*.do</url-pattern>   
  4. </servlet-mapping>  
<servlet-mapping>
	<servlet-name>spring-MVC</servlet-name>
 	<url-pattern>*.do</url-pattern> 
</servlet-mapping>
两种配置的区别就是第一种,当我们访问任意URL资源时,都被名为spring-MVC的servlet来处理,例如: localhost:8080/test/login。第二种则是仅仅是后缀为.do的URL才会被spring-MVC处理,例如:localhost:8080/test/login.do

但是如果我们使用第二种配置,那么我们对于后台的访问都必须加上后缀.do,这明细没有第一种配置方便,所有我们往往会使用第一种配置方式,但是,问题来了,当我们访问一个静态资源时,比如html页面,同样的这个URL也会被spring-MVC来处理,这样往往得不到我们想要的静态页面。

解决方案很简单,在spring-MVC前面,激活tomcat的defaultServlet来拦截静态资源的请求,在web.xml配置文件中,加上以下代码即可:

  1. <servlet-mapping>    
  2.     <servlet-name>default</servlet-name>    
  3.     <url-pattern>*.html</url-pattern>    
  4. </servlet-mapping>  
<servlet-mapping>  
	<servlet-name>default</servlet-name>  
	<url-pattern>*.html</url-pattern>  
</servlet-mapping>
对于.css等其他资源,以此类推。

以下是其他服务器的情况

Tomcat, Jetty, JBoss, and GlassFish 自带的默认Servlet的名字 -- "default"
Google App Engine 自带的 默认Servlet的名字 -- "_ah_default"
Resin 自带的 默认Servlet的名字 -- "resin-file"
WebLogic 自带的 默认Servlet的名字  -- "FileServlet"
WebSphere  自带的 默认Servlet的名字 -- "SimpleFileServlet" 


参阅资料:

http://www.cnblogs.com/rollenholt/archive/2012/12/26/2834209.html

http://blog.csdn.NET/this_super/article/details/7884383


 类似资料: