将Spring MVC与现有应用程序集成

时间:2013-07-22 13:31:46

标签: spring spring-mvc

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

<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'

3 个答案:

答案 0 :(得分: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">

希望这会有所帮助。

答案 1 :(得分:0)

在引用ContextPathjs文件时,您遗漏了css

如下所述添加资源引用

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

答案 2 :(得分:0)

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

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

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

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