首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring MVC不映射到ViewResolver文件

Spring MVC不映射到ViewResolver文件
EN

Stack Overflow用户
提问于 2014-07-27 20:13:43
回答 4查看 51.3K关注 0票数 21

我无法让spring mvc解析.html视图文件。

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

代码语言:javascript
复制
WEB-INF
      `-views
            |- home.jsp
            `- home.html

我有一个简单的hello world控制器方法,它只打印一条消息并返回视图名称"home“。我有一个home.jsp文件,但我想使用home.html。

代码语言:javascript
复制
<!-- 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请求的映射

澄清一下:

代码语言:javascript
复制
<!-- 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>

我已经检入了分解的war文件夹,并且可以确认两个主文件都存在。

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

控制台消息的最后一段:

代码语言:javascript
复制
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'

感谢您的阅读。

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

下面的(难看的)配置解决了这个问题。可能有一些方法可以解决这个问题,但是如果你遇到了同样的问题,你也许可以从中拼凑出一个解决方案。

文件夹结构:

代码语言:javascript
复制
 WEB-INF
       `-static
              |-html
                    `-home.html
              |-css
              `-img

控制器方法:

代码语言:javascript
复制
 @RequestMapping(value = "/home")
 public String goHome() { 
      System.out.println("lolololololol");
      return "static/html/home";
 }

Spring配置:

代码语言:javascript
复制
 <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>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-07-27 21:51:42

查看这里以在Spring mvc中映射html文件(答案中给出了详细步骤):

Which spring view resolver plays nice with angularjs?

简单地说:

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

代码语言:javascript
复制
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/" />

layout.html

代码语言:javascript
复制
<h1>Page with image</h1>
<img src="/static/img/image.jpg"/>
票数 10
EN

Stack Overflow用户

发布于 2014-07-27 21:28:30

这是因为通常servlet样式的uri模式是由servlet容器处理的,而在这个特定的实例中,*.html不是由容器处理的,而是将路径委托给Spring MVC,而Spring MVC不知道如何呈现这些扩展。

例如,如果您使用tomcat,您将在conf/web.xml文件下看到以下条目:

代码语言:javascript
复制
<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jsp</url-pattern>
    <url-pattern>*.jspx</url-pattern>
</servlet-mapping>

即jsp servlet处理*.jsp和*.jspx扩展。

因此,一个可能的修复方法是添加要添加的.html,以便由jsp servlet处理,如以下链接所示:

Using .html files as JSPs

或者更好的做法是,将扩展名保留为.jsp,并使用.html作为控制器模式?

票数 3
EN

Stack Overflow用户

发布于 2016-08-05 11:59:47

代码语言:javascript
复制
I was also facing the same issue and tried various solutions to load the AngularJS html file using Spring configuration. After applying below steps it got resolved.

Step-1 in server's web.xml commemt these two lines

<!--     <mime-mapping>
        <extension>htm</extension>
        <mime-type>text/html</mime-type>
    </mime-mapping>--> 
<!--     <mime-mapping>
        <extension>html</extension>
        <mime-type>text/html</mime-type>
    </mime-mapping>
 -->

Step-2 enter following code in application's web xml

  <servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>


Step-3

create a static controller class 

@Controller 
public class StatisController {
     @RequestMapping("/landingPage") 
    public String getIndexPage() { 
    return "CompanyInfo"; 

    }

}
Step-4 in the Spring configuration file change the suffix to .htm
        <property name="suffix">
            <value>.htm</value>
        </property>

Step-5
Rename page as .htm file and store it in WEB-INF and build/start the server 

localhost:8080/.../landingPage
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24980839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档