请求转发和请求包含和重定向之间的区别

2018-06-18 03:29:33来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

 

 1 package com.sn.servlet.forward;
 2 
 3 import java.io.IOException;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.annotation.WebServlet;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 /**
11  * Servlet implementation class OneServlet
12  */
13 @WebServlet("/OneServlet")
14     /**
15      * 请求转发和请求包含和重定向之间的区别
16      * @author Administrator
17      *
18      */
19 public class OneServlet extends HttpServlet {
20     /**
21      *   1.response:服务器端向客户端发送数据,主要设置一些响应。
22      *   2.request:访问任何客户端,可以用post方法传递参数和get方法发出请求。
23      *   3.get和post在表单中既可以是get请求,也可以是post请求。
24      *   注意:请求转发和请求包含都是一个请求。
25      *   4.请求转发:留头不留体
26      *   5.请求包含:留头又留体
27      *
28      *   6.servlet中的三大域对象分别是:
29      *   1)、Request
30      *   2)、Session
31      *   3)、application
32      *   共同点:都有这三个方法:
33      *   void setAttribute(String name,Object value);储存一个对象 
34      *     Object getAttribute(String name);获取数据 
35      *   void removeAttribute(String name);移除属性 
36      *   注意:如果一个servlet中存储了一个对象,然后重定向后,然后在获取数据,是不可以获取到的,因为已经被重定向了,他会在新的servlet创建一个新的request。
37      *          如果在一个servlet中存储了一个对象,请求转发和请求包含都可以使用getAttribute获取数据,因为是只有一个请求。
38      *   三个域对象都可以存放数据。
39      *   注意:request可以存放数据,但是只会在一个请求范围内。
40      *   7.请求转发和重定向之间的区别:
41      *   >请求转发是一个请求一个响应,重定向是两次请求两次响应
42      *   >请求转发浏览器地址栏不会发生变,重定向的浏览器地址栏会发生变化
43      *   >请求转发只能转发到本项目的其他serlvet中,重定向不但可以重定向到本项目的其他servlet中还可以重定向到其他项目
44      *   >请求转发是服务端行为,只要给出转发的servlet路径,重定向需要给requestURI和项目名
45      *   >请求转发效率能搞,因为只有一次请求
46      *   总结:通过学习了请求转发,掌握了以上知识点,这些以后会经常用到。一定要弄清楚服务器端和客户端。
47      *   
48      */
49     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
50         System.out.println("OneServlet");  //打印在控制台
51         response.setHeader("vip", "VIP");  //设置响应头
52         response.getWriter().print("OneServlet......");  //设置响应体,主要是向浏览器输出
53         request.setAttribute("name", "wangcai");   //setAttribute:设置属性及属性值,属性:name,属性值:wangcai
54         //request.getRequestDispatcher("/TwoServlet").forward(request, response);  //请求转发。forward:转发
55         request.getRequestDispatcher("/TwoServlet").include(request, response);  //请求包含。include:包含
56     }
57 
58 }
 1 package com.sn.servlet.forward;
 2 
 3 import java.io.IOException;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.annotation.WebServlet;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 /**
11  * Servlet implementation class TwoServlet
12  */
13 @WebServlet("/TwoServlet")
14 public class TwoServlet extends HttpServlet {
15     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
16         System.out.println("TwoServlet");  //打印在控制台
17         String s = (String) request.getAttribute("name");  //通过属性名获取属性值,因为是obj,所以需要强转
18         response.getWriter().print(s);  //设置响应体,向浏览器输出
19     }
20 
21 }
请求转发:留头不留体

 请求包含:留头又留体

 


 

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:线程池 executor 和 executors

下一篇:Activity组件安全(下)