spring mvc在哪里放css / js / img文件

时间:2013-01-05 12:38:15

标签: css spring-mvc

0并且存在放置公共文件的问题 我试过Where to place images/CSS in spring-mvc app?这个解决方案,但它对我不起作用

我试图将我的公用文件夹放在WEB-INF目录中的所有位置,但仍然没有

的web.xml

    <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

  <display-name>s-mvc</display-name>
  <servlet>
    <servlet-name>frontController</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>frontController</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <mvc:resources mapping="/css/**" location="/css/"/>

</web-app>

frontcontroller-servlet.xml中

<mvc:annotation-driven/>

    <context:component-scan base-package="pl.skowronline.controller" />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

以及我如何调用css文件 <link type="text/css" href="/css/bootstrap.css" rel="stylesheet" />

6 个答案:

答案 0 :(得分:9)

JB Nizet的回答是正确的。但是,似乎您的应用程序的问题不仅仅是放置css / js文件的地方。对于Spring MVC,您必须正确配置所有配置,否则它将无效。

为简单起见,只需将css文件夹放在WEB-INF文件夹(/ WEB-INF / css)中,这样就可以在页面中像这样访问它:

<a href="<c:url value='/css/bootstrap.css'/>"

该链接应该直接带您到css文件。如果有效,您可以将<a>标记更改为CSS样式的<link>标记。

如果它不起作用,有几件事要检查:

1)禁止访问文件的Spring Security约束

2)可能阻碍您访问文件的各种过滤器/拦截器的影响

3)web.xml中的Servlet配置。确保没有调度程序拦截您对CSS文件的访问权。

通常,<mvc:resources>会为您做上述所有事情。但是万一它失败了,你可能想看看。

对于<mvc:resources>错误:

  

匹配的通配符是严格的,但是找不到声明   元素&#39; mvc:resources&#39;。

看起来你还没有宣布正确的架构。例如,您应该在文件的开头添加以下行:

  

http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd           http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd&#34;&gt;

更新:

作为您的回答,问题似乎在这里:

<servlet-mapping>
    <servlet-name>frontController</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

您应将其更改为:

<servlet-mapping>
    <servlet-name>frontController</servlet-name>
    <url-pattern>/*.html</url-pattern>
  </servlet-mapping>

这将保存css / images文件的URL与控制器(您的servlet)的URL映射冲突,并且让mvc:resources可以实现它。当然,你可以使用你想要的扩展名&#34; html&#34;部分。对于漂亮的网址,我们可能会使用像Turkey URL rewrite这样的库来解决问题

答案 1 :(得分:9)

我认为您对web.xmlapplication-context.xml感到困惑。

web.xml应该包含这样的webapp xsd声明,以及Dispatcher Servlet的映射。

 <?xml version="1.0" encoding="UTF-8"?>
 <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <display-name>s-mvc</display-name>
  <servlet>
    <servlet-name>frontController</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>frontController</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
 </web-app>

application-context.xml包含spring-framework xsd声明的位置,如下所示

<?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:mvc="http://www.springframework.org/schema/mvc"
     xmlns:context="http://www.springframework.org/schema/context"
     xsi:schemaLocation="http://www.springframework.org/schema/mvc  http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

 <mvc:resources mapping="/css/**" location="/css/"/>
 <mvc:annotation-driven />
 <context:component-scan base-package="pl.skowronline.controller" />

 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
 </bean>

</beans>

答案 2 :(得分:4)

following section of the documentation中对此进行了描述。按照其中的说明进行操作,然后更改href/css/bootstrap.css表示:在服务器根目录下的文件夹css。因此,除非您的应用程序部署为根应用程序,否则它将无法工作,因为您需要预先添加应用程序的上下文路径:

href="<c:url value='/css/bootstrap.css'/>"

这意味着:在css文件夹中,位于webapp 的根下面。如果您的webapp的上下文路径为/myFirstWebApp,则生成的href将为

href="/myFirstWebApp/css/bootstrap.css"

答案 3 :(得分:4)

您可以尝试使用上下文路径来查找资源文件。

<link type="text/css" href="${pageContext.request.contextPath}/css/bootstrap.css" rel="stylesheet" />

阅读this了解详情。

答案 4 :(得分:1)

我也有同样的问题。请执行以下步骤以使其工作对我和我的队友都有效。

步骤1: - 在Web-INF中创建一个名为&#34; resources&#34;

的文件夹

步骤2: - 上传你的bootstrap,css和js,如果你已经拥有或者如果你想写它写在这个文件夹里

步骤3: - 现在更新您的调度程序servlet xml,如下所示

  1. 在beans标记

    中添加以下代码
    <mvc:resources mapping="/resources/**" location="/resources/" />
            <mvc:annotation-driven />
    
    1. 将以下代码添加到此xml

      顶部的xsi:schemaLocation

      http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd&#34;&GT;

  2. 第4步: - 现在您可以在代码中使用css,bootstrap资源,如下所示

    <header class="custem_header_bg"><img src="resources/img/product_banner.png" class="img-responsive"> </header>
    

答案 5 :(得分:0)

您只能根据以下步骤设置JSP。然后,您不需要在web.xml中设置mvc:resources。 设置base如下。我们也可以使用头文件来设置这个值。然后我们可以将header.jsp包含在我们在应用程序中使用的任何页面中。然后我们不需要在每个JSP中设置这个值。

您需要将<base/>设置为以下内容......

<c:set var="req" value="${pageContext.request}" />

<c:set var="url"> ${req.requestURL} </c:set>
<c:set var="uri" value="${req.requestURI}" />

<head>
    <title></title>
    <base href="${fn:substring(url, 0, fn:length(url) - fn:length(uri))}${req.contextPath}/" />

然后您可以导入任何JS或CSS,如下所示..

<script src="assets/js/angular/angular.js"></script>