0

我正在尝试将 Spring MVC 与我现有的应用程序集成。现有应用程序具有上下文根,因为PORTAL这是我的 Spring MVCweb.xml设置

<servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

一切正常,我可以通过 Spring MVC 访问页面。页面从中获取数据,Controller但页面不加载 css、img 和 js 文件。
应用程序文件夹结构是

src
webapps
 -css
 -img
 -js
 -WEB-INF
  --jsp

JSP

<link rel="stylesheet" type="text/css" href="css/bootstrap.css"/>
        <link rel="stylesheet" type="text/css" href="css/poc.css"/>
        <script src="js/jquery.js"></script>
        <script src="js/bootstrap.js"></script>

错误

    No mapping found for HTTP request 
with URI [/PORTAL/css/bootstrap.css] in DispatcherServlet with name 'spring'
4

3 回答 3

2

由于 Spring MVC 在 URL 模式上工作,并且来自客户端的每个图像和资源请求都是单独的请求,因此 Spring 正在寻找“/bootstrap.css”的匹配模式,以确定是否有任何东西可以针对该模式提供服务。

并且没有针对此映射的资源,这就是您收到此错误的原因。

您可以说 Spring 这些是我的资源,如果请求带有提到的 URL,则不要进行任何映射查找。

将下面的行放在 spring-servlet.xml 文件中。

<mvc:resources mapping="/PORTAL/css/" location="/PORTAL/css/" cache-period="0" />

这将帮助您摆脱 CSS 加载错误。但是 js 和图像的问题仍然存在,因此请尝试将所有资源保存在一个资源文件夹中并提供如下映射,

<mvc:resources mapping="/resources/**" location="/resources/" cache-period="0" />

另外,在xml文件中导入上面的这个xsd,

    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

希望这可以帮助。

于 2013-07-22T13:41:20.703 回答
0

ContextPath在引用jscss文件时丢失了。

为资源引用添加前缀,如下所述

<script src="${pageContext.request.contextPath}js/jquery.js"></script>

于 2013-07-22T13:47:09.150 回答
0

对我来说,问题是您将 SpringDispatcherServlet 映射到所有内容(<url-pattern>/</url-pattern>)。您可以将其仅映射到一种类型的资源,然后让服务器为其他类型提供服务。例子 :

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

然后你所有的 css、图像、视频、applet jar 等都将由服务器直接提供,而完成的 url.htm将由 Spring MVC 提供。

如果需要,还可以为 Dispatcher servlet 定义多个 servlet 映射。

于 2013-07-22T13:50:31.220 回答