jsp+servlet路径状态的测试

js|servlet

路径状态测试

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

资源

打成的WAR包
MyWAR

组成文件
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                          ip/a.jsp
../a.jsp               ip/war/a.jsp          ip/war/layer1/a.jsp               ip/war/a.jsp
../../a.jsp            ip/a.jsp              ip/war/a.jsp                      ip/a.jsp
../../../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" %>
       <%@ page errorPage = "url" %>时,
   这里url使用的“/”表示的根为“ip/war/”,包含了WAR路径

时间: 2024-08-04 14:19:14

jsp+servlet路径状态的测试的相关文章

做了个jsp&amp;amp;servlet路径状态的测试,花了偶几个小时,把结果贴出共享

js|servlet PS:这里怎么贴html阿,害得我还得格式化文本! 路径状态测试 目的测试jsp之间互相跳转,servlet跳转jsp环境下绝对路径和相对路径的状态寻找出一种通用的解决办法 资源 打成的WAR包MyWAR 组成文件JSPa.jsp b/    b.jsp    ccc.jsp Servlet TestServlet.java       mapping: /layer1/layer2/TestServlet 流程描述1. 由a.jsp直接跳转到b.jsp   或   由a.

jsp Servlet基础入门学习:HTTP应答状态

js|servlet     7.1 状态代码概述   Web服务器响应浏览器或其他客户程序的请求时,其应答一般由以下几个部分组成:一个状态行,几个应答头,一个空行,内容文档.下面是一个最简单的应答: HTTP/1.1 200 OKContent-Type: text/plain Hello World 状态行包含HTTP版本.状态代码.与状态代码对应的简短说明信息.在大多数情况下,除了Content-Type之外的所有应答头都是可选的.但Content-Type是必需的,它描述的是后面文档的M

深入理解和改进JSP/Servlet会话管理机制

js|servlet 在Web服务器端编程中,会话状态管理是一个经常必须考虑的重要问题.本文分析JSP/Servlet的会话管理机制及其所面临的问题,然后提出了一种改进的会话管理方法. 一.Servlet的会话管理机制 根据设计,HTTP是一种无状态的协议.它意味着Web应用并不了解有关同一用户以前请求的信息.维持会话状态信息的方法之一是使用Servlet或者JSP容器提供的会话跟踪功能.Servlet API规范定义了一个简单的HttpSession接口,通过它我们可以方便地实现会话跟踪. H

基于jsp+servlet图书管理系统之后台用户信息插入操作

前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研知识,趁着这学期的结束(马上就要放寒假了),写写最近练习的基于jsp+servlet+前台模板写的图书管理系统,一点一点写吧,详细的注释已经在代码上说明,希望对学习基于java开发的web方向的童鞋有所帮助.今天先把写的用户信息管理的添加(插入)操作分享一下,使用了一些特殊的知识,也会做一下说明.更

基于jsp+servlet图书管理系统之后台用户信息删除操作

上一篇的博客写的是修改操作,且附有源码和数据库,这篇博客写的是删除操作,附有从头至尾写的代码(详细的注释)和数据库! 此次删除操作的源码和数据库:http://download.csdn.net/detail/biexiansheng/9732955  自此,基于jsp+servlet开发的用户信息增删该查已经全部写完了,上面的链接是全部的代码,包含增删该查和数据库. 注意点: 1:删除操作使用的是伪删除.即只是不在页面显示了,但是还保存在数据库. 2:分页查询使用的是一个小工具,后面有时间把这

JSP+Servlet制作Java Web登录功能的全流程解析_JSP编程

0.新建web项目首先,在MyEclipse里新建java web项目,项目名为login.此时,项目中包含一个src文件夹和一个WebRoot文件夹,以及Java Web自带的JRE库文件夹和J2EE库文件夹.其中,在WebRoot文件夹下,包含了WEB-INF文件夹和一个index.jsp页面文件. 接下来,新建一个JSP页面,命名为login.jsp. 项目文件的结构如下: 1.设计login.jsp页面打开login.jsp页面后,修改第一行的代码为pageEncoding="utf-8

新书出版:Java Web开发技术大全——JSP+Servlet+Struts 2+Hibernate+Sp

本文为原创,如需转载,请注明作者和出处,谢谢! 作者:李宁 图书详细信息: ISBN:9787302195757 定价:79.8元 印次:1-1 装帧:平装 印刷日期:2009-4-23   图书简介: SSH是目前最流行的Java Web开发技术.本书通过对SSH中的各种技术循序渐进地讲解,使读者尽快掌握开发基于SSH的Web程序的方法.本书内 容包括Web客户端技术.JSP/Servlet技术.Struts 2(拦截器.类型转换.输入校验.上传和下载文件.Struts 2的各种标签.对 AJ

新书出版:Java Web开发技术大全——JSP+Servlet+Struts 2+Hibernate+Spring+Ajax (附源代码)

本文为原创,如需转载,请注明作者和出处,谢谢! 源代码下载 作者:李宁 图书详细信息: ISBN:9787302195757 定价:79.8元 印次:1-1 装帧:平装 印刷日期:2009-4-23 图书简介: SSH是目前最流行的Java Web开发技术.本书通过对SSH中的各种技术循序渐进地讲解,使读者尽快掌握开发基于SSH的Web程序的方法.本书内 容包括Web客户端技术.JSP/Servlet技术.Struts 2(拦截器.类型转换.输入校验.上传和下载文件.Struts 2的各种标签.

JSP/Servlet中的汉字编码问题

js|servlet|编码|汉字|问题 网上就 JSP/Servlet 中 DBCS 字符编码问题有许多优秀的文章和讨论,本文对它们作一些整理,并结合 IBM WebSphere Application Server 3.5(WAS)的解决方法作一些说明,希望它不是多余的.内容: 问题的起源 GB2312-80,GBK,GB18030-2000 汉字字符集及 Encoding 中文转码时´?´.乱码的由来 JSP/Servlet 汉字编码问题及在 WAS 中的解决办法 结束语 参考文章 1. 问