1.交互方式
Web组件之间跳转: 从AServlet 跳转到 BServlet.
三种类型:
1:请求转发(forward)
2:URL重定向(redirect)
3:请求包含(include)
34.请求转发详讲(非常重要)
请求转发(forward):
AServlet操作完毕之后,请求转发到BServlet,继续完成余下的功能.
语法:
request对象.getRequestDispatcher(String path).forward(request,response);
参数:
path:表示目标资源名称(跳转到哪里去)
注意:别忘了写forward(request,response).
=============================================================================
请求转发的特点:
1):浏览器地址栏路径没变,依然是Servlet1的资源名称.
2):只发送了一个请求.
3):共享同一个请求,在请求中共享数据.
4):最终的响应输出由Servlet2来决定.
5):只能访问当前应用中的资源,不能跨域跳转.
6):可以访问WEB-INF中的资源.
7):转发完成之后,Servlet1中的业务代码继续执行
代码实现
1 package com.day07.web.demo2.controller2; 2 3 import javax.servlet.ServletException; 4 import javax.servlet.annotation.WebServlet; 5 import javax.servlet.http.HttpServlet; 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 import java.io.IOException; 9 import java.io.PrintWriter; 10 11 /** 12 * 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html 13 * 疑问咨询wx:851298348 14 */ 15 16 /** 17 * 请求转发(forward): 18 AServlet操作完毕之后,请求转发到BServlet,继续完成余下的功能. 19 语法: 20 request对象.getRequestDispatcher(String path).forward(request,response); 21 22 参数: 23 path:表示目标资源名称(跳转到哪里去) 24 注意:别忘了写forward(request,response). 25 ============================================================================= 26 请求转发的特点: 27 1):浏览器地址栏路径没变,依然是Servlet1的资源名称. 28 2):只发送了一个请求. 29 3):共享同一个请求,在请求中共享数据. 30 4):最终的响应输出由Servlet2来决定. 31 5):只能访问当前应用中的资源,不能跨域跳转. 32 6):可以访问WEB-INF中的资源. 33 7):转发完成之后,Servlet1中的业务代码继续执行 34 35 */ 36 @WebServlet("/a") 37 public class AServlet extends HttpServlet { 38 @Override 39 public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 40 // 从AServlet跳转到BServlet 41 System.out.println("------AServlet----------"); 42 // request对象.getRequestDispatcher(String path).forward(request,response); 43 //请求转发 44 req.setAttribute("name","wuji");//作用范围:仅仅限于当前请求 45 // req.getRequestDispatcher("/b").forward(req,resp); 46 47 req.getRequestDispatcher("/WEB-INF/views/a.jsp").forward(req,resp); 48 System.out.println("------AServlet---已完成转发-------"); 49 //https://www.baidu.com/ 50 //req.getRequestDispatcher("https://www.baidu.com/").forward(req,resp);// 51 PrintWriter writer = resp.getWriter(); 52 writer.print("==========A============"); 53 } 54 }