前言

本文首发于公众号【我的小碗汤】本公众号免费提供csdn下载服务,海量IT学习资源,如果你准备入IT坑,励志成为优秀的程序猿,那么这些资源很适合你,包括但不限于java、go、python、springcloud、elk、嵌入式 、大数据、面试资料、前端 等资源。扫码关注:

正文

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

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

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

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

然后看到控制台日志(或者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'

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

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


<!-- 注册前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:config/spring-*.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--默认匹配所有的请求-->
<url-pattern>/</url-pattern>
</servlet-mapping>

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

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

1、

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

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.xml</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.swf</url-pattern>
</servlet-mapping>

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

2、

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

<!-- 对静态资源文件的访问 -->
<mvc:resources mapping="/css/**" location="/css/" />
<mvc:resources mapping="/js/**" location="/js/" />

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

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

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

3、

使用mvc:default-servlet-handler/

<mvc:default-servlet-handler/>

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

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

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

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


最后,csdn资源,收集了海量学习资料,如果你准备入IT坑,励志成为优秀的程序猿,那么这些资源很适合你,包括java、go、python、springcloud、elk、嵌入式 、大数据、面试资料、前端等资源。同时我们组建了一个技术交流群,里面有很多大佬,会不定时分享技术文章,如果你想来一起学习提高,可以关注以下公众号后回复【2】,获取。


我是小碗汤,我们一起学习,扫码关注,精彩内容第一时间推给你

最新文章

  1. 解决eclipse中svn插件总是提示输入密码的问题
  2. Dynamics CRM导出数据到Excel
  3. Floyd算法(三)之 Java详解
  4. PHP联合sqlserver2008使用的全过程 ( 原创 亲测)
  5. Android(java)学习笔记200:Android中View动画之 XML实现 和 代码实现
  6. 使用 Docker 容器应该避免的 10 个事情
  7. SQL查询语句47题
  8. MVC3 Razor @RenderSection
  9. MySQL JDBC事务处理、封装JDBC工具类
  10. jsoup爬取图片到本地
  11. bzoj3597[Scoi2014]方伯伯运椰子 01分数规划+spfa判负环
  12. Apache 、Tomcat、Nginx的区别
  13. Linux 桌面玩家指南:08. 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码
  14. 每天五分钟-javascript数据类型
  15. eclpse:安装explorer或eExplorer插件
  16. Eclipse中代码字体背景变红/变黄/变绿
  17. leecode第二百三十八题(除自身以外数组的乘积)
  18. 名字top500字典 各种格式及python脚本
  19. JSON语法
  20. 网络编程基础【day10】:IO多路复用

热门文章

  1. RAID级别简介
  2. 暑假集训D18总结
  3. hdu 1273最大流
  4. OC第六课
  5. StringIndexOutOfBoundsException
  6. Java 二进制和十进制互转,二进制和BitSet互转
  7. bzoj2132: 圈地计划(无比强大的最小割)
  8. ES transport client批量导入
  9. [Apple开发者帐户帮助]五、管理标识符(4)注册一个应用程序组
  10. Spring的AOP机制---- AOP的注解配置---- AOP的注解配置