简体   繁体   English

Spring无法加载静态资源

[英]Spring can't load static resources

I'm trying to load static resources such as css files and javascript files in my jsp files using relative paths, but it seems by servlet mappings are overriding the mapping to them. 我正在尝试使用相对路径在我的jsp文件中加载诸如CSS文件和javascript文件之类的静态资源,但是servlet映射似乎覆盖了对它们的映射。

Project structure: 项目结构:

webapp/
   assets/
      scripts/
         dashboard.js
      styles/
         common.css
   WEB-INF/
      views/
         pages/
            home/
               body.jsp

web.xml: web.xml:

...
<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

...

mvc-dispatcher-servlet.xml: mvc-dispatcher-servlet.xml:

    <import resource="applicationContext.xml" />
<context:component-scan base-package="com.nickythorne.controller" />

<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"/>
</bean>

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer" >
    <property name="definitions" value="/WEB-INF/tiles-definitions.xml" />
</bean>

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

I my JSP file where i'm trying to load the stylesheet: 我在我的JSP文件中尝试加载样式表:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<base href="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}" />

<link rel="stylesheet" type="text/css" href="<c:url value='/assets/styles/common.css'/>" />

The error I get is: 我得到的错误是:

WARN org.springframework.web.servlet.PageNotFound:1108 - No mapping found for HTTP request with URI [/project/assets/styles/common.css] in DispatcherServlet with name 'mvc-dispatcher' WARN org.springframework.web.servlet.PageNotFound:1108-在DispatcherServlet中,名称为“ mvc-dispatcher”的URI [/project/assets/styles/common.css]的HTTP请求未找到映射

The better approach is: 更好的方法是:

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

<link rel="stylesheet" type="text/css" href="${root}/assets/styles/common.css"/>

${root} will be resolved into your relative context path regardless of ports, protocol, domain name etc. ${root}将解析为您的相对上下文路径,而与端口,协议,域名等无关。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM