【问题标题】:Spring 4 and Apache tiles css resources not load in jspSpring 4 和 Apache 平铺 css 资源未在 jsp 中加载
【发布时间】:2016-03-06 18:10:11
【问题描述】:

我使用 Spring4、tiles3 创建简单的应用程序。我对 jsp 模板中的资源有疑问。

Project Structure:

Web.xml:

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/root-context.xml</param-value></context-param><listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/config/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>

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

sevlet-context.xml:

<annotation-driven/>

<resources mapping="/resources/**" location="/resources/"/>
<beans:bean
        class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

<beans:bean id="tilesConfigurer"
            class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
    <beans:property name="definitions">
        <beans:list>
            <beans:value>/WEB-INF/tiles/admin.xml</beans:value>
        </beans:list>
    </beans:property>
</beans:bean>
<beans:bean id="tilesViewResolver"
            class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <beans:property name="viewClass">
        <beans:value>
            org.springframework.web.servlet.view.tiles3.TilesView
        </beans:value>
    </beans:property>
    <beans:property name="order" value="0"/>
</beans:bean>

<context:component-scan base-package="com.bookstore.controllers"/>

在jsp中我使用了很多组合href:

href="${pageContext.request.contextPath}/resources/AdminLTE-2.3.0/bootstrap/css/bootstrap.min.css" 
href="/resources/AdminLTE-2.3.0/bootstrap/css/bootstrap.min.css"
href="app-name/resources/AdminLTE-2.3.0/bootstrap/css/bootstrap.min.css"

但 css 没有加载。有什么办法可以解决这个问题?

【问题讨论】:

    标签: java spring jsp resources tiles


    【解决方案1】:

    为了让spring能够识别哪些资源是jsp/tiles或者像CSS和JS这样的静态资源,你需要添加一个resourceHandler

    在 XML 中是这样的:

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

    您可能遇到的问题是您没有在资源映射中定义命名空间。

    【讨论】:

      【解决方案2】:

      使用磁贴时,最佳实践建议静态文件也应该可以使用 apache 磁贴引擎访问

      为此,请在您的 jsp 模板中在文件开头添加以下内容

      <tiles:importAttribute name="stylesheets" />
      

      然后在标题中添加

      <header>
              <!-- stylesheets top -->
              <c:forEach var="css" items="${stylesheets}">
                  <link rel="stylesheet" type="text/css" href="<c:url value="${css}"/>">
              </c:forEach>
      </header>
      

      这将在jsp页面开头注入你定义中定义的所有css

      如果你想添加一个新的 css 文件,请进入 admin.xml 文件并执行如下操作

      <definition name="home" extends="app.base">
          <put-attribute name="title" value="Home Page" />
          <put-attribute name="body" value="/WEB-INF/pages/home.jsp" />
          <put-list-attribute name="stylesheets" inherit="true">
              <add-attribute value="/resources/AdminLTE-2.3.0/bootstrap/css/bootstrap.min.css" />
          </put-list-attribute>   
      </definition>
      

      当然,如@Norbert 所述,资源必须是正确的服务器

      另外,如果您使用的是tile 3,请检查配置是否如下:

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

      【讨论】:

        【解决方案3】:

        感谢您的提示。我通过两种方式解决了这个问题: 更改web.xml

        <servlet-mapping>
          <servlet-name>appServlet</servlet-name>
          <url-pattern>/admin/*</url-pattern>
        </servlet-mapping>
        

        或添加:

        <servlet-mapping>
          <servlet-name>default</servlet-name>
          <url-pattern>*.js</url-pattern>
          <url-pattern>*.css</url-pattern>
        </servlet-mapping>
        

        这个问题还导致网络浏览器将旧内容保存在缓存中。

        【讨论】:

          猜你喜欢
          • 2015-05-25
          • 1970-01-01
          • 2019-02-12
          • 1970-01-01
          • 2019-01-09
          • 2017-07-13
          • 1970-01-01
          • 2012-05-16
          • 1970-01-01
          相关资源
          最近更新 更多