JSP 路径问题

概念区分:
    服务器端的相对地址:
        指的是相对于你的web应用的地址,是在服务器端解析的,也就是说这时候在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http://192.168.0.1/WebApp/的。如:forward,sendRedirect均是使用的这个地址
    客户端的地址:
        是指html和javascript中的相对地址,他们是由客户端浏览器解析的,相对地址都是相对于http://192.168.0.1/

问题:
    1. 采用相对路径遇到的问题
        a. 相对路径固然比较灵活,但如果想复制页面内的代码却变得比较困难,因为不同的页面具有不同的相对路径,复制后必须修改每一个连接的路径。
        b. 如果页面被多于一个的页面所包含,那么被包含页面中的相对路径将是不正确的。
        c. 在请求转发的过程中会出现相对路径变化的问题。
        解决以上问题似乎只有使用绝对路径了。

    2. 采用绝对路径遇到的问题
         随着不同的Web应用发布方式,绝对路径的值也不同。如Web应用发布为 WebApp,则路径均为"/Web/App/...",但发布为另一应用时改为MyApp,这时路径就不对了,也许这个情况比较少,但还是存在的。

解决方案:
    方法一:直接采用绝对路径 (不推荐)
               <%
               String path = request.getContextPath();
               // 获得本项目的地址(例如: http://localhost:8080/WebApp/)赋值给 basePath 变量
               String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
               // 将 "项目路径basePath" 放入pageContext中,待以后用EL表达式读出。
               pageContext.setAttribute("basePath",basePath);
               %>
               <a href="${pageScope.basePath}/*.jsp">

    方法二:利用html中的 <base>标签(推荐,也是MyEclipse默认采取的方式)
               <base> 元素规定了页面中所有链接的基准 URL
               默认情况下,页面中的链接(包括样式表、脚本和图像的地址)都是相对于当前页面的地址

               <%
               String path = request.getContextPath();
               // 获得项目完全路径(如:http://localhost:8080/WebApp/):
               String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
               %>
               <base href=" <%=basePath%">

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值