跳转和重定向

有的时候客户端请求到达服务端后需要对请求重新转发到其它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. 如何让div水平垂直居中

    引子 我们经常遇到需要把div中的内容进行水平和垂直居中.所以,这里介绍一种方法,可以使div水平居中和垂直居中. 代码: <!DOCTYPE html> <html lang=&q ...

  2. Apache Shiro 手册

    (一)Shiro架构介绍 一.什么是Shiro Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能: 认证 - 用户身份识别,常被称为用户"登录 ...

  3. Iaas-cloudstack2

    流程是下面的模板安装脚本,将对应的hypervisor模板下载下来并另存为临时文件,并解压缩,并将其移动到二级存储相应目录下,仅完成此工作. [root@manage nfs]# /usr/share ...

  4. linux包之coreutils之du和df命令

    [root@localhost ~]# rpm -qf /usr/bin/ducoreutils-8.4-31.el6.x86_64[root@localhost ~]# rpm -qf /bin/d ...

  5. Python命令行中输入pip提示不是内部或外部命令

    WIN764位,Python34 输入命令python -m pip

  6. disruptor - Concurrent Programming Framework 并发编程框架

    disruptor发布了Java的2.0版本(.Net版本见这里),disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式实现,或者事件 ...

  7. 百度ueditor学习使用

    1.下载ueditor解压 2. jsp里存放着开发所用到的jar包,导入项目即可 前端页面代码如下: <center> <form action="" meth ...

  8. char与varchar区别-转

    1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (10),表示你存储的字符将占10个字节(包括7个空字符),而同样的VARCHA ...

  9. spring基础部分——注解

    注解: @Entity @Table @Column @Enumerated @Autowired @Controller @RequestMapping @RequestParam

  10. smarty缓存技术

    后台: <?php //要求:当存在缓存文件,直接输出,不存在缓存文件,自己创建缓存,输出 //步骤: //定义该页面存放缓存文件的路径 $filename="../../cache/ ...