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" />
答案 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.xml
和application-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,如下所示
在beans标记
中添加以下代码<mvc:resources mapping="/resources/**" location="/resources/" />
<mvc:annotation-driven />
将以下代码添加到此xml
顶部的xsi:schemaLocationhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd&#34;&GT;
第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>