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 }
请求转发:留头不留体

请求包含:留头又留体