问题描述
例如我在很多jsp页面都会引用到css,对于css的路径因为在开发时和发布时是不一样的,所以我想把它们的路径配置成变量,在一处统一管理,就像下面这样:在某处定义一个类似properties的文件,文件内容如:csspath = myapp/css/然后在jsp页面中就可以直接这样使用:<link rel="stylesheet" type="text/css" href="${csspath}mystyle.css"/>请问如何可以达到这样的效果,求具体方法
解决方案
你可以讲这个参数配置在property文件里,然后利用spring启动的时候加载property文件,然后再你的一个登录页面的controller中或是一个公共controller中利用@Value注入,之后store到session中前台就可以直接利用jstl获取了。
解决方案二:
我的思路是:(1)写到配置文件里。basePath=/blog/(2)spring注入到一个自己的属性类中。<!--spring的配置文件--><bean id="beanConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="location"><value>classpath:conf.properties</value></property></bean><!--spring的配置文件--><bean id="myConfig" class="com.slowoo.blog.config.MyConfig"> <property name="basePath" value="${basePath}" /></bean>(3)创建一个拦截器,在拦截器中,将这个参数放入session。<!--spring的配置文件--><mvc:interceptors> <!-- 每个页面都要走的一个拦截器 --><mvc:interceptor> <mvc:mapping path="/**"/><bean class="com.slowoo.blog.interceptor.BaseInterceptor"/> </mvc:interceptor></mvc:interceptors> /*BaseInterceptor类中部分代码*/@Resourceprivate MyConfig myConfig;@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {HttpSession session = request.getSession();session.setAttribute("basePath", myConfig.getBasePath()); // 每个页面,都设置一下基础路径return true;}(4)就可以在jstl中自由使用了。<img src="${basePath}/img/logo.jpg" />
解决方案三:
用spring MVC的ThemeResolver应该是可以实现的,不过我没尝试用
解决方案四:
看看你的应用构建脚本吧。maven、ant你都可以设定开发、测试、生产等不同的构建方式。比如你测试的css可以放到/test/css里面,发布的可以用/release/css里面。你需要测试的时候就把/test/css拷贝到war里面,发布的时候就把/release/css拷贝到war里面。而在war里面都可以只叫css。这样就不用担心搞不清楚了。
解决方案五:
diaozhanming 说的很明显了,但如果csspath = myapp/css/ 这个只有一个的话,就直接写在web.xml里面也可以的。
解决方案六:
ServerContext.setAttribute("csspath","myapp/css/");