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