跳转和重定向

有的时候客户端请求到达服务端后需要对请求重新转发到其它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. form表单回车提交问题,JS监听回车事件

    我们有时候希望回车键敲在文本框(input element)里来提交表单(form),但有时候又不希望如此.比如搜索行为,希望输入完关键词之后直接按回车键立即提交表单,而有些复杂表单,可能要避免回车键 ...

  2. URI、URL和URN

    URI.URL和URN URI :Uniform Resource Identifier,通用资源标识符: URL:Uniform Resource Locator,统一资源定位符: URN:Unif ...

  3. 运行setup.js文件

    C:\Windows\System32>wscript.exe setup.js

  4. kaptcha随机验证码的使用详解,超实用

    效果图: 官方地址:https://code.google.com/p/kaptcha/w/list 1.把下载的kaptcha-2.3.2.jar添加到lib中 2.配置web.xml增加servl ...

  5. VMware虚拟系统 bridged、NAT、host-only三种网络连接模式

    目录 前言 bridged(桥接模式) NAT(网络地址转换模式) host-only(仅主机模式) 总结 前言 如果你想利用VMWare安装虚拟机,或想创建一个与网内其他机器相隔离的虚拟系统,进行特 ...

  6. JSP--监听HTTP会话

    来源: <http://www.cnblogs.com/eflylab/archive/2007/01/16/621953.html> ServletListener 之 监听HTTP会话 ...

  7. nova分析(6)—— nova service启动过程

    Nova project下面具有多个service,api,compute,sceduler等等,他们的启动过程都几乎类似,这一篇博客就详细记录nova-sceduler的启动过程.文章中贴出的源码都 ...

  8. 【Andorid开发框架学习】之Mina开发之服务器开发

    下午那篇博客我们讲到了Mina的客户端的开发,如果还有没看过的同学可以看一下,我是传送门.现在,我们来学习一下,Mina的服务器的开发. 一.首先看一下,我的服务器的代码图片:  服务器代码我是在My ...

  9. shell和vim的配色

    shell的默认配色 mac,需要用iTerm2, 选自带的solarized即可 debian ,选择自带的 solarized dark vim配色 git clone git://github. ...

  10. Mysql中is marked as crashed and should be repaired问题的处理

    问题描述:浏览页面提示:.bbs[Table]threads' is marked as crashed and should be repaired 产生原因:表在查询或其它系统操作下损坏. 解决方 ...