第一次发博客,工具和排版不咋滴,还望见谅!!
第一步、在web.xml里配置总控制器DispatcherServlet,如图所示:
请求拦截问题,相信有很多同学遇到过这样的问题,访问不到资源(各种静态和jsp等)404,这得从这个总控制器url-pattern配置讲起,大致我分为三种:
1)固定格式或路径:比如*.do , /user/*.action等等,这种配置不会出现上述问题,不过不符合rest规范
2)/*:这种表示会拦截所有的静态资源以及所有的动态资源,当然包括jsp在内,所以访问jsp或者controller内部转发jsp都会404
3)/:这种表示会拦截所有的静态资源以及controller动态资源,也就是说如果想访问到jsp,可以用这种
综上可以用第三种解决jsp问题,但是静态资源问题依然存在,关于静态资源被拦截有以下三种方案:
1)在web.xml配置如下:
<!-- 静态资源 --> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.gif</url-pattern> </servlet-mapping>
这种方式效率最高,不过配置代码量多一点,注意这个必须放在总控制器DispatcherServlet之前,表示在请求进入控制器之前拦截把静态资源交由tomcat处理
2)在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"/>
3)开放tomcat的defaultServlet,只需要添加一行配置,是不是很方便
<mvc:default-servlet-handler/>
第二种和第三种都是放到springMVC里配置的,如果是整合到spring里,那就是在spring里配置的,具体应该使用哪一种方案,先看下面的图
这个是整个请求流程,如果采用第一种方案,那么访问静态资源不会进入总控制器,直接交由tomcat处理,当然也不会进入后面的流程,如果用第二种第三种方案其实实现进入到springMVC内部处理过滤掉,不被总控制器拦截,但是对于静态资源的映射处理器编码不是utf-8,不知道为什么,同一作者,编码不同很费解,所以此时虽然能访问,但是可能会有乱码,而且这种情况依然会经过您自定义的拦截器,所以还需要在您自定义的拦截器里进行过滤
综上所述采用第一种:效率高、直接交给tomcat处理,不会经过您自定义的拦截器,也不会出现乱码问题
如还有问题,请加524178728扣扣群交流!!!