Servlet中的请求转发和重定向
跳转和重定向
有的时候客户端请求到达服务端后需要对请求重新转发到其它Servlet甚至别的服务器,这就需要跳转和重定向。
区别
一般来说,跳转是服务器内部跳转,例如将请求从一个Servlet转发给另外一个Servlet处理,是内部之间的转发。而重定向是告诉客户端去别的地方请求资源。举个例子,某人需要去找人事部门打印收入证明,而收入证明需要去财务部盖章。跳转的处理方式是:人事部门的人告诉你,你等一下,我去把收入证明打印出来,然后我再去找财务部盖章,所有资料准备好后,我再全部交给你。重定向的处理方式是:人事部门把收入流水给你打印出来,然后告诉你说,他们的工作已经做完了,现在需要你自己去找财务部盖章。
这就是跳转和重定向的本质区别,服务器跳转的时候,客户端地址栏不改变,而客户端重定向的时候,地址栏改变。
跳转示例
跳转需要用到RequestDispacher对象,该对象可以从HttpRequest或者ServletContext中获取。
下面是从HttpRequest对象中调用getRequestDispacher()方法获取RequestDispacher并跳转示例代码:
|
protected void doPost(HttpServletRequest req, HttpServletResponse resp) { RequestDispatcher rd = null; String region = req.getParameter("region"); System.out.println("region: " + region); switch (region) { case "asia": { System.out.println("asia~~~"); rd = req.getRequestDispatcher("/asiaHandler.jsp"); break; } case "emea": { System.out.println("emea~~~"); rd = req.getRequestDispatcher("/emeaHandler.jsp"); break; } case "ams": { System.out.println("ams~~~"); rd = req.getRequestDispatcher("/amsHandler.jsp"); break; } default: { System.out.println("default~~~"); rd = req.getRequestDispatcher("/html/error.html"); break; } } try { rd.forward(req, resp); } catch (ServletException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } |
下面是从ServletContext对象中调用getNamedDispacher()方法获取RequestDispacher对象并跳转示例代码:
|
protected void doPost(HttpServletRequest req, HttpServletResponse resp) { RequestDispatcher rd = null; ServletContext ctx = this.getServletContext(); String region = req.getParameter("region"); System.out.println("region: " + region); switch (region) { case "asia": { rd = ctx.getNamedDispatcher("AsiaHandler"); break; } case "emea": { rd = ctx.getNamedDispatcher("EmeaHandler"); break; } case "ams": { rd = ctx.getNamedDispatcher("AMSHandler"); break; } } try { rd.forward(req, resp); } catch (ServletException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } |
下面演示了用ServletContext对象调用getRequestDispacher()方法获取RequestDispacher对象,然后实现跳转:
|
protected void doPost(HttpServletRequest req, HttpServletResponse resp) { RequestDispatcher rd = null; ServletContext ctx = this.getServletContext(); String region = req.getParameter("region"); System.out.println("region: " + region); switch (region) { case "asia": { rd = req.getRequestDispatcher("/asiaHandler.jsp"); break; } case "emea": { rd = req.getRequestDispatcher("/emeaHandler.jsp"); break; } case "ams": { rd = req.getRequestDispatcher("/amsHandler.jsp"); break; } } try { rd.forward(req, resp); } catch (ServletException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } |
请求重定向是服务器发给浏览器一个新的地址,让浏览器去请求新的地址。重定向需要用到HttpResponse对象调用sendRedirect()方法。
重定向示例:
|
protected void doPost(HttpServletRequest req, HttpServletResponse resp) { try { resp.sendRedirect("http://www.bing.com"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } |
Servlet中的请求转发和重定向的更多相关文章
- JSP中的请求转发与重定向
在说请求转发和重定向之前,得了解下JSP九大内置对象中的response和request response:将服务器端数据发送到客户端,可通过在客户端浏览器中显示,用户浏览页面的重定向以及在客户端创建 ...
- servlet中的请求响应与重定向区别
一.概念 请求响应(转发):将客户端请求转发另一个servlet或者jsp页面------------------------getRequestDispatcher()方法 重定向: 返回一个连接给 ...
- Servlet中的请求转发RequestDispatcher接口的forword与Include的区别
RequestDispatcher接口中具有两个方法: forward() 与 include() 均 可完成请求 的转发.区别如下: forword(): 使用该方法,则当前 的 Servlet 中 ...
- javaweb servlet中使用请求转发乱码
乱码的方式有很多,这里指出一种不容易想到的 *请确保您的页面单独访问正常,经过servlet请求转发时,有PrintWriter out = response.getWriter()不正常,没有正常 ...
- Servlet中的请求转发
请求转发时,传递到下一个servlet的request和response可能内存地址不同,但是里面包含的内容是相同的 // servlet1 RequestDispatcher dispatcher ...
- javaWeb中request请求转发和response重定向
1.访问资源 运用forward方法只能重定向到同一个Web应用程序中的一个资源. 而sendRedirect方法可以让你重定向到任何URL. 2.request.get Forward代码中的&q ...
- HttpServletRequest 接口、HttpServletResponse 接口、请求转发与重定向
上篇文章我们讲了servlet的基本原理,这章将讲一下剩余的部分. HttpServletRequest 接口 该接口是 ServletRequest 接口的子接口,封装了 HTTP 请求的相关信息, ...
- ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段
ServletRequest 基本概念 JavaWeb中的 "Request"对象 实际为 HttpServletRequest 或者 ServletRequest, ...
- 04_web基础(六)之请求转发与重定向
1.交互方式 Web组件之间跳转: 从AServlet 跳转到 BServlet. 三种类型: 1:请求转发(forward) 2:URL重定向(redirect) 3:请求包含(include) 3 ...
随机推荐
- asp.net MVC 帮助助手和函数( @helper @functions)
asp.net Razor 视图具有.cshtml后缀,可以轻松的实现c#代码和html标签的切换,大大提升了我们的开发效率.但是Razor语法还是有一些棉花糖值得我们了解一下,可以更加强劲的提升我们 ...
- linux包之e2fsprogs之chattr命令
概述 [root@localhost ~]# rpm -qf /usr/bin/chattre2fsprogs-1.41.12-18.el6.x86_64 chattr命令的作用很大,其中一些功能是由 ...
- 搭建EF6.0+MVC4搭建框架遇到的问题及解决方案
问题一:“未能加载文件或程序集“EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089” ...
- java解析出url请求的路径和参数键值对类 - 转
import java.util.HashMap; import java.util.Map; public class CRequest { /** * 解析出url请求的路径,包括页面 * @pa ...
- C#颜色和名称样式对照表
1 Color.AliceBlue 240,248,255 Color.LightSalmon 255,160,122 Color.AntiqueWhite 250,235,215 Color.L ...
- apache 2.4 配置多个站点
1.打开\Apache24\conf\httpd.conf 查找conf/extra/httpd-vhosts.conf 去掉前面的#号,一般是去掉的 2.在httpd.conf 中查找Requir ...
- nova分析(5)—— nova-conductor
nova-conductor是nova-compute之上的一个服务,这个服务比较简单,主要封装了DB访问和动态迁移相关的代码.转来一篇文章看看它是如何工作的. 更新记录:1. 2013.4.19 ...
- LintCode "Triangle Count"
Should be "Medium" or even "Easy".. Just with a little Greedy. class Solution { ...
- lucene.net 使用过程中的 几个注意事项(含termquery 和QueryParser 的区别)
几个注意事项1.建立索引时 插入的顺序(不设置document和字段的boost) 会影响到 查询结果的默认排序,建议:将最新生成的文章 最后建索引 这样 查询结果首先显示的是 最后插入的数据2.Bo ...
- 战胜忧虑<5>——运用亚里士多德法则
运用亚里士多德法则 如果人们将忧虑的时间,用来寻找解决问题的答案,那忧虑就会在人们智慧的光芒下消失.那么当你面对忧虑时,应该怎么办理?答案是,我们一定要学会用下面三种分析问题的基本步骤来解决各种不同的 ...