1.原来项目中视图层用的是jsp,所有引用(js,css...)上都会加上${ctx}....这个前缀,那么所有的引用都是绝对路径引用,不会出现路径问题。ctx的定义如下:
[code="java"][/code]2.现在用的是springmvc+freemarker,在freemarker没有找到类似jsp中获取上下文定义路径的方法,然后在spring的控制层中我这样写
[code="java"]protected void setContext(ModelMap model, HttpServletRequest request) {
model.addAttribute("path", request.getContextPath());
}[/code]3.现在问题是我写的每个方法都要调用一次这个setContext方法,我觉得肯定有更好的办法解决,但是我之前没接触过springmvc,在网上也没有搜到好的方法,所以想请问一下大家,你们之前做的项目关于这个路径问题是如何处理的。
可以使用freemarker的全局变量
在springmvc配置文件中定义
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<!-- 全局变量 -->
不知以上可不可以解决楼主的问题
${webRoot}这个变量就可以在ftl中调用
1.对于js,css我觉得没必要加上ctx
应该可以使用绝对路径,比如"/media/js/hello.js"
这样就不会关联到上下文
2.如果确实需要加上ctx,
能不能使用一个filter过滤所有请求, 这个时候可以得到httpservletrequest,也就是可以得到servletcontext,
再使用类似于spring context util之类的工具得到freemarker的配置bean
再得到freemarker的Configuration对象, 再使用这个对象设置全局变量servletContext
3.我在想有没有必要绕得那么厉害?
路径一般我都使用绝对路径,完全OK
不管是js,css,image等
如果你的media(静态文件之类)的路径不在当前项目下,
可以配置一下springmvc
如果使用到上下文, 这样每个请求都必须解析一次request.getServletContext()
个人觉得没多大必要