1. freemarker获取系统相对路径方式
spring-mvc.xml 中配置
其中
value="request" />是关键。
ftl页面中设置
首页js文件中获取path
var base = document.getElementById("base").href;
// 与后台交互
_send = function(async, url, value, success, error) {
$.ajax({
async : async,
url : base + ‘/‘ + url,
contentType : "application/x-www-form-urlencoded; charset=utf-8",
data : value,
dataType : ‘json‘,
type : ‘post‘,
success : function(data) {
success(data);
},
error : function(data) {
error(data);
}
});
};
使用绝对路径方式
1.问题来源
用域名直接访问系统,修改tomcat7配置文件使用http://localhost/index.html方式,即配置默认80端口和虚拟项目名称为空。
server.xml配置
修改后var base = document.getElementById("base").href;获取的base值是http://localhost/index.html但
id="base" href="${base}">这里的href=""所以导致ajax的请求url : base + ‘/‘ +
url,出现了问题。
2.解决方案
(1)增加spring拦截器,获取HttpServletRequest,拼装绝对路径放在request的attribute属性中,ftl文件中直接${basePath}取值就可以了,静态文件
href="${basePath}/static/bower_components/bootstrap/dist/css/bootstrap.min.css"
rel="stylesheet">body中的隐藏表单
id="base" value="${basePath}" />,js获取path也可以通过隐藏表单获取var base = $(‘#base‘).val();
拦截器代码
public class BasePathInterceptor extendsHandlerInterceptorAdapter {private static Logger logger = Logger.getLogger(BasePathInterceptor.class);public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throwsException {
String scheme=request.getScheme();
String serverName=request.getServerName();int port =request.getServerPort();
String path=request.getContextPath();
String basePath= scheme + "://" + serverName + ":" + port +path;
logger.info(basePath);
request.setAttribute("basePath", basePath);return true;
}
}
spring-mvc.xml中配置拦截器,拦截顺序至上而下
用上绝对路径之后,就会避免很多因为引用路径上带来的问题。
(2)通过继承freemarker视图解析类org.springframework.web.servlet.view.freemarker.FreeMarkerView,重写exposeHelpers方法,在spring里配置自己的freemarker的视图解析器,在模板中就可以通过${base}获取。
MyFreeMarkerView 代码
public class MyFreeMarkerView extendsFreeMarkerView {private static final String CONTEXT_PATH = "base";
@Overrideprotected void exposeHelpers(Mapmodel,
HttpServletRequest request)throwsException {
model.put(CONTEXT_PATH, request.getContextPath());super.exposeHelpers(model, request);
}
}
spring-mvc.xml配置