关于Servlet中重定向
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中重定向的更多相关文章
- 关于servlet中重定向、转发的地址问题
先写一个正斜杠"/",再判断是服务器使用该地址还是网站使用该地址. 访问网络资源用/,访问硬盘资源用\. 例如: 转发: request.getRequestDispat ...
- servlet中的“/”代表当前项目,html中的“/”代表当前服务器
servlet中重定向或请求转发的路径如果用“/”开头,代表当前项目下的路径,浏览器转发这条路径时会自动加上当前项目的路径前缀,如果这个路径不是以“/”开头,那么代表这个路径和当前所在servlet的 ...
- Servlet中转发和重定向的区别
Servlet中页面的跳转有两种方式:转发和重定向. 1.转发和重定向的区别 ①转发是服务器行为,重定向是客户端行为. ②转发是浏览器发生了一次请求,重定向至少是两次请求. ③转发地址栏中的url不会 ...
- servlet中请求转发(forword)与重定向(sendredirect)的区别
摘自:http://www.cnblogs.com/CodeGuy/archive/2012/02/13/2349970.html 通俗易懂 servlet请求转发与重定向的区别: request.s ...
- JavaWeb(一)Servlet中乱码解决与转发和重定向的区别
前言 前面其实已经把Servlet中所有的内容都介绍完了,这篇讲补充一点乱码和重定向与转发之间的区别! 一.request请求参数出现乱码问题 1.1.get请求 1)乱码示例 get请求的参数是在u ...
- Servlet中转发和重定向的路径问题【转】
转发和重定向的路径问题 Servlet中有两种方式获得转发对象(RequestDispatcher):一种是通过HttpServletRequest的getRequestDispatcher()方法获 ...
- Servlet中的转发与重定向
Sevlet 的转发与重定向都可以使得浏览器指向另一个资源文件,但它们的运行机制不相同. 一.Servlet的转发 有两种方式获得转发对象(RequestDispathcer): HttpServle ...
- Servlet中的request对象、重定向和转发的差别(6)
1.这里所说的request对象指的是HttpServletRequest对象,它代表client的请求,当client通过HTTP协议訪问server时.HTTP请求头中的全部信息都封装在这个对象中 ...
- [Java][Web] Servlet中转发和重定向比较
Servlet中页面跳转的两种方式 请求转发 使用requestDispatcher对象 request.getRequestDispatcher("path").forward( ...
随机推荐
- oracle database resident connection pooling(驻留连接池)
oracle在11g中引入了database resident connection pooling(DRCP).在此之前,我们可以使用dedicated 或者share 方式来链接数据库,dedic ...
- Oracle Form Developer: Folder FRM-99999 Error 14212
Question: 做FOLDER文件夹功能,打开FORM错误提示: FRM-99999:出现1412错误.有关该错误的详细信息,请参阅发行说明文件(relnotes) Answer: 原因是FOLD ...
- MFC窗口重绘
Invalidate()与 UpdateAllViews()有什么分别 Invalidate()是让程序重画窗口. UpdateAllViews()是在DOC/VIEW结构中, 当一个视图的数据改变后 ...
- 修改NGINX版本名称为任意WEB SERVER
下载好Nginx的安装文件nginx-1.6.0.tar.gz,并把它解压. wget http://nginx.org/download/nginx-1.6.0.tar.gz .tar.gz 然后我 ...
- VS2005 工程在win7下使用管理员权限运行
想关资料 http://stackoverflow.com/questions/13030492/set-administrator-privilege-for-my-c-application-in ...
- SQL Server 2008空间数据应用系列一:空间信息基础
转自:http://www.cnblogs.com/beniao/archive/2011/01/18/1933412.html Microsoft SQL Server 2008 提供了全面性的空间 ...
- JZ2440开发笔记(7)——2440启动方式
JZ2440的启动方式有两种,一种是从NOR FLASH中启动,还有一种就是从NAND FLASH中启动. 如果从NOR FLASH启动,CPU会访问NOR FLASH的0地址,而0地址位于BANK0 ...
- 【CSS】Intermediate1:Class and ID Selectors
1.html tag = css selector 2.Define your own selectors in the form of class and ID selectors 3. .clas ...
- ArrayLLis 线程不安 实验
这段代码演示了ArrayList的线程不安全,我让3个线程分别对list加入300个字符串,最后的arr的大小为800多,大家可以测试一下,我的一次是898,一次是897,同时还学了join的用法 i ...
- vijosP1543 极值问题
vijosP1543 极值问题 链接:https://vijos.org/p/1543 [题解](网上) 从简单情况人手: 设定m=1,将m代人方程②有(n2-n-1)2=1,可求出n=1: ...