zoukankan      html  css  js  c++  java
  • 关于Servlet/JSP里"/"的用法

    我们都知道,"/"表示根目录,但在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>里使用绝对路径会是什么结果,用到的时候会补上。

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

  • 相关阅读:
    Oracle Function REGEXP
    Asp.net 注册IIS
    SAP모듈
    C# 程序中,不使用TNS File 中的服务名进行数据库连接
    跟我一起学XNA(2)让物体动起来②(附源码)
    ubuntu显卡的几个帖子
    每秒改变一次背景颜色以及由此引发的一些有趣的小事情(.net方向)
    to myself
    vi编辑器上下左右键盘变成ABCD
    一个最简单的linux hello world模块
  • 原文地址:https://www.cnblogs.com/bjzhanghao/p/38816.html
Copyright © 2011-2022 走看看