Java 如何在Spring MVC中使用CDN

Java 如何在Spring MVC中使用CDN,java,spring-mvc,jsp,cdn,staticresource,Java,Spring Mvc,Jsp,Cdn,Staticresource,我想在使用SpringMVC创建的项目中使用CDN来提供静态内容,如CSS、JavaScript和图像。但我不知道怎么做 我是Spring的新手,我在网上看到了一些帖子: 但他们没有解释如何实施 例如: 过去,我使用标记: <img src="<c:url value="/path/to/image" />" alt="desc" /> “alt=“desc”/ 当我使用CDN时,我可能会使用以下代码: <img src="${env.cdnUrl}

我想在使用SpringMVC创建的项目中使用CDN来提供静态内容,如CSS、JavaScript和图像。但我不知道怎么做

我是Spring的新手,我在网上看到了一些帖子:

但他们没有解释如何实施

例如:

过去,我使用
标记:

<img src="<c:url value="/path/to/image" />" alt="desc" />
“alt=“desc”/
当我使用CDN时,我可能会使用以下代码:

<img src="${env.cdnUrl}/mypath/pic.jpg" />

但是我应该把
${env.cdnUrl}
(在
web.xml
dispatcherservlet.xml
(SpringMVC的配置))放在哪里?如何在JSP中获取参数

请帮帮我。谢谢。

  • 在控制器中使用request.setAttribute(“env”),并在jsp中访问该属性
  • 创建一个servlet过滤器并执行上述相同的活动
  • 将env值写入属性文件,并尝试在jsp页面中访问该文件。如果使用InternalResourceViewResolver,则exposedContextBeanNames有助于在jsp中公开属性

    <bean id="properties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="locations">
    <list><value>property_file</value></list>
    </property>
    </bean>
    
    <bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="viewClass"     value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/> 
    <property name="exposeContextBeansAsAttributes" value="true"/> 
    <property name="exposedContextBeanNames">
        <list>  
            <value>properties</value> 
        </list>
    </property>  
    </bean> 
    
    
    属性文件
    性质
    

  • 并以${properties.env}

    的形式访问jsp中的值,您还可以通过拦截器来实现这一点

      <mvc:interceptors>
                <!-- path interceptor adds servlet path as an attribute -->
            <bean class="com.test.myInterceptor" />
    

    我在Spring中使用以下步骤实现了CDN服务:

    dispatcherservlet.xml
    中添加以下行(您的Spring配置)

    应用程序属性中设置

    cdn.url=//cdn.domain.com/path/to/static/content
    
    在JSP文件中使用CDN

    <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
    <spring:eval expression="@propertyConfigurer.getProperty('cdn.url')" var="cdnUrl" />
    
    <link rel="stylesheet" type="text/css" href="${cdnUrl}/css/semantic.min.css" />
    <link rel="stylesheet" type="text/css" href="${cdnUrl}/css/font-awesome.min.css" />
    
    
    

    祝您好运!

    您可以执行request.setAttribute(“env.cdnUrl”,)在控制器中。@anuraggupta,但我必须在每个控制器中声明它。创建一个过滤器并添加到那里;让所有控制器通过them@anuraggupta你的意思是使用AOP?任何更简单的方法吗?不,不是AOP,这是我的PropertiesFactoryBean
    classpath:/app.properties
    ,更改后,我无法访问Spring配置文件中的值。您是否也在viewResolver中添加了exposedContextBeanNames?是的。我没有在JSP中测试它是否工作。因为我无法从Spring配置中的属性文件加载属性。应用程序加载失败。原因:java.lang.ClassNotFoundException:${properties.jdbc.driverClassName}如果在属性文件中有“jdbc.driverClassName”作为键,那么写${jdbc.driverClassName}也许您可以在我的。
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/util 
    http://www.springframework.org/schema/util/spring-util-4.1.xsd"
    
    cdn.url=//cdn.domain.com/path/to/static/content
    
    <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
    <spring:eval expression="@propertyConfigurer.getProperty('cdn.url')" var="cdnUrl" />
    
    <link rel="stylesheet" type="text/css" href="${cdnUrl}/css/semantic.min.css" />
    <link rel="stylesheet" type="text/css" href="${cdnUrl}/css/font-awesome.min.css" />