1. Spring MVC 是通过servlet来进行转发的,一般在web.xml中配置如下:
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
如果url-pattern配置的是/* 则默认是会拦截所有的资源,包括html、css、jpg等静态资源,也包括jsp页面等。
由于这些资源在后台都没有给其配置相应的Controller去处理,所有会报错404.
有两种方式解决:
1. url-pattern不直接连接所有资源,而是
<url-pattern>*.action</url-pattern>
这样就只拦截action结尾的请求,所以所有请求都要加上.action
2. 在spring的mvc配置文件中加上:
<mvc:default-servlet-handler/>
这样就将没有找到对应的控制器的请求(如一些静态资源等)交给默认的servlet去处理。
但如果采用第二种方式<mvc:default-servlet-handler/>,不处理的话,访问jsp等页面的时候,
会直接把其当作txt来处理,会把jsp的源码直接返回给浏览器。
所以在配置的时候可以把 /* 修改为 /
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>