public class Red1Servlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("Red1... GET湖南");

System.out.println("Red1... GET湖南");

String name = request.getParameter("name");
String age = request.getParameter("age");
System.out.println("Red1Servlet: "+name+","+age);

request.setAttribute("addr", "GET中国北京");
//request.setAttribute("studs", new ArrayList<Map<String, Object>>());//可以把集合数据设置到attribue中

//通过response
//response.sendRedirect(request.getContextPath()+"/servlet/Red2Servlet?name=Tom&age=25");//重定向时的路径一定要带项目名称
response.sendRedirect("http://www.sina.com");



//前面的重定向相当于进行了响应且刷缓存。因此下面不能再重定向了
//response.sendRedirect(request.getContextPath()+"/servlet/TowServlet");
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("Red1... POST湖南");

System.out.println("Red1... POST湖南");

String name = request.getParameter("name");
String age = request.getParameter("age");
System.out.println("Red1ServletPost: "+name+","+age);

request.setAttribute("addr", "POST中国北京");
//request.setAttribute("studs", new ArrayList<Map<String, Object>>());//可以把集合数据设置到attribue中

//通过response
response.sendRedirect(request.getContextPath()+"/servlet/Red2Servlet");//重定向时的路径一定要带项目名称

}

}

--------------------------------------------------------------------------------------------------------------------------------------------------

public class Red2Servlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("Red2... GET城院!");

System.out.println("Red2... GET城院!");

String name = request.getParameter("name");
String age = request.getParameter("age");
System.out.println("Red2... Servlet: "+name+","+age);

String addr = (String) request.getAttribute("addr");
System.out.println("addr:"+addr);

}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("Red2... POST城院!");

System.out.println("Red2... POST城院!");

String name = request.getParameter("name");
//GET方式下,中文乱码只能通过 byte b[] = name.getBytes("iso8859-1"); name= new String(b,"utf-8");
String age = request.getParameter("age");
System.out.println("Red2... Servlet: "+name+","+age);

String addr = (String) request.getAttribute("addr");
System.out.println("addr:"+addr);
}

}

---------------------------------------------------------------------------------------------------------------------------------

<a href="<%=request.getContextPath()%>/servlet/Red1Servlet?name=Jack&age=22">重定向时,两个servlet的访问顺序, 读取页面数据, 传参</a>
<form action="<%=request.getContextPath()%>/servlet/Red1Servlet" method="post">
姓名:<input type="text" name="name"/>
<input type="submit" value="提交">
</form>

-------------------------------------------------------------------------------------------------------------------------------------------

1、重定向(两个不同的request和response),两个servlet的访问顺序,传参:
1)重定向是通过response实现的: response.sendRedirect() //重定向时的路径一定要带项目名称
2)第1个servlet中的内容会输出,但瞬间就会被第2个覆盖。因为浏览器接收到第1个的响应时,立刻会自动发起第2次请求,进而接收并显示第2次请求的响应结果。
3)在第1个servlet重定向代码之后,不能再调用类似 转发或重定向 的代码。否则会500异常,因为转发之后,不能再回到此处进行跳转到别的页面
4)访问顺序: 无论第1个是GET方式还是POST方式,第2个走的是doGet()。----该方式下,地址栏中最终会显示成第2个的访问地址

5)读取页面参数: 由于是不同的request,请求页面的参数在第1个servlet当中能够读取出来,而第2个servlet中不能读取出来。
6)两个servlet之间传参: “无法”通过 在第1个中request.setAttribute(),在第2个中request.getAttribute(); ----通过attribute的路中走不通的
如果非要传参,可以通过:在第1个servlet当中给重定向地址添加“?name=Jack&age=25”实现---该方式下地址栏会显示参数信息,明文传输信息,因此敏感数据要加密
7)站外跳转 只能通过重定向来实现,而且地址必须以“http://”开头,否则会被识别成站内。

