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>里使用绝对路径会是什么结果,用到的时候会补上。

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

  • 相关阅读:
    Visual Studio 2010CTP的安装
    Crystal Reports中的数据访问
    Web.config配置文件详解1
    asp.net 面向对象方式的传值
    DataSet导出到Excel
    asp.net 身份验证
    Ini文件操作类
    asp.net环境下配置kindEditor文本编辑器
    验证视图状态 MAC 失败解决方法
    Web.config配置文件详解2
  • 原文地址:https://www.cnblogs.com/bjzhanghao/p/38816.html
Copyright © 2011-2022 走看看