【发布时间】:2014-09-18 18:58:07
【问题描述】:
我无法让 spring mvc 解析 .html 视图文件。
我有以下视图文件夹结构:
WEB-INF
`-views
|- home.jsp
`- home.html
我有一个简单的 hello world 控制器方法,它只打印一条消息 并返回视图名称“home”。我有一个 home.jsp 文件,但想要 改为使用 home.html。
<!-- Working servlet mapping -->
<servlet-mapping>
<servlet-name>spaceShips</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- working servlet context -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
当我点击 spaceships/home 时,控制器会打印出 hello world 消息,我会看到 home.jsp 查看没有问题。
问题是当我将后缀更改为 .html 时。
更改后缀并导航到 /home 后,控制器会打印 消息但是我在浏览器中看到 404 错误,在控制台中看到以下内容: 警告:未找到带有 URI [/spaceships/WEB-INF/views/home.html] 的 HTTP 请求的映射
澄清一下:
<!-- not working with .html -->
<servlet-mapping>
<servlet-name>spaceShips</servlet-name>
<!-- I have tried /* here as well without success -->
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- not working with .html-->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="WEB-INF/views/" />
<beans:property name="suffix" value=".html" />
</beans:bean>
我已经检查了分解的战争文件夹,并且可以确认两个主文件都存在。
有没有人遇到过这样的事情?
最后一段控制台消息:
INFO: Server startup in 5256 ms
Hello, World!
Jul 27, 2014 12:52:01 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/spaceships/WEB-INF/views/home.html] in DispatcherServlet with name 'spaceShips'
感谢阅读。
=========== 解决方案============
以下(丑陋的)配置解决了这个问题。可能有一些方法可以解决这个问题,但如果您遇到同样的问题,您也许可以从中拼凑出一个解决方案。
文件夹结构:
WEB-INF
`-static
|-html
`-home.html
|-css
`-img
控制器方法:
@RequestMapping(value = "/home")
public String goHome() {
System.out.println("lolololololol");
return "static/html/home";
}
弹簧配置:
<resources mapping="/static/**" location="/WEB-INF/static/" />
<beans:bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="" />
<beans:property name="suffix" value=".html" />
</beans:bean>
【问题讨论】:
-
在您的控制器中,@Path 可能必须具有 .html 扩展名。
-
我有同样的问题,但我得到 405 而不是 404 错误。据我了解的问题是资源处理只接受 GET 请求,所以当我在发布表单后重定向到 index.html如果用户已注册,则使用 POST 请求并重定向到 index.html!
-
感谢您发布解决方案。其他主题缺乏资源映射和 InternalResourceViewResolver 的正确组合。
-
尝试使用
<dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> <version>1.7</version> </dependency>
标签: spring spring-mvc