1. 新建一个webapp,能够直接访问index.html。但是加上了springmvc之后就访问不到了,初步判断原因是在web.xml中将所有的请求(即/)都映射到了DispatcherServlet,导致无法访问静态资源。
2. 看了“SpringMVC项目配置欢迎页面为index.html”后,知道应该设置一个IndexController,用于返回index.html。于是我先添加了一个Controller:
@Controller public class IndexController { @RequestMapping("/") public ModelAndView index () { return new ModelAndView("index.html"); } }
然后在springmvc-servlet.xml中添加访问静态资源的配置(新手看到这我要提醒一下,下面的标签只是最关键的部分,关于详细的如何访问静态资源的方法请自行百度):
<mvc:resources mapping="/*.html" location="/"/>
3. 继续报错,错误为:
错误信息说noHandlerFound,也就是意味着我的请求没有找到具体的Controller。于是我就看了一下配置文件,但似乎没问题。难道是在启动web项目的时候,没有读取到配置文件?(注意,服务器启动日志中并没有提示没有找到配置文件)
于是看web.xml中关于配置文件的标签:
这个classpath*:是什么意思我还没了解,只是从网上复制过来的。于是百度,发现原来classpath代表着WEB-INF/classes目录,然后再对比我的项目结构:
诶!好像是我的config目录放错位置了。于是把config目录移到classes目录下后,再重启,成功访问到index.html!。
4.还没完。我在添加IndexController的时候其实是加了一句Syetem.out.println(“hello1”)的,如下所示:
但是我在访问index.html的时候,控制台并没有输出“hello1”,难道IndexController并没有起作用?遂删掉IndexController,重启并访问index.html,能够正常访问。
于是得出最后的结论——在web.xml中springmvc-servlet.xml的路径错了。(这个真难找,因为服务器启动日志没有报错说找不到文件)。