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

前言

在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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值