• 选学校
  • 高中毕后选择什么学校好
  • 启蒙星
  • 北大青鸟课程介绍
  • 北大青鸟助你走上高级软件工程师修炼之路
  • 转行不是梦,学北大青鸟IT培训
  • 北大青鸟辉煌12年
  • 株洲北大青鸟校区升级

您现在的位置:株洲北大青鸟 >> >> 师资力量>> 技术天地

师资力量
开班信息
输入姓名手机号码预约试听课程
姓  名:*
手机号:*
创业摇篮班
开班日期:10月15日
招生人数:25
就业直通班
开班日期:10月31日
招生人数:25
就业精英班
开班日期:9月13日
招生人数:已满
技术天地
  • jsp+servlet 路径状态的测试
  • 发表日期:2008/5/19 16:42:54 阅读数:404  
  •  
  •  
    jsp+servlet路径状态的测试
    株洲北大青鸟  易珊静

    目的

    测试jsp之间互相跳转,servlet跳转jsp环境下绝对路径和相对路径的状态寻找出一种通用的解决办法

    资源

    1.打成的WAR包
    MyWAR.war
    2.组成文件
    JSP:
    a.jsp
    b/
    b.jsp
    ccc.jsp
    Servlet:
    TestServlet.java       mapping: /layer1/layer2/TestServlet

    流程描述

    1. 由a.jsp直接跳转到b.jsp
       或由a.jsp提交到TestServlet,TestServlet根据a的提交选择相应跳转方式(forward/sendRedirect)
       然后跳转到b.jsp
    2. b.jsp包含一系列超链,来显示不同方式的跳转后超链的情况
       /a.jsp
       ../a.jsp
       ../../a.jsp
       ../../../a.jsp
     
       ccc.jsp
       /b/ccc.jsp
       ../ccc.jsp
       ../b/ccc.jsp
       ../../ccc.jsp
       ../../b/ccc.jsp
       ../../../ccc.jso
       ../../../b/ccc.jsp
     
       [contextPath]/b/b.jsp
     

    测试结果

    短语替换
    http://localhost:8080/           =>  ip/
    /MyWAR/                         =>  war/ 
    http://localhost:8080/MyWAR/     =>  ip/war/
    /MyWAR                           =>  [contextPath]  (request.getContextPath())
     
     
    跳转方式                     直接跳转<a ..>                   servlet/forward                       servlet/sendRedirect
                                                                          requestDispatcher.forward     response.sendRedirect

    ------------------------------+---------------------------------+----------------------------------+--

    servlet中跳转的路径         x                            /b/b.jsp                       /war/b/b.jsp
    ------------------------------+---------------------------------+----------------------------------+--
    跳转后浏览器的地址栏       ip/war/b/b.jsp            ip/war/layer1/layer2/TestServlet    ip/war/b/b.jsp
    ------------------------------+---------------------------------+----------------------------------+--
    b.jsp中的链接列表         浏览器状态条出现的链接地址            <a href="这里的描述"
    ---------------------+---------------------+----------------------------------+------------------------
    /a.jsp                 ip/a.jsp              ip/a.jsp                   war/a.jsp
    ../../a.jsp            ip/a.jsp              ip/war/a.jsp                      ip/a.j        ip/a.jsp
    ../a.jsp               ip/war/a.jsp          ip/war/layer1/a.jsp               ip/sp
    ../../../a.jsp         ip/a.jsp              ip/a.jsp                          ip/a.jsp

    ccc.jsp                ip/war/b/ccc.jsp      ip/war/layer1/layer2/ccc.jsp      ip/war/b/ccc.jsp
    /b/ccc.jsp             ip/b/ccc.jsp          ip/b/ccc.jsp                      ip/b/ccc.jsp
    ../ccc.jsp             ip/war/ccc.jsp        ip/war/layer1/ccc.jsp             ip/war/ccc.jsp
    ../b/ccc.jsp           ip/war/b/ccc.jsp      ip/war/layer1/b/ccc.jsp           ip/war/b/ccc.jsp
    ../../ccc.jsp          ip/ccc.jsp            ip/war/ccc.jsp                    ip/ccc.jsp
    ../../b/ccc.jsp        ip/b/ccc.jsp          ip/war/b/ccc.jsp                  ip/b/ccc.jsp
    ../../../ccc.jsp       ip/ccc.jsp            ip/ccc.jsp                        ip/ccc.jsp
    ../../../b/ccc.jsp     ip/b/ccc.jsp          ip/b/ccc.jsp                      ip/b/ccc.jsp


    [contextPath]/b/b.jsp  ip/war/b/b.jsp        ip/war/b/b.jsp                    ip/war/b/b.jsp
    ---------------------+---------------------+----------------------------------+------------------------


    总结

    由上面的列表看出,只有最下面一行是有实际意义而且无论以任何方式跳转链接地址都是正确无误的
    1. 在jsp中的“/”表示的根为“ip”,不包含WAR路径
    2. 在servlet中以forward方式使用的“/”表示的根为“ip/war/”,包含了WAR路径
    3. 在servlet中以sendRedirect方式使用的“/”表示的根为ip,不包含WAR路径
    4. 在servlet中以forward方式跳转,则浏览器的地址栏仍然为此servlet,不会改变
    5. 在servlet中以sendRedirect方式跳转,则浏览器的地址栏改变为目的路径
    6. 相对路径的确定是以浏览器的地址栏显示的路径为基准的,而非具体的目录结构,所以
       跳转到同目录下的某个页面使用<a href="文件名">link</a>这种方式不是永久成立的
       (做asp的人不要惊讶,这里说的jsp和servlet :))
    7. 为了避免jsp跳jsp,servlet跳jsp,forward方式跳转,sendRedirect跳转产生的路径问题,
       对于jsp和使用sendRedirect跳转的servlet,采用直接使用带
       容器路径[String request.getContextPath()]的绝对路径就可以彻底解决,即:
        1)<%
              String contextPath = request.getContextPath();
              String url = contextPath + "/user/login.jsp";
           %>
           
           <a href="<%=url%>"> login</a>
       2) ....
          String contextPath = request.getContextPath();
          String targetPath = contextPath + "/user/login.jsp";
          RequestDispatcher rd = request.getRequestDispatcher(targetPath);
          rd.forward(request, response);
          ......
       对于使用forward跳转的servlet,则不要加容器路径,否则就重复出现容器路径,原因参见 2

    8. 如果使用的“../”过多也不会出现严重问题,“../”最多使链接到达“ip/”
    9. 另外,在使用
           <jsp:include page = "url" flush="true"/>
           <%@ include file="url" %>
上一篇:让XP不再越用越慢
下一篇:单例模式的详细讲解流程
分享到:

版权所有 ©株洲健坤科技职业培训学校    学校地址:株洲市天元区黄山路205号健坤大厦(天元区消防中队对面)

咨询报名热线:400-8812-866    邮箱地址:4008812866@b.qq.com   备案号: 湘ICP备10202015号  

北大青鸟学费是多少 湖南北大青鸟怎么样
株洲北大青鸟好不好 株洲北大青鸟学费多少 株洲北大青鸟学校这么样
秒速时时彩走势