利用springMVC拦截器配置网站根目录

来源:互联网 发布:淘宝卖家会员关系管理 编辑:程序博客网 时间:2024/04/30 11:03

前言

在tomcat作为服务器的网站开发中,我们一般把静态的css,js和image资源放到网站根目录下(与WEB-INF同级目录)。我在jsp引入js等静态资源的时候需要这样:

<script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery.js"></script>

这样写完全不会有错,但是看着总是不爽,若是用struts2的话,直接在写个BaseAction定一个变量冲到值栈中页面就很方便取到。但是现在用的是springMVC,同样也想向下面那个写怎么办呢?

<script type="text/javascript" src="${URL}/js/jquery.js"></script>

思路一

很简单暴力,在每个请求里面都放进去一URL变量,

String baseUrl=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort() + request.getContextPath();request.setAttribute("URL", baseUrl);

至于为什么是用上面的方式获取网站跟目录而不是直接用request.getContextPath(),笔者还没深入研究。目前证实上面方式获取是没有错的,只有request.getContextPath()有时候会获取不到,以后再深入研究下。
分析:不用多说,这样写比在页面上用request.getContextPath()还膈应人,毫无疑问pass掉。

思路二

如果你的网站结构用的采用iframe的方式,那么可以在iframe外层界面请求的接口里加上上面代码,然后在外层iframe界面定义个变量url先获取值,在子页面就可以直接用了。

父界面:var url = “${URL}”;子界面引用就直接用parent.url;

分析:算了,我也圆不下去了,且不说你的网站是不是所有都用了iframe,就算是,那些写也不友好,就当笔者是凑字数的吧,忽略此条。

思路三

其实就是思路一的升级版,思路一是在每个请求里面自己手动加的,那我们完全可以利用springMVC拦截器的方式,在每个请求里面放上一个网站根目录变量。下面直接贴代码了。

springMVC配置文件里面加上:

<!-- 拦截器 -->    <mvc:interceptors>        <mvc:interceptor>            <mvc:mapping path="/**"/>            <bean class="com.jurlon.interceptor.SecurityInterceptor">            </bean>        </mvc:interceptor>    </mvc:interceptors>

新建一个拦截器类并获取网站根目录,然后将其放进request里面:

public class SecurityInterceptor implements HandlerInterceptor{    @Override    public void afterCompletion(HttpServletRequest arg0,            HttpServletResponse arg1, Object arg2, Exception arg3)            throws Exception {        // TODO Auto-generated method stub    }    @Override    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,            Object arg2, ModelAndView arg3) throws Exception {        // TODO Auto-generated method stub    }    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,            Object o) throws Exception {        String baseUrl =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort() + request.getContextPath();        request.setAttribute("URL", baseUrl);//网站根目录变量        return true;    }

前端引用js:

<script type="text/javascript" src="${URL}/js/jquery.js"></script>
1 0