Spring MVC ViewResolver无法映射到HTML文件

Mac*_*Mac 20 spring spring-mvc

我无法获得spring mvc来解析.html视图文件.

我有以下视图文件夹结构:

WEB-INF
      `-views
            |- home.jsp
            `- home.html
Run Code Online (Sandbox Code Playgroud)

我有一个简单的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>
Run Code Online (Sandbox Code Playgroud)

当我点击太空飞船/家庭时,控制器打印出hello world消息,我看到home.jsp视图没有问题.

问题是当我将后缀更改为.html时.

更改后缀并导航到/ home后,控制器打印消息,但是我在浏览器中看到404错误,控制台中出现以下错误:警告:没有找到带URI的HTTP请求的映射[/ spaceships/WEB-INF/views /home.html]

澄清:

<!-- 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>
Run Code Online (Sandbox Code Playgroud)

我已经检查了爆炸的war文件夹,并且可以确认两个主文件都存在.

有没有人遇到过这样的事情?

最后一块控制台消息:

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'
Run Code Online (Sandbox Code Playgroud)

谢谢阅读.

===========解决方案============

以下(丑陋)配置解决了这个问题.可能有办法清理它,但如果您遇到同样的问题,您可以从中拼凑出一个解决方案.

文件夹结构:

 WEB-INF
       `-static
              |-html
                    `-home.html
              |-css
              `-img
Run Code Online (Sandbox Code Playgroud)

控制器方法:

 @RequestMapping(value = "/home")
 public String goHome() { 
      System.out.println("lolololololol");
      return "static/html/home";
 }
Run Code Online (Sandbox Code Playgroud)

Spring配置:

 <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>
Run Code Online (Sandbox Code Playgroud)

Kun*_*l-G 10

检查一下这是否在Spring mvc中映射html文件(详细步骤在Answer中给出):

哪个弹簧视图解析器与angularjs一起玩得很好?

简单来说:

为了在spring中使用静态资源(html,css,img,js),请使用如下所示的目录结构:

src/
   package/
   LayoutController.java
WebContent/
   WEB-INF/
    static/
      html/
       layout.html
      images/
       image.jpg
      css/
       test.css
      js/
       main.js
     web.xml
    springmvc-servlet.xml


@Controller 
public class LayoutController {

 @RequestMapping("/staticPage") 
public String getIndexPage() { 
return "layout.htm"; 

} }




<!-- in spring config file -->
 <mvc:resources mapping="/static/**" location="/WEB-INF/static/" />
Run Code Online (Sandbox Code Playgroud)

的layout.html

<h1>Page with image</h1>
<img src="/static/img/image.jpg"/>
Run Code Online (Sandbox Code Playgroud)