getRequestDispatcher是服务器内部跳转,地址栏信息不变,只能跳转到web应用内的网页。 
sendRedirect是页面重定向,地址栏信息改变,可以跳转到任意网页。 
这两条网上都查得到,但看着比较乱,现提供我测试的结果(仅供参考): 
1.getRequestDispatcher分成两种,可以用request调用,也可以用getServletContext()调用 
   不同的是request.getRequestDispatcher(url)的url可以是相对路径也可以是绝对路径。 
   而this.getServletContext().getRequestDispatcher(url)的url只能是绝对路径。 
 
注:request.getRequestDispatcher(url)之所以可以使用相对路劲,是因为在getRequestDispatcher(url)方法中封装了ServletContext.getRealPath()以获得相应的项目根路径,再通过字符串相加,从而可以获得一个完整的路径
 
 
Java代码  
  1. SecondServlet
  2. request.setAttribute("lover", "tom");
  3. request.getSession().setAttribute("lovered", "joe");
  4. request.getRequestDispatcher("/third?name=jay").forward(request, response);
  5. request.getRequestDispatcher("third?name=jay").forward(request, response);
  6. this.getServletContext().getRequestDispatcher("/third?name=jay").forward(request, response);
  1. ThirdServlet
  2. PrintWriter out = response.getWriter();
  3. String name = request.getParameter("name");
  4. out.println(request.getContextPath()+"<hr/>");
  5. out.println("name="+name+"<hr/>");
  6. out.println("lover="+request.getAttribute("lover")+"<hr/>");
  7. out.println("lovered="+request.getSession().getAttribute("lovered")+"<hr/>");

结果显示,地址栏信息仍为http://localhost:8080/Test/second,这三种方式都可以传值到第二个Servlet。

2.sendRedirect只能用response调用,可以用相对路径(直接用),也可以用相对路径(需加应用路径)

  1. SecondServlet
  2. request.setAttribute("lover", "tom");
  3. request.getSession().setAttribute("lovered", "joe");
  4. response.sendRedirect("third?name=jay");
  5. response.sendRedirect(request.getContextPath()+"/third?name=jay");
  1. ThirdServlet
  2. PrintWriter out = response.getWriter();
  3. String name = request.getParameter("name");
  4. out.println(request.getContextPath()+"<hr/>");
  5. out.println("name="+name+"<hr/>");
  6. out.println("lover="+request.getAttribute("lover")+"<hr/>");
  7. out.println("lovered="+request.getSession().getAttribute("lovered")+"<hr/>");

结果显示,地址栏信息变为http://localhost:8080/Test/third?name=jay,只有request.getAttribute("lover")获取不到值,session范围及url路径后的传值在第二个Servlet都可以获取到值。

  1. response.sendRedirect("http://www.baidu.com");

getRequestDispatcher 和sendRedirect区别及路径问题的更多相关文章

  1. JSP的getRequestDispatcher()与sendRedirect()的区别

    getRequestDispatcher()与sendRedirect()的区别   1.request.getRequestDispatcher()是请求转发,前后页面共享一个request ; r ...

  2. 细谈getRequestDispatcher()与sendRedirect()的区别

    问题?细谈getRequestDispatcher()与sendRedirect()的区别 首先我们要知道: (1)request.getRequestDispatcher()是请求转发,前后页面共享 ...

  3. 织梦CMS(dedecms)栏目属性及系统封面模板、列表模板、文章模板区别和路径设置解答

    问题一:(织梦"栏目管理"的"常规选项"中3个栏目属性分析?) 织梦CMS的栏目属性分成三种, -->最终列表栏目 -->频道封面 -->外部 ...

  4. getRequestDispatcher()与sendRedirect()的区别

    1.request.getRequestDispatcher()是请求转发,前后页面共享一个request ; response.sendRedirect()是重新定向,前后页面不是一个request ...

  5. request.getRequestDispatcher()和response.sendRedirect()区别

    一.request.getRequestDispatcher().forward(request,response): 1.属于转发,也是服务器跳转,相当于方法调用,在执行当前文件的过程中转向执行目标 ...

  6. Javaweb中的请求路径的相关总结

    重定向和转发相对路径和绝对路径问题 ​ 注意:转发和重定向的URLString前有加 / 为绝对路径 反之为相对路径 1.假设通过表单请求指定的Url资源 action="LoginServ ...

  7. HttpServlet RequestDispatcher sendredirect和forward

    Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的的通用接口 ...

  8. 关于tomcat内路径跳转的一些思考

    初学jsp+servlet时经常碰上的几个错误:404.路径正确但页面没有任何内容.样式和图片丢失. 这几个错误曾经让我在debug时头大,现在总结一下,其实它们都跟路径有关,正是因为没有处理好路径跳 ...

  9. Servlet学习笔记06——什么是转发,路径,状态管理?

    1.include指令 (1)作用: 告诉容器,在将jsp转换成Servlet时,将 某个文件的内容插入到该指令所在的位置. (2)语法: <%@ include file="&quo ...

随机推荐

  1. mindmanager2018官方下载地址

      mindmanager2018官方下载地址 CreationTime--2018年6月6日09:09:56 Author:Marydon 找了很多都是假的链接地址,流氓软件,根本不能输入许可密钥, ...

  2. js 将网页生成为html保存访问

    2012-04-03 今天实现了一个需求,主题是将浏览中的网页生成html保存起来,记录访问url,挂在公司网站上做案例.     首先忙活了N久的是去搜索生成html的js函数.   什么IE自带的 ...

  3. Eclipse使用教程之精华篇

    插件安装方法 插件大概有三种安装方法: 第一种:知道在线安装地址.Eclipse→Help→Install New Software...→地址栏(Work with)中输入安装地址→勾选要安装的插件 ...

  4. Python 实int型和list相互转换 现把float型列表转换为int型列表 把列表中的数字由float转换为int型

    第一种方法:使用map方法 >>> list = [, ] #带有float型的列表 >>> int_list = map(int,list) #使用map转换 & ...

  5. Mysql 字符串函数 详解

    字符串函数是最常用的一种函数了,如果大家编写过程序的话,不妨回过头去看看自己使用过的函数,可能会惊讶地发现字符串处理的相关函数占已使用过的函数很大一部分.MySQL中字符串函数也是最丰富的一类函数,表 ...

  6. 如何利用webmin在Linux主机中添加网站

    Linux系统因其高效稳定而受到广大用户的推崇与青睐,然后其管理的复杂性也使很多用户望而却步,动弹不得.为了降低 Linux系统的管理难度,更有效方便的使用该系统,我司所有Linux主机或VPS系统均 ...

  7. 关于TimeSpan

    一秒是1000万个tick TimeSpan ts = * ); Console.WriteLine(ts); Console.Read(); //print 00:00:01 并且在TimeSpan ...

  8. atitit.软件gui按钮and面板---os区-----软链接,快捷方式

    atitit.软件gui按钮and面板---os区-----软链接,快捷方式 1. 硬链接 1 2. 二.软链接(符号链接)LN 1 3. 三.删除链接 2 4. 区别 2 5. 参考 3 1. 硬链 ...

  9. 基于FPGA的PCIe接口实现(具体讲解了数据流向)

    时间:2014-12-09 来源:西安电子科技大学电子工程学院 作者:姜 宁,陈建春,王 沛,石 婷 摘要 PCI Express是一种高性能互连协议,被广泛应用于网络适配.图形加速器.网络存储.大数 ...

  10. netty内存泄漏

    关于netty本身内存泄漏的资料,在此记录一下:https://blog.csdn.net/hannuotayouxi/article/details/78827499