关于Servlet中重定向的更多相关文章

  1. 关于servlet中重定向、转发的地址问题

    先写一个正斜杠"/",再判断是服务器使用该地址还是网站使用该地址. 访问网络资源用/,访问硬盘资源用\. 例如: 转发:      request.getRequestDispat ...

  2. servlet中的“/”代表当前项目,html中的“/”代表当前服务器

    servlet中重定向或请求转发的路径如果用“/”开头,代表当前项目下的路径,浏览器转发这条路径时会自动加上当前项目的路径前缀,如果这个路径不是以“/”开头,那么代表这个路径和当前所在servlet的 ...

  3. Servlet中转发和重定向的区别

    Servlet中页面的跳转有两种方式:转发和重定向. 1.转发和重定向的区别 ①转发是服务器行为,重定向是客户端行为. ②转发是浏览器发生了一次请求,重定向至少是两次请求. ③转发地址栏中的url不会 ...

  4. servlet中请求转发(forword)与重定向(sendredirect)的区别

    摘自:http://www.cnblogs.com/CodeGuy/archive/2012/02/13/2349970.html 通俗易懂 servlet请求转发与重定向的区别: request.s ...

  5. JavaWeb(一)Servlet中乱码解决与转发和重定向的区别

    前言 前面其实已经把Servlet中所有的内容都介绍完了,这篇讲补充一点乱码和重定向与转发之间的区别! 一.request请求参数出现乱码问题 1.1.get请求 1)乱码示例 get请求的参数是在u ...

  6. Servlet中转发和重定向的路径问题【转】

    转发和重定向的路径问题 Servlet中有两种方式获得转发对象(RequestDispatcher):一种是通过HttpServletRequest的getRequestDispatcher()方法获 ...

  7. Servlet中的转发与重定向

    Sevlet 的转发与重定向都可以使得浏览器指向另一个资源文件,但它们的运行机制不相同. 一.Servlet的转发 有两种方式获得转发对象(RequestDispathcer): HttpServle ...

  8. Servlet中的request对象、重定向和转发的差别(6)

    1.这里所说的request对象指的是HttpServletRequest对象,它代表client的请求,当client通过HTTP协议訪问server时.HTTP请求头中的全部信息都封装在这个对象中 ...

  9. [Java][Web] Servlet中转发和重定向比较

    Servlet中页面跳转的两种方式 请求转发 使用requestDispatcher对象 request.getRequestDispatcher("path").forward( ...

随机推荐

  1. visual studio 2012更换皮肤、功能添加

    首先在vs2012的菜单:工具->扩展和更新,打开扩展和更新窗口,点击左侧“联机”,搜索栏里面输入Theme Editor.然后点击按钮,安装之后,在工具->选项->环境常规 面板上 ...

  2. BZOJ_1007_ [HNOI2008]_水平可见直线_(单调栈+凸包)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1007 给出一些直线,沿着y轴从上往下看,能看到多少条直线. 分析 由于直线相交,会遮挡住一些直 ...

  3. [转] acmer必看的26个对acm态度

    acmer必看的26个对acm态度   转载自:http://www.cppblog.com/Darren/archive/2009/08/03/92099.html Attempt Keep on ...

  4. Azure 媒体服务发布可靠的视频直播平台

    Sudheer Sirivara Azure 媒体服务总监 两个月前,Azure 媒体服务发布了视频直播和内容保护产品的公共预览版.这一 Internet规模的直播解决方案已被十余家业界领先的国际广播 ...

  5. 【转】plist文件的内容清空

    原文网址:http://zhidao.baidu.com/link?url=3aQGrNnqL2UgQ3UW_RWJJq0ADBmY8zQrpy09j6ScDZEAOd87f-D4bAABog5RFS ...

  6. [原创][下载]Senparc.Weixin.MP-微信公众平台SDK(C#) - 已支持微信6.x API

    因为正在计划做一个微信机器人,需要用ASP.NET,找了一下只有PHP的SDK,没有C#的,于是动手写了一个,已经全面支持微信6.x所有接口,包括多客服.卡券.微信支付等. 微信公众平台地址:http ...

  7. 基于DDD的现代ASP.NET开发框架--ABP系列之3、ABP分层架构

    基于DDD的现代ASP.NET开发框架--ABP系列之3.ABP分层架构 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:ht ...

  8. 编写一个jsp页面,输出九九乘法表。

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  9. [liu yanling]黑盒测试用例设计方法

    1. 概述 黑盒测试用例设计方法包括等价类划分法.边界值分析法.错误推测法.因果图法.判定表驱动法.正交试验设计法.功能图法等. 2. 等价类划分法 2.1.          概念 等价类划分法是把 ...

  10. [Raobin] Ext.net在多重子父窗体中找到当前窗体的父窗体,并关闭IFrame父窗体

    var closeParentWindow = function () { var currentWin = window; while (top != currentWin) { var prent ...