最近在学习Spring MVC时遇到一个问题,访问jsp页面正常,访问html页面就会报错。折腾了很久终于搞明白了。先看看Spring MVC处理HTTP请求的流程:
Spring MVC的DispatcherServlet会接管所有的HTTP请求,再进行一系列映射返回一个View。但是,Servlet只有解析jsp文件的能力,却不能解析html文件。故如果从Controller中返回一个html或直接用URL访问html就会报找不到解析器的错误。解决方法如下:
1. 在WEB_INF文件夹下建立static(名字随意)文件夹。
2. 在servlet-content.xml中加入<resources mapping="/static/**" location="/WEB-INF/static/" />
,告诉Spring MVC不要接管该路径下的请求。
3. 完成上面两步后就可以通过{classpath}/static/*.html访问html文件。如果需要从Controller中返回html,可以使用重定向:return "redirect:static/*.html"
。
附上我的代码
servlet-content.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servle