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中的请求转发和重定向的更多相关文章
- 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 ...
- spring mvc 请求转发和重定向(转)
spring mvc controller间跳转 重定向 传参 url:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ ...
随机推荐
- 字符串模式匹配之KMP算法图解与 next 数组原理和实现方案
之前说到,朴素的匹配,每趟比较,都要回溯主串的指针,费事.则 KMP 就是对朴素匹配的一种改进.正好复习一下. KMP 算法其改进思想在于: 每当一趟匹配过程中出现字符比较不相等时,不需要回溯主串的 ...
- 简述UIViewControl之间的七种传值方式~~~
将自己学习到的UIViewControl之间传值的几种方式在这里做一下总结,希望童鞋们多多支持哈--- 一.正向传值方式 这种方式传值应该是最简单的方式,我们先来建立两个视图控制器暂且称为OneVie ...
- JavaScript 语句
JavaScript 语句 JavaScript 语句向浏览器发出的命令.语句的作用是告诉浏览器该做什么. JavaScript 语句 JavaScript 语句是发给浏览器的命令. 这些命令的作用是 ...
- Marvel – 将图像和源文件转换成互动,共享的原型
Marvel 是一款非常简单的工具,将图像和设计源文件转换成互动,共享的原型,无需任何编码.原型可以通过点击几下鼠标就创建出来,能工作在任何设备上的浏览器,包括移动设备,台式机.Marvel 的一个特 ...
- Focus相关点滴
获取当前焦点所在的控件. .Net本身没有该API.必须使用Win32 API解决. internal static extern IntPtr GetFocus(); Control focused ...
- python学习之路前端-CSS
CSS概述 css是英文Cascading Style Sheets的缩写,称为层叠样式表,用于对页面进行美化. 存在方式有三种:元素内联.页面嵌入和外部引入,比较三种方式的优缺点. 语法:style ...
- XSS之偷梁换柱--盲打垃圾短信平台
https://www.t00ls.net/thread-49742-1-1.html
- 11.5 Daily Scrum
请把现在当成11月5日······ Today's tasks Tomorrow's tasks 丁辛 餐厅列表数据结构设计 餐厅列表UI设计 李承晗 ...
- 【基础】httpclient注意事项
一.HttpClient有默认的执行器RetryExec,其默认的重试策略是DefaultHttpRequestRetryHandler. RetryExec在执行http请求的时候使用的是底层的基础 ...
- 20170809直接访问功能测试Postman
20170809直接访问功能测试Postman 1 打开admin账户登录界面,打开F12,登录 admin账户,点击系统管理,用户设置,获得网址http://10.200.44.69:8080/cl ...