SpringMVC中处理404静态页面操作

 

 在SpringMVC中,是通过前端分发器也就是DispatchServlet来进行我们的请求拦截的,所以如果我们的请求拦截的地址如果是类似于*.do,*.action的话,那么我们的js、png、css就可以逃过,因此是可以访问到的,可是如果我们配置的拦截地址是/,那么将会拦截我们所有的请求信息。那么如何来解决这个问题呢?

 第一种方式

 在一些常见的服务器中都有一些处理静态资源的Servlet,如下所示

Tomcat, Jetty, JBoss, and GlassFish  默认 Servlet的名字 -- "default"

Google App Engine 默认 Servlet的名字 -- "_ah_default"

Resin 默认 Servlet的名字 -- "resin-file"

WebLogic 默认 Servlet的名字  -- "FileServlet"

WebSphere  默认 Servlet的名字 -- "SimpleFileServlet"

 因此我们可以在SpringMVC的dispatchServlet之前就通过服务器默认的拦截器来拦截这些URL,配置的时候,需要把这些URL-PATTERN放置到dispatchServlet之前,下面的操作需要配置到web.xml中

 

<span style="font-family:Comic Sans MS;font-size:18px;"><!-- 	激活Tomcat的defaultServlet来处理静态文件 -->
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.jpg</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>*.css</url-pattern>
	</servlet-mapping></span>
 

 通过这种方式就可以直接访问到我们所需要的js、css等文件了


 第二种方式

  直接使用使用<mvc:default-servlet-handler/>标签,配置到**-servlet.xml中即可,就可以访问到js、png文件了


 第三种方式

 在spring3.0.4以后版本提供了mvc:resources

  <mvc:resources mapping="/style/**" location="/style/" />

  上述的配置location,表示项目中的实际路径,而mapping表示映射的路径

  上述配置就把项目根目录下的style文件夹以及style文件夹一下的所有的子文件当作静态资源,映射到项目根目录/style文件夹下

  后面的location表示映射的路径,再举一个例子,比如项目中的js文件的实际位置是项目名/style/js/login.js,如果采用下面这种配置

  <mvc:resources mapping="/dd/**" location="/style/" />

  意思是把我们style的路径映射成为了dd,所以如果访问js文件的话需要,采用这个路径http://localhost:8080/SpringTest/dd/js/login.js

如果出现下面的错误,可能是没有配置<mvc:annotation-driven />的原因。 
报错WARNING: No mapping found for HTTP request with URI [/mvc/user/findUser/lisi/770] in DispatcherServlet with name 'springMVC' 

 

那么问题就来了,如果新增加一个目录的话,需要多加一条配置,因此可以采用后缀过滤操作,如下所示

<mvc:resources location="/" mapping="/**/*.html" />
<mvc:resources location="/" mapping="/**/*.js" />
<mvc:resources location="/" mapping="/**/*.css" />
<mvc:resources location="/" mapping="/**/*.png" />
<mvc:resources location="/" mapping="/**/*.gif" />


 第四种方式

 如果项目中采用了拦截器的操作,那么如何在拦截器中排除我们的js文件呢?如下所示

 

在dispatchServlet.xml文件中增加
<mvc:resources location="/WEB-INF/resource/" mapping="/resource/**"/>
该方式虽然静态资源文件可以访问了,但是如果系统配置了通配符的拦截器,静态资源还是会被拦截器拦截,如下:

?
1
2
3
4
5
6
<mvc:interceptors>  
    <mvc:interceptor>  
        <mvc:mapping path="/*"/>   
    <bean  class="com.xinlong.cms.front.interceptor.CmsFrontInterceptor"></bean>  
    </mvc:interceptor>  
</mvc:interceptors>

因此需要修改,如下:

?
1
2
3
4
5
6
7
<mvc:interceptors>  
    <mvc:interceptor>  
        <mvc:mapping path="/*"/>   
        <mvc:exclude-mapping path="/resource/**"/>  
    <bean  class="com.xinlong.cms.front.interceptor.CmsFrontInterceptor"></bean>  
    </mvc:interceptor>  
</mvc:interceptors>

到此还有个问题mvc:exclude-mapping 标签不被spring-mvc-3.0.xsd支持,该配置在spring-mvc-3.2.xsd中,可以通过http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd获取,因此需要在spring-mvc-3.0.xsd文件中增加该标签,处理办法很简单,从网上下载spring-mvc-3.2.xsd,找到标签后,再找到spring.web.servlet-3.0.5.jar中的spring-mvc-3.0.xsd文件,将标签加入即可

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值