如何在 Spring MVC 中使用 CDN
How to use CDN in Spring MVC
我想使用 CDN 在使用 Spring MVC 创建的项目中提供静态内容,如 CSS、JavaScript 和图像。但是我不知道怎么做。
我是 Spring 的新手,我在网上看到了一些帖子:
- JSP/Spring MVC and CDN?
- How to use property from property file specified in PropertyPlaceholderConfigurer in JSP
- How to show values from property file in JSP in a spring MVC app
- http://tshikatshikaaa.blogspot.com/2012/11/serving-static-resources-with-spring-mvc.html
但是他们没有解释如何实现它。
例如:
过去,我使用 <c:url>
标签:
<img src="<c:url value="/path/to/image" />" alt="desc" />
当我使用CDN时,我可能会使用以下代码:
<img src="${env.cdnUrl}/mypath/pic.jpg" />
但是我应该把${env.cdnUrl}
(在web.xml
或dispatcher-servlet.xml
(Spring MVC的配置)放在哪里?以及如何获取JSP中的参数?
请帮助我。谢谢。
方法总结:
- 在控制器中使用 request.setAttribute("env", ) 并在 jsp 中访问相同的内容。
- 创建一个 servlet 过滤器并执行与上述相同的操作activity。
将 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" />
然后在拦截器代码中,可以设置属性
@Override
public boolean preHandle(final HttpServletRequest request,
final HttpServletResponse response,
final Object handler) {
// set the attribute for URL
我在 Spring 中使用以下步骤实现了 CDN 服务:
在 dispatcher-servlet.xml
(您的 Spring 配置)中添加以下行
<util:properties id="propertyConfigurer" location="classpath:/app.properties"/>
<context:property-placeholder properties-ref="propertyConfigurer" />
当然,你需要在文件顶部为spring-util
添加DOM:
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"
设置在app.properties
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" />
祝你好运!
我想使用 CDN 在使用 Spring MVC 创建的项目中提供静态内容,如 CSS、JavaScript 和图像。但是我不知道怎么做。
我是 Spring 的新手,我在网上看到了一些帖子:
- JSP/Spring MVC and CDN?
- How to use property from property file specified in PropertyPlaceholderConfigurer in JSP
- How to show values from property file in JSP in a spring MVC app
- http://tshikatshikaaa.blogspot.com/2012/11/serving-static-resources-with-spring-mvc.html
但是他们没有解释如何实现它。
例如:
过去,我使用 <c:url>
标签:
<img src="<c:url value="/path/to/image" />" alt="desc" />
当我使用CDN时,我可能会使用以下代码:
<img src="${env.cdnUrl}/mypath/pic.jpg" />
但是我应该把${env.cdnUrl}
(在web.xml
或dispatcher-servlet.xml
(Spring MVC的配置)放在哪里?以及如何获取JSP中的参数?
请帮助我。谢谢。
方法总结:
- 在控制器中使用 request.setAttribute("env", ) 并在 jsp 中访问相同的内容。
- 创建一个 servlet 过滤器并执行与上述相同的操作activity。
将 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" />
然后在拦截器代码中,可以设置属性
@Override
public boolean preHandle(final HttpServletRequest request,
final HttpServletResponse response,
final Object handler) {
// set the attribute for URL
我在 Spring 中使用以下步骤实现了 CDN 服务:
在 dispatcher-servlet.xml
(您的 Spring 配置)中添加以下行
<util:properties id="propertyConfigurer" location="classpath:/app.properties"/>
<context:property-placeholder properties-ref="propertyConfigurer" />
当然,你需要在文件顶部为spring-util
添加DOM:
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"
设置在app.properties
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" />
祝你好运!