查看: 1731|回复: 0

[Java代码] 请求转发和请求包含和重定向之间的区别

发表于 2018-3-1 08:02:05

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

请求包含:留头又留体

[code][/code]



回复

使用道具 举报