小小<base>标签在web开发中的大作用

    稍微上点规模的项目,通常都会为不同模块或功能的页面,js,css等资源建立不同的路径,或者对不同的servlet等配置不同的虚拟路径。这时,关于各种路径的包含和转向问题长期困扰开发人员。
    按照一般的做法,就是要理解web对资源的包含和转向原理,即使:都是从当前所在位置起,根据路径去寻找目标资源。
     比如:
     1.当前位置在path1下的test1.jsp,在test1.jsp中包含style目录下的css文件drp.css。那么test1.jsp中就应该这么写:
< link rel ="stylesheet" href ="../style/drp.css" >
,即从当前路径回退一个到跟目录,然后从根目录下找style/drp.css。
    2.又:在test1.jsp中js函数中访问一个配置虚拟路径的servlet,配置是这样的
< url-pattern >/servlet/product/AddProductServlet </ url-pattern >
那么就应该这样访问:
../servlet/product/AddProductServlet
,即从当前路径回退一个到跟目录,然后从根目录下找servlet/product/AddProductServlet
   3.又:在AddProductServlet中作转向
req.getRequestDispatcher( "/path2/test2.jsp").forward(req, resp);
,而在test2.jsp中又包含style目录下的css文件drp.css。那么在test2.jsp中应该这么写:
< link rel ="stylesheet" href ="../../style/drp.css" >
,即从当前路径(servlet/product)回退两次到根目录,然后从根目录下找style/drp.css。

这只是个简单的例子,并没有牵扯到多个servlet转向同一个页面等复杂情况。怎么样?web开发中的路径问题够头疼的了吧?

现在我们看看使用<base>标签是怎么轻松解决这个问题的。
首先,在test1.jsp和test2.jsp中都添加这样的代码:

<%
      String path = request.getContextPath();  
      String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
            %>
... ....
< base href="<%=basePath % >">
至于添加在哪个位置就不用多说了吧,呵呵。
  那么再在两个页面中使用任何资源都从跟目录查找,在js中访问任何资源只需在前面加上<%=basePath %>即可。比如上例中test1.jsp的两处分别应该这样写:

< link rel ="stylesheet" href ="style/drp.css" >
... ...
< %=basePath % >servlet/product/AddProductServlet
同样,test2.jsp中之处应该这么写:
< link rel ="stylesheet" href ="style/drp.css" >
无论他们之间引用的资源再多,关系再复杂,只需要记住一句话: <base>标签让本页面所有引用资源都从根目录找,但它只对页面元素起作用,对js元素无效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值