今天想着静态资源的释放(html网页,js资源),首先是根据以前学的,直接添加<mvc:resources >标签进行静态资源的放行,后来发现我访问一个控制器中的方法不能执行了,而且控制台发警告:
警告 [http-nio-80-exec-10] org.springframework.web.servlet.DispatcherServlet.noHandlerFound No mapping found for HTTP request with URI [/cloud_disk_war_exploded/interface/getDeployUrl] in DispatcherServlet with name 'dispatcherServlet'
然后捣鼓了半天,网上说在web.xml中添加一个
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
然后我加上,啥用没有,还是一样的警告。然后我尝试把添加的
<mvc:resources mapping="/html/**" location="/html/"/>
<mvc:resources mapping="/js/**" location="/js/"/>
给删掉,发现html的的能访问了,但是我js的访问不了了啊。我又试着添加一条js的mvc:resources,发现警告又来了。。。
最后百度了一番,发现是这个mvc:resource标签将控制器方法失效了,所以我访问不到类里面的方法,就404了,解决方法是添加
<mvc:annotation-driven/>
添加了这条标签之后静态资源可以正常访问,控制器里的方法也可以正常执行(然后我将web.xml添加了defalut删掉了,效果感觉差不多)。
这条标签的作用是向工厂中注册几个关键的类,其中包括
RequestMappingHandlerMapping
BeanNameUrlHandlerMapping
功能是处理请求映射的。其中第一个是处理@RequestMapping注解的。第二个会将controller类的名字映射为请求url,之前我没加可能是因为他把我们的请求当成释放静态资源了,使得@RequestMapping不生效了。
具体的可以参考这篇文章:https://my.oschina.net/HeliosFly/blog/205343