JSP,servlet的相对路径问题

本文探讨了在JSP和Servlet环境下相对路径的使用问题,特别是在转发操作中导致CSS样式失效的原因及解决方案,并介绍了如何利用basePath变量来统一资源路径。

前提:假设你的 Http 地址为 http://192.168.0.1/ 你的 web 应用为 webapp ,那么你的 web 应用 URL 为 http://192.168.0.1/webapp/

[问题1]

[描述]当在 jsp 中引入 css 时,如果其相对路径相对于当前 jsp 文件的,而在一个和这个 jsp 的路径不一样的 servlet 中 forwarder 这个 jsp 时,就会发现这个 css 样式根本没有起作用。

[分析]这是因为在 servlet 中转发时 css 的路径就是相对于这个 servlet 的相对路径而非 jsp 的路径了。所以这时候不能在 jsp 中用这样的路径: <link href="one.css" rel="stylesheet" type="text/css"> 或者 <link href="../../one.css" rel="stylesheet" type="text/css"> 类似 href="one.css" 和 ../../one.css 的 html 相对路径是相对于引用这个 css 的文件的相对路径。而在 servlet 中转发时就是相对于这个 servlet 的相对路径了,因为 jsp 路径和 servlet 路径是不一样的,所以这样的引用肯定是出错的。

[解决]所以这个时候,要用站点根目录,就是相对于 http://192.168.0.1/ 的目录,以“ / ”开头。

因此上述错误应更正为 href=”/webapp/one.css” 类似的站点根目录的相对目录。这样在 servlet 转发后和 jsp 中都是相对于站点根目录的相对路径,就能正确使用所定义的 css 样式了。

 

[问题2]

在MyEclispe中的JSP的两种模板,一种是Advanced,一种是Basic
  两者的区别也会涉及到路径问题,如图片的路径,链接的路径
 
  Advanced Template中页面的代码多了以下代码:
  <%
      String path = request.getContextPath();
      String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  %>

   <base href="<%=basePath%>">

其中<base href="<%=basePath%>">必须放在<head></head>中

这段代码的作用是设置基础路径的,basepath为变量.<base href="">标签的用处是解决编程时候的相对路径问题.

设置了<base href="<%=basePath%>">
页面上图片,链接的路径指的都是当前应用程序的根路径下.

当然,这个base还有一个用法,如在head部分加上这么一行: <base href="_blank"> ,就是默认所有链接在新窗口打开

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值