<mvc:default-servlet-handler/>导致controller失效,报404错误

最近在做ssm框架整合的一个小项目时,页面跳转一直有404错误,也没有报错提示。然后一步一步去找,终于发现是<mvc:default-servlet-handler/>的原因。

如上图所示,如果springmvc的配置文件这样写的话会报错。

<mvc:default-servlet-handler/>这一行代码的意思是使用默认的Servlet来响应静态文件,因为在web.xml中使用了DispatcherServlet截获所有请求的url,包括jsp页面的关于js,css等引入。由于找不到这些静态文件,所以会报404错误。而当配置文件加上这个默认的Servlet时,Servlet会在找不到它的时候去找静态内容。

但是引入这行代码后,Controller就会失效了,准确来说是RequestMapping下面的方法失效了,从而界面无法跳转。在网上看了一些原因后,总结一下就是

<mvc:default-servlet-handler/>将在SpringMVC上下文中定义一个DefaultServletHttpRequestHandler,这个Handler的作用是去Servlet容器查找默认的Servlet来响应静态文件,而这会导致上图配置文件的处理映射器和处理适配器失效,从而Controller失效。



解决办法如下图

<mvc:annotation-driven/>这一行代码的作用是自动注册RequestMappingHandlerMapping和RequestMappingHandlerAdapter这两个bean,所以我把他们注释了。

也就是说这两个bean的顺序一定要在<mvc:default-servlet-handler/>的前面。<mvc:default-servlet-handler/>定义的DefaultServletHttpRequestHandler,是当没有其他mapping可以处理请求时才会执行该handler匹配的mapping,从而去查找静态内容。

同理,你也可以把我的第一张图的<mvc:default-servlet-handler/>这行代码放到两个bean的后面也可解决。

原文地址:https://www.cnblogs.com/jdbn/p/11020374.html

时间: 2024-10-24 21:55:48

<mvc:default-servlet-handler/>导致controller失效,报404错误的相关文章

注解WebServlet配置Servlet报404错误的原因

使用注解WebServlet配置Servlet报404错误的原因 Servlet3.0之后新增了注解,用于简化Servlet.Filter及Listener的声明,这样就在配置Servlet的时候多了一个选择.Servlet3.0的部署描述文件web.xml的顶层标签<web-app>有一个metadata-complete属性,该属性为true,则容器在部署时只依赖部署描述文件,忽略所有标注,如果不配置该属性,或者将其设置为false,则表示启动标注支持.当metadata-complete

lnmp一键安装访问default目录可行,访问其它站点报404错误

1.一键安装lnmp后:访问其他站点,报404错误. 安装lnmp: yum -y install screen wget screen -S lnmp wget http://soft.vpser.net/lnmp/lnmp1.6.tar.gz -cO lnmp1.6.tar.gz && tar zxf lnmp1.6.tar.gz && cd lnmp1.6 && ./install.sh lnmp 访问站点,报404错误: 2.检查vi /usr/lo

SpringMVC中用@ParamVariable传递的参数包含斜杠(/)时,匹配不了报404错误的解决方案

今天做网站[标签]筛选功能时,出现了这么个奇葩的问题. 我是直接通过<a>标签中href来跳转的,url中包含汉字 <a href="/tags/标签A">标签A</a> 后台代码是这样的: @RequestMapping(value = "/tags/{tagname}") public String tags(@PathVariable String tagname) { // ISO-8859-1 ==> UTF-8

404错误的调试分析 - 运行JSP动态网页Tomcat老是报404错误(详解)

一.开发JSP动态网页时,我们通过浏览器请求服务器上的某个资源的时候,或许会经常遇到报404错误的bug. 问题分析:出现这个bug的原因可能处在JSP网页里面,也可能是Servlet里面.假如要访问的资源不存在,就会产生404错误. (1)404错误可能是应用本身的问题.例如没有正常部署.web.xml部署时Servlet名字写错了 (2)也可能是文件的问题,JSP文件不存在.JSP名字打错了,或者Servlet没有配置 二.关于servlet配置参数url-pattern(Servlet路径

ajax 后台java代码执行完毕 前端报404错误

一个ajax请求,到java后台代码,后台成功接受并执行相应处理,但是返回的时候,success却没进去,前端报404错误. 因为是由于Controller忘记写spring的@Responsebody注解,所以spring对返回值映射时找不到对应的视图,所以返回404 很常见的错误,虽然是拷贝,难免会忘记一些代码!

运用servlet3.0注解报404错误

我的环境是eclipse (查了一下2013EEIDE)+tomcat7.0+Servlet3.0 项目名称:day08BookManageCase servlet类是new servlet出来的如下代码,大部分代码省略,只留了注解部分. /** * Servlet implementation class FindAllServlet */ @WebServlet("/FindAllServlet") public class FindAllServlet extends HttpS

koa2 get请求后台正常接收参数 前端报404错误

刚学习一门技术时,总会踩一些坑. 前端代码 function del(mId){ $.ajax({ type:"get", url:"/delUser", data:{id:mId}, success:function(data){ console.log('成功了'); console.log(data); } }); } 后台接收请求代码 router.get('/delUser',async (ctx,next)=>{ console.log('接收请求

eclipse中配置的tomcat 启动正常 但是访问报404错误

问题描述: 在eclipse中配置的Tomcat,启动是正常的,控制台显示启动成功,也没有报任何错误信息,但是访问的时候就报404错误,然后直接在bin目录下启动startup.bat的方式就是正常的.然后就很纳闷,之后在网上搜了下资料,说是Eclipse的配置出了问题. 解决方案: 1.如果Server里的tomcat启动了,需要先停掉.然后再移除添加的项目 2.之后双击server中配置的tomcat服务器,会弹出如下界面. 3.在Server Locations配置中选择第二个选项,use

IntelliJ IDEA 文件夹重命名--解决重命名后js文件引用找不到路径报404错误

情景: 说明:ExtJS是我后来的改的名字--原来叫extjs,可是当我把在页面的引用地址改为 src="ExtJS/.."后页面就报404错误,我把它改回之前的extjs就可以(像上面的一样),这个小问题真心烦,百度也没有. 后来 我又改个名字,这时候留意了: 上面红框的选项勾选就可以了.