java404_java这个404你能解决吗?

今天在tomcat里部署运行了一个小工程,工程结构如下:

7597b3d64cd6a37f32f127107f16f059.png

运行tomcat服务器后,访问index.html,发现报404:

89849698eeabb2520d150ba852bcb8b4.png

但是后台接口是正常返回的:

9f21a7d19fb7264580d64925c0f22691.png

去看webapps里工程目录下,index.html文件是有的,见鬼了,是哪儿出了问题?

196db40e83b751743f91d75c64e6a3ae.png

然后看到控制台日志(或者tomcat_home/logs/catalina.log)报错如下:

org.springframework.web.servlet.PageNotFound.noHandlerFound No mapping fo

und for HTTP request with URI [/artmuseum/index.html] in DispatcherServlet with name 'springmvc'

afa992bf06742b8bad2b1a8cd3147e1d.png

大致意思是springmvc这个servlet处理不了index.html。原来是配置有问题。

看看web.xml配置,是这样写的:

springmvc

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath*:config/spring-*.xml

springmvc

/

这里url-pattern匹配所有请求,可以实现现在很流行的REST风格,但是会导致js、html、css等静态资源被拦截,拦截后找不到对应的Handler去处理,就会报404

可以通过以下几种方式去解决:

1、

在web.xml中配置默认servlet,去处理静态资源,配置如下:

default

*.html

default

*.css

default

*.xml

default

*.swf

这样配置后,匹配到的静态资源会被Servlet名称是"default"的DefaultServletHttpRequestHandler去处理,这样就可以找到了。但是该方式每种静态资源文件都得配置一个。

2、

在spring3.0.4以后版本提供了mvc:resources,使用方法:

使用mvc:resources/元素,把mapping的URI注册到SimpleUrlHandlerMapping的urlMap中,

key为mapping的URI pattern值,而value为ResourceHttpRequestHandler,

这样就巧妙的把对静态资源的访问由HandlerMapping转到ResourceHttpRequestHandler处理并返回,所以就支持classpath目录,jar包内静态资源的访问。

3、

该标签会把"/**" url,注册到SimpleUrlHandlerMapping的urlMap中,把对静态资源的访问由HandlerMapping转到DefaultServletHttpRequestHandler 处理并返回,

DefaultServletHttpRequestHandler使用就是各个Servlet容器自己的默认Servlet

按照最简单的第三种方式,修改以后,index.html页面访问正常:

843f932b9e78a307960caaf7a428a5b0.png

总结一下,归根结底还是自己对SpringMVC不熟悉。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值