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中的项目属性-->生成-->配置

    1.Debug配置 2.Release配置 2.Debug和Release的区别 (1)Debug有定义DEBUG常量,Release没有 (2)Debug没有优化代码,Release有 (3)生成路 ...

  2. Oracle系列之触发器

    涉及到表的处理请参看原表结构与数据  Oracle建表插数据等等 创建一个触发器,使其可以修改tb_Department表的deptno. create or replace trigger upda ...

  3. Hadoop中的各种排序

    本篇博客是金子在学习hadoop过程中的笔记的整理,不论看别人写的怎么好,还是自己边学边做笔记最好了. 1:shuffle阶段的排序(部分排序) shuffle阶段的排序可以理解成两部分,一个是对sp ...

  4. php加速缓存Xcache的安装与配置

    安装环境:centos 6.5 32bit  php5.5.7 nginx1.6.0 [root@localhost opt]# wget http://xcache.lighttpd.net/pub ...

  5. 【转】Mac QQ截图保存在哪里?

    原文网址:http://www.pc6.com/edu/67677.html QQ Mac版的截屏图片保存在哪儿呢?可不可以像Windows版本一样设定保存路径呢?当然是可定的.Mac QQ截图保存你 ...

  6. 常用px,pt,em换算表

    pt (point,磅):是一个物理长度单位,指的是72分之一英寸. px (pixel,像素):是一个虚拟长度单位,是计算机系统的数字化图像长度单位,如果px要换算成物理长度,需要指定精度DPI(D ...

  7. 使用C#调用Python脚本,带参数列表 z

    static void Main(string[] args) { string[] strArr;//参数列表 string sArguments = @"Pythons.py" ...

  8. oracle执行.sql文件

    ->win+R; ->CMD; ->SQLPLUS /NOLOG; ->CONNECT USER/PASSWORD@ORCL; ->@D:/XXX.SQL;

  9. bootstrap基本标签总结[转]

    文件头: DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...

  10. 多线程归并排序的实现 java

    多线程是非常适合归并排序的,因为归并排序是分治法,所以分割后可以独立运行,最后将结果归并起来就行了.如何写一个多线程程序呢?今天无聊,总结一下啊. 首先写个普通的归并排序,以后的多线程就调用这个排序. ...