`
xiebh
  • 浏览: 604019 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

JAVA WEB 开发中路径问题的总结

阅读更多
   用Java开发Web应用时,无论是Jsp页面、Servlet或是web.xml配置文件中都涉及到路径的问题,而这又是初学者较容易混淆的地方,往往不知道如何写路径。其实服务器端和客户端在处理路径的方式上不一致,因此需要根据不同的情况写出正确的路径。下面通过例子来说明。

   假设Web应用road中,应用的根路径下有一个dir1文件夹和dir2文件夹。c.jsp在dir1中,a.jsp和b.jsp在dir2中。Web应用的结构如图所示。

       + root
           -dir1
               c.jsp
           -dir2
               a.jsp
               b.jsp

  1. JSP页面中正确的路径表示
  2. 假设在a.jsp页面中有两个链接,分别链接到b.jsp和c.jsp页面。
    • 直接写路径表示和页面在同一个文件夹下面,如<a href="b.jsp">b.jsp</a>
    • "../"表示当前文件夹的上一级文件夹(相对路径),如:
    •      <a href="../dir2/b.jsp">b.jsp</a>,
           <a href="../dir1/c.jsp">c.jsp</a>
    • "/"表示 http://机器IP:8080(绝对路径),如:
    •      <a href="/road/dir2/b.jsp">b.jsp</a>
           <a href="/road/dir1/c.jsp">c.jsp</a>

  3. Servlet中正确的路径表示
    • 转发请求时:"/"表示“http://服务器IP:8080/Web应用名”,例如:
    •     String forward = "/dir1/c.jsp";
          RequestDispatcher rd = request.getQRequestDispatcher(forward);
    • 重定向时:“/”  表示“http://机器IP:8080”,而通过request.getContextPath()得到的是:“http://机器IP:8080/Web应用名”,例如:
    •      String str =  request.getContextPath();
           response.sendRedirect(str + "/dir1/c.jsp");
  4. 配置文件web.xml中
  5.    url-mapping中,"/"表示“http://IP地址:8080/Web应用名”


××总结××
  • 在浏览器端:“/”表示的是一台WEB服务器,“http://机器IP:8080”
  • 在服务器端(请求转发):“/”表示的是一个WEB服务器端的应用,“http://机器IP:8080/Web应用”
  • 在服务器端(重定向):“/”表示的是一个WEB服务器,“http://机器IP:8080”

分享到:
评论
15 楼 wangking717 2010-10-29  
<div class="quote_title">smallsnake 写道</div>
<div class="quote_div">
<div class="quote_title">ch_space 写道</div>
<div class="quote_div">建议去掉什么新手贴选项,只留下精华选项,由大家投票产生。</div>
<p>这个也行??<br>不过,统一采用</p>
<ol style="background-color: #ccffff;">
<li><span style="background-color: #ffffff; color: #000000;">&lt;%</span></li>
<li><span style="background-color: #ffffff; color: #000000;">    String path = request.getContextPath();</span></li>
<li><span style="background-color: #ffffff; color: #000000;">    String basePath = request.getScheme() + "://"</span></li>
<li><span style="background-color: #ffffff; color: #000000;">            + request.getServerName() + ":" + request.getServerPort()</span></li>
<li><span style="background-color: #ffffff; color: #000000;">            + path + "/";</span></li>
<li><span style="background-color: #ffffff; color: #000000;">%&gt;</span></li>
<li><span style="background-color: #ffffff; color: #000000;">&lt;%@ include file="/common/commontag.jsp"%&gt;</span></li>
<li><span style="background-color: #ffffff; color: #000000;">&lt;html&gt;</span></li>
<li><span style="background-color: #ffffff; color: #000000;"> &lt;head&gt;</span></li>
<li><span style="background-color: #ffffff; color: #000000;"> &lt;link rel="stylesheet" type="text/css"</span></li>
<li><span style="background-color: #ffffff; color: #000000;"> href="&lt;%=basePath%&gt;common/calendar/jquery.datepick.css"&gt;</span></li>
<li><span style="background-color: #ffffff; color: #000000;"> &lt;script type="text/javascript"</span></li>
<li><span style="background-color: #ffffff; color: #000000;"> src="&lt;%=basePath%&gt;common/js/jquery-1.3.2.js"&gt;&lt;/script&gt;</span></li>
<li><span style="background-color: #ffffff; color: #000000;"> &lt;script type="text/javascript"</span></li>
<li><span style="background-color: #ffffff; color: #000000;"> src="&lt;%=basePath%&gt;common/calendar/jquery.datepick.js"&gt;&lt;/script&gt;</span></li>
<li><span style="background-color: #ffffff; color: #000000;"> &lt;script type="text/javascript"</span></li>
<li><span style="background-color: #ffffff; color: #000000;"> src="&lt;%=basePath%&gt;common/calendar/jquery.datepick-zh-CN.js"&gt;&lt;/script&gt;</span></li>
</ol>
<p> </p>
</div>
<p>这样写累不哦。</p>
<pre name="code" class="java">&lt;%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%&gt;
&lt;%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%&gt;

&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;base href="&lt;%=basePath%&gt;"&gt;
    &lt;title&gt;My JSP 'index.jsp' starting page&lt;/title&gt;
  &lt;/head&gt;
 
  &lt;body&gt;
    所有资源文件路径相对于basePath
  &lt;/body&gt;
&lt;/html&gt;</pre>
 
14 楼 mercyblitz 2010-07-23  
楼主没有考虑Context path自定义,和虚拟目录的情况。
13 楼 joliny 2010-07-23  
用base标签不就可以了。
12 楼 matychen 2010-07-23  
theskyofsky 写道
head.jsp
<c:set var="ctx" value="${pageContext.request.contextPath}"/>
<script>var z_ctx = "${ctx}";</script>

11 楼 smallsnake 2010-07-23  
<div class="quote_title">ch_space 写道</div>
<div class="quote_div">建议去掉什么新手贴选项,只留下精华选项,由大家投票产生。</div>
<p>这个也行??<br>不过,统一采用</p>
<ol style="background-color: #ccffff;">
<li><span style="background-color: #ffffff; color: #000000;">&lt;%</span></li>
<li><span style="background-color: #ffffff; color: #000000;">    String path = request.getContextPath();</span></li>
<li><span style="background-color: #ffffff; color: #000000;">    String basePath = request.getScheme() + "://"</span></li>
<li><span style="background-color: #ffffff; color: #000000;">            + request.getServerName() + ":" + request.getServerPort()</span></li>
<li><span style="background-color: #ffffff; color: #000000;">            + path + "/";</span></li>
<li><span style="background-color: #ffffff; color: #000000;">%&gt;</span></li>
<li><span style="background-color: #ffffff; color: #000000;">&lt;%@ include file="/common/commontag.jsp"%&gt;</span></li>
<li><span style="background-color: #ffffff; color: #000000;">&lt;html&gt;</span></li>
<li><span style="background-color: #ffffff; color: #000000;"> &lt;head&gt;</span></li>
<li><span style="background-color: #ffffff; color: #000000;"> &lt;link rel="stylesheet" type="text/css"</span></li>
<li><span style="background-color: #ffffff; color: #000000;"> href="&lt;%=basePath%&gt;common/calendar/jquery.datepick.css"&gt;</span></li>
<li><span style="background-color: #ffffff; color: #000000;"> &lt;script type="text/javascript"</span></li>
<li><span style="background-color: #ffffff; color: #000000;"> src="&lt;%=basePath%&gt;common/js/jquery-1.3.2.js"&gt;&lt;/script&gt;</span></li>
<li><span style="background-color: #ffffff; color: #000000;"> &lt;script type="text/javascript"</span></li>
<li><span style="background-color: #ffffff; color: #000000;"> src="&lt;%=basePath%&gt;common/calendar/jquery.datepick.js"&gt;&lt;/script&gt;</span></li>
<li><span style="background-color: #ffffff; color: #000000;"> &lt;script type="text/javascript"</span></li>
<li><span style="background-color: #ffffff; color: #000000;"> src="&lt;%=basePath%&gt;common/calendar/jquery.datepick-zh-CN.js"&gt;&lt;/script&gt;</span></li>
</ol>
<p> </p>
10 楼 ch_space 2010-07-23  
建议去掉什么新手贴选项,只留下精华选项,由大家投票产生。
9 楼 ch_space 2010-07-23  
其实总结的很好,有些人做了几年了都没彻底搞清楚。JE的投票太那个了,新手贴也是人家辛辛苦苦总结出来的,干嘛要减分?真是不厚道。。。
8 楼 bingki 2010-07-23  
恩,getContextPath 我确实不知道!
7 楼 smiky 2010-07-23  
我想这些问题真的就这么简单吗,这么多投新手贴的,你们很牛B吗?
我想很多人在servlet中或是请求转发的时候不用getContextPath估计不知道怎么写
6 楼 笑我痴狂 2010-07-22  
只要知道服务器跳转和客户端跳转的根路径即可

其他的问题就都可以解决了

注意的是服务器跳转不可以使用相对路径 , 但有些时候又可以 ,确实是个头痛的问题
5 楼 francis.xjl 2010-07-22  
我更倾向于均使用绝对路径“/b/a/c.jsp”,不知道这样有没有什么弊端?
4 楼 zhao103804 2010-07-22  
ywlqi 写道
不管在哪个目录下,我要求组员<%=request.getContextPath()%>/dir1/c.jsp,这样写路径,css js 图片 超链,都一样,../的方式容易搞错


../的方式是容易出一些问题。。
我现在开发就是用你说的方法,不容易出错
3 楼 theskyofsky 2010-07-22  
head.jsp
<c:set var="ctx" value="${pageContext.request.contextPath}"/>
<script>var z_ctx = "${ctx}";</script>
2 楼 APieceOfRedCloth 2010-07-22  
<a href="/root/dir2/b.jsp">b.jsp</a>
<a href="/root/dir1/c.jsp">c.jsp</a>?
1 楼 ywlqi 2010-07-22  
不管在哪个目录下,我要求组员<%=request.getContextPath()%>/dir1/c.jsp,这样写路径,css js 图片 超链,都一样,../的方式容易搞错

相关推荐

Global site tag (gtag.js) - Google Analytics