04_web基础(五)之请求转发与重定向

  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
 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 @WebServlet("/b")
16 public class BServlet extends HttpServlet {
17     @Override
18     public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
19 
20         System.out.println("------BServlet----------");
21         String name = (String) req.getAttribute("name");
22         System.out.println("name="+name);
23         PrintWriter writer = resp.getWriter();
24         writer.print("==========B============");
25     }
26 }
BServlet
 1 <%--
 2   Created by IntelliJ IDEA.
 3   User: lidongping
 4   Date: 2018/5/3
 5   Time: 17:49
 6   To change this template use File | Settings | File Templates.
 7 --%>
 8 <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
 9 <html>
10 <head>
11     <title>a标题</title>
12 </head>
13 <body>
14 我是AServlet
15 </body>
16 </html>
a.jsp

 35.重定向详解(非常重要)

  URL重定向(redirect):
    AServlet操作完毕之后,重定向到BServlet,继续完成余下的功能.
语法:
    response对象.sendRedirect(String path);
    参数:path,表示目标资源名称.
------------------------------------------------------------------------
URL重定向的特点:
    1):浏览器地址栏路径发送变化,变成Servlet2的资源名称.
    2):发送了两个请求.
    3):因为是不同的请求,所以不能共享请求中的数据.
    4):最终的响应输出由Servlet2来决定.
    5):可以跨域访问资源.
    6):不可以访问WEB-INF中的资源.

代码:

 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  * URL重定向(redirect):
18  AServlet操作完毕之后,重定向到BServlet,继续完成余下的功能.
19  语法:
20  response对象.sendRedirect(String path);
21  参数:path,表示目标资源名称.
22  ------------------------------------------------------------------------
23  URL重定向的特点:
24  1):浏览器地址栏路径发送变化,变成Servlet2的资源名称.
25  2):发送了两个请求.
26  3):因为是不同的请求,所以不能共享请求中的数据.
27  4):最终的响应输出由Servlet2来决定.
28  5):可以跨域访问资源.
29  6):不可以访问WEB-INF中的资源.
30 
31  */
32 @WebServlet("/c")
33 public class CServlet extends HttpServlet {
34     @Override
35     public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
36         System.out.println("------CServlet----------");
37         //response对象.sendRedirect(String path);
38         req.setAttribute("key","周美玲");
39        // resp.sendRedirect("/d");
40         //resp.sendRedirect("https://www.baidu.com/");
41         resp.sendRedirect("/WEB-INF/views/a.jsp");
42 
43         System.out.println("------CServlet-----已跳转完成-----");
44         PrintWriter writer = resp.getWriter();
45         writer.print("------------CServlet----------");
46     }
47 }
CServlet
 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 @WebServlet("/d")
16 public class DServlet extends HttpServlet {
17     @Override
18     public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
19         System.out.println("------DServlet----------");
20         String key = (String) req.getAttribute("key");
21         System.out.println("-------------------"+key);
22         PrintWriter writer = resp.getWriter();
23         writer.print("------------DServlet----------");
24 
25     }
26 }
DServlet

猜你喜欢

转载自www.cnblogs.com/newAndHui/p/8986851.html