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 }
AServlet

相关文章: