八进制

少年壮志无烟抽

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  240 随笔 :: 0 文章 :: 3330 评论 :: 14 引用

我们都知道,"/"表示根目录,但在Servlet和JSP里同样是"/"却指向不同的位置。现在假设我的应用程序名为myapp,在myapp目录下有a.jsp和b.jsp这两个文件。要在servlet里转向(forward)到a.jsp,只要这样写:

RequestDispatcher dispatcher = request.getRequestDispatcher("/a.jsp");
dispatcher.forward(request,response);

这样是可以正常转向的,也就是说,servlet里的"/"是从myapp下开始的。而如果想在a.jsp里用一个链接用绝对路径指向b.jsp,下面的写法是不行的:

<a href="/b.jsp">b</a>

这样点链接后myapp的前缀就没有了,说明这个"/"是从服务器的root开始的。要解决这个问题除使用相对路径外,可以通过自己加前缀的方式,如下:

<a href="<%=request.getContextPath()%>/b.jsp">b</a>

代码会变得比较难看了。还有一种情况,就是在jsp头部使用静态include的时候,"/"是包含myapp的,例如在a.jsp里这样写是可以找到b.jsp的:

<%@include file="/b.jsp"%>

之所以会有这些不同,相信是由于jsp在转为servlet后部分或全部脱离了应用程序的context,也就是说,jsp生成的servlet是作为系统的一部分了。(这是我猜测的,不承担责任哦)

我自己对这些情况经常搞混,而且以上也只是在tomcat里实验的,其他服务器也许会有不同结果,所以写在这里方便查看。还有一些情况没写下来,例如在servlet里sendRedirect,以及在<jsp:include>里使用绝对路径会是什么结果,用到的时候会补上。

总之,很希望能找到一种最通用的解决方法,如果你有什么心得,欢迎发表意见哦。

posted on 2004-09-02 11:04 八进制 阅读(2428) 评论(4) 编辑 收藏

评论

#1楼 2004-09-02 16:45 jeasonzhao
我处理的时候也只能按照取得request.getContextPath()然后叠加,郁闷
 回复 引用   

#2楼 2004-11-19 16:53 wang
用<c:url value="/b.jsp" />啊!
 回复 引用   

#3楼[楼主] 2004-11-20 16:42 八进制      
to wang:这是jstl的用法吗,我还从没试过,是不是该学学呢。
 回复 引用 查看   

#4楼 2005-09-08 15:44 科比[未注册用户]
HTTP Status 503 - This application is not currently available

--------------------------------------------------------------------------------

type Status report

message This application is not currently available

description The requested service (This application is not currently available) is not currently available.


--------------------------------------------------------------------------------

Apache Tomcat/4.1.27




请问这是什么错啊?请指点,我要在注册中加几个表单,把信息写到mysql中!我在userinfo.java和userinfoTable.java都加上了,也都编译成功了,我把.class放到了classes下了,可是登陆就显示错误了!

 回复 引用