跳转和重定向

有的时候客户端请求到达服务端后需要对请求重新转发到其它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中的请求转发和重定向的更多相关文章

  1. JSP中的请求转发与重定向

    在说请求转发和重定向之前,得了解下JSP九大内置对象中的response和request response:将服务器端数据发送到客户端,可通过在客户端浏览器中显示,用户浏览页面的重定向以及在客户端创建 ...

  2. servlet中的请求响应与重定向区别

    一.概念 请求响应(转发):将客户端请求转发另一个servlet或者jsp页面------------------------getRequestDispatcher()方法 重定向: 返回一个连接给 ...

  3. Servlet中的请求转发RequestDispatcher接口的forword与Include的区别

    RequestDispatcher接口中具有两个方法: forward() 与 include() 均 可完成请求 的转发.区别如下: forword(): 使用该方法,则当前 的 Servlet 中 ...

  4. javaweb servlet中使用请求转发乱码

    乱码的方式有很多,这里指出一种不容易想到的 *请确保您的页面单独访问正常,经过servlet请求转发时,有PrintWriter out = response.getWriter()不正常,没有正常 ...

  5. Servlet中的请求转发

    请求转发时,传递到下一个servlet的request和response可能内存地址不同,但是里面包含的内容是相同的 // servlet1 RequestDispatcher dispatcher ...

  6. javaWeb中request请求转发和response重定向

    1.访问资源 运用forward方法只能重定向到同一个Web应用程序中的一个资源. 而sendRedirect方法可以让你重定向到任何URL.  2.request.get Forward代码中的&q ...

  7. HttpServletRequest 接口、HttpServletResponse 接口、请求转发与重定向

    上篇文章我们讲了servlet的基本原理,这章将讲一下剩余的部分. HttpServletRequest 接口 该接口是 ServletRequest 接口的子接口,封装了 HTTP 请求的相关信息, ...

  8. ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段

      ServletRequest 基本概念 JavaWeb中的 "Request"对象  实际为   HttpServletRequest  或者  ServletRequest, ...

  9. 04_web基础(六)之请求转发与重定向

    1.交互方式 Web组件之间跳转: 从AServlet 跳转到 BServlet. 三种类型: 1:请求转发(forward) 2:URL重定向(redirect) 3:请求包含(include) 3 ...

随机推荐

  1. const, static and readonly

    const, static and readonly http://tutorials.csharp-online.net/const,_static_and_readonly Within a cl ...

  2. Win10 64位安装SQL2000(个人版)

    默认Win10上是不允许安装SQL2000的,毕竟SQL2000已经是10多年前的老软件了,但是因为它成熟稳定,相比SQL2005,SQL2008R2,SQL2012,SQL2014,体积要小的多,所 ...

  3. 透明度兼容性(ie8以上)

    转载:http://www.cnblogs.com/PeunZhang/p/4089894.html demo代码:文件中,背景透明,文字不透明的研究和使用.zip

  4. js中的prototype和constructor

    本文正确性有待商榷,高手路过请不吝指教 1.js中只有对象,包括对象,函数,常量等. 对象不用解释.函数也有属性,常见之一就是prototype.常量也有属性: (3).__proto__;//Num ...

  5. flex html 用flex展示html

    1. 目的 flex展示html 可以保护网页内容 2. 参考 http://stackoverflow.com/questions/260270/display-html-in-an-actions ...

  6. 数据结构线性表(js实现)

    最近在复习数据结构的过程中,发现基本上数据结构都是用C来实现的,自己之前学习的时候也是用C去写的,由于目前对js更为熟悉一些,所以这里选择使用js去实现其中的某些算法和结构.实际上算法和语言关系不大, ...

  7. javascript 变量的作用范围

    来自: http://hanxin0311.iteye.com/blog/181127 1.根据作用范围不同,变量有全局变量和局部变量两种.在函数里定义的变量为局部变量,局部变量只在函数内有效. 如果 ...

  8. MockMultipartFile

    org.springframework.mock.webClass MockMultipartFile java.lang.Object org.springframework.mock.web.Mo ...

  9. (转帖)BootStrap入门教程 (三)

      上讲回顾:Bootstrap的基础CSS(Base CSS)提供了优雅,一致的多种基础Html页面要素,包括排版,表格,表单,按钮等,能够满足前端工程师的基本要素需求. Bootstrap作为完整 ...

  10. 用java给html文件添加必要的控制html代码片

    这个需求,我估计很多时候都不会用到,但是,我们目前在做一个CMS的系统,在创建页面的时候,需要控制页面各个板块显示的内容来源,这个不是关键,关键是页面内容配置完毕后,如何提交内容,也就是说如何和后台系 ...