Spring,从控制器提供静态视图

时间:2016-03-03 21:40:52

标签: java spring spring-mvc servlets

我收到WARN org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/fomoapp/resources/lib/login.html] in DispatcherServlet with name 'fomo'错误。以下线程解决方案对我不起作用:

org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI Spring 3

我看到的是应用程序找到了正确的控制器,然后尝试找到我从该方法返回的.html文件,但不知何故不能这样做。基本上,我正在尝试从resources/lib/文件夹提供静态资源。目录结构如下:

enter image description here

web.xml

enter image description here

WEB-INF/applicationContext

enter image description here

WEB-INF/spring/fomo-config.xml

enter image description here

,控制器如下所示:

enter image description here

2 个答案:

答案 0 :(得分:1)

您的mvc:resources将所有请求映射到resources/lib。您应该只映射/resources/**,否则永远不会调用您的控制器。

Mvc资源"是"一个控制器专门用于客户端的serving静态资源(js / css / ...),所以你不需要你自己的。

不要将这些资源与要由控制器呈现的模板混合在一起。把它们放到另一个地方,否则它们也会以原始形式提供给客户。

答案 1 :(得分:0)

基本上,我尝试做的是开始将.html个文件作为视图提供,并且由于指定的扩展名.html而无法正常工作。将其更改为.jsp后,事情就开始变得更好了。所以,我猜InternalResourceViewResolver需要.jsp s。

这是.jsp中所需的主要更改(除了将文件重命名为fomo-config.xml):

<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />  

</bean>

可以看出,我还以Martin Frey推荐的方式将静态资源与视图分开。也许这也很重要。

applicationContext.xml已更改为以下内容:

<!-- Root Context: defines shared resources visible to all other web components -->
<mvc:resources mapping="/resources/**" location="/resources/" />
<mvc:default-servlet-handler/>

然后,即使加载了login页面,其中的静态文件也没有,所以我需要做两件事:

  1. resources文件夹中创建另一个webapp文件夹并移动我的所有资源

  2. 以下列方式指定web.xml内的文件扩展名的映射:

    <servlet-mapping>
      <servlet-name>default</servlet-name>
      <url-pattern>*.css</url-pattern>
    </servlet-mapping>
    
  3. 目录结构现在看起来像这样:

    enter image description here

    它现在工作正常,但我仍然不确定为什么我们需要main/resources文件夹,如果我不能访问它,除了通过指定绝对路径在这里解释它的方式:

    http://akshaybobde.blogspot.com/2014/07/spring-mvc-serving-images-from-physical.html

    我无法删除或移动它:项目不会编译。