13

0 并且有问题将公共文件放在哪里我试过在 spring-mvc 应用程序中放置图像/CSS 的位置?这个解决方案,但它不适合我

我试图将我的公用文件夹放在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>

前端控制器-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" />

4

6 回答 6

10

我认为您对web.xml和感到困惑application-context.xml

web.xml应该包含这样的xsdwebapp声明,以及 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-frameworkxsd 声明,如下所示

<?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>
于 2013-01-14T20:50:32.930 回答
9

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

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

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

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

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

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

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

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

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

对于<mvc:resources>错误:

匹配的通配符是严格的,但找不到元素“mvc:resources”的声明。

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

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 >

更新:

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

<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 发挥作用。当然,您可以对“html”部分使用您想要的任何扩展名。对于一个漂亮的URL,我们可以使用Turkey URL rewrite之类的库来解决问题

于 2013-01-14T10:27:57.407 回答
4

这在文档的以下部分中进行了描述。按照那里给出的说明进行操作,然后更改您的href:/css/bootstrap.css表示:在servercss根目录下的文件夹中。因此,除非您的应用程序被部署为根应用程序,否则它将无法工作,因为您需要预先添加应用程序的上下文路径:

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

这意味着:在 css 文件夹中,就在webapp 的根目录下。如果您的 webapp 的上下文路径是/myFirstWebApp,则生成的 href 将是

href="/myFirstWebApp/css/bootstrap.css"
于 2013-01-05T12:47:01.573 回答
4

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

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

阅读本文以了解更多信息。

于 2013-01-08T11:22:34.113 回答
1

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

Step1 :- 在 Web-INF 中创建一个名为“resources”的文件夹

Step2 :- 上传你的引导程序、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 ">

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

<header class="custem_header_bg"><img src="resources/img/product_banner.png" class="img-responsive"> </header>
于 2016-03-18T08:16:31.390 回答
0

您只能按照以下步骤设置基于 JSP。然后就不需要在 web.xml 中设置 mvc:resources 了。只需将基础设置如下。我们也可以使用头文件来设置这个值。然后我们可以将该 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>
于 2016-03-01T09:32:26.340 回答