java转发与重定向的区别(适合新人)

最近有人私信我说,我写的博客有些肤浅,没有深究,在此我统一回复一下,这些博客大多都是概念性东西,是用通俗的例子让你理解这个技术或者知识到底是怎么一样原理。
所以我在后面都加着适合新人,我们都是从新人走过来的,知道初学者的那种迷茫,只会代码,不懂原理和含义,就比如,注解,你不去学习理解,初学者根本就不知道那是个什么东西,为什么要使用注解。
如果是资深大牛,那就不要看了,还是那句话,适合新人。


首先,要理解一个概念:
转发与重定向都是一个转折,就比如我们的小腿骨骼和大腿骨骼,将它们连在一起的膝盖关节就是代码钟的转发与重定向

区别:
在这里插入图片描述

1,理解的案例:

在这里插入图片描述
在这里插入图片描述

2,转发代码演示:

现在 设定人物 : 浏览器是 A
SerlvetB是:B
SerlvetC是:C

SerlvetB代码

package com.aaa.Forward;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 
* 项目名称:Forward  
* 类描述:(转发)
* 创建人:莫参商 
* 创建时间:2020-1-16 下午3:37:37  
* 修改人:acer     
* @version   
*   
 */
@WebServlet("/ServletB")
public class ServletA extends HttpServlet{
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		    // 获取请求携带的id
	        String id = req.getParameter("id");
	        System.out.println("A对B说:帮我带份饭,id号是:" + id);
	        System.out.println("B对A说:好的");
	        System.out.println("----分割线----");
	        //---后面B直接在服务器将请求转发给C---
	        //获取转发对象,后面括号指定了转发的路径
	        RequestDispatcher dispatcher = req.getRequestDispatcher("/ServletC");
	        //执行转发功能,并将请求和响应一并转发过去
	        dispatcher.forward(req, resp);
	}
	
}

ServletC代码

package com.aaa.Forward;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/ServletC")
public class ServletC extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
				// 设置浏览器解析的格式,否则浏览器会出现乱码
		        resp.setContentType("text/html;charset=utf-8");
		        // 获取请求携带的id
		        String id = req.getParameter("id");
		        System.out.println("B对C说:帮A拿下快递,id号是:" + id);
		        System.out.println("拿到快递了");
		        // 获取输出流
		        PrintWriter writer = resp.getWriter();
		        // 将信息返回给浏览器
		        writer.println("拿到快递了");

	}
	
}

结果:
在这里插入图片描述
在这里插入图片描述
访问的路径没有变化,并且id值也得到了!

3,重定向代码演示:

现在 设定人物 : 浏览器是 A
SerlvetB01是:B
SerlvetC01是:C

SerlvetB01代码

package com.aaa.Redirect;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 
* 项目名称:Forward  
* 类描述:(重定向)
* 创建人:莫参商 
* 创建时间:2020-1-16 下午3:37:37  
* 修改人:acer     
* @version   
*   
 */
@WebServlet("/ServletB01")
public class ServletB01 extends HttpServlet{
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		    // 获取请求携带的id
	        String id = req.getParameter("id");
	        System.out.println("A对B说:帮我拿带份饭,id号是:" + id);
	        System.out.println("B对A说:我没有空,你找下C");
	        System.out.println("----分割线----");
	        //---后面B直接在服务器将请求转发给C---
	       resp.sendRedirect("/Forward/ServletC01");
	       
	}
	
}

SerlvetC01代码

package com.aaa.Redirect;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/ServletC01")
public class ServletC01 extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
				// 设置浏览器解析的格式,否则浏览器会出现乱码
		        resp.setContentType("text/html;charset=utf-8");
		        // 获取请求携带的id
		        String id = req.getParameter("id");
		        System.out.println("B对C说:帮A带份饭,id号是:" + id);
		        System.out.println("饭到了");
		        // 获取输出流
		        PrintWriter writer = resp.getWriter();
		        // 将信息返回给浏览器
		        writer.println("饭到了");

	}
	
}

结果:
在这里插入图片描述
在这里插入图片描述
重定向:
在这里插入图片描述
转发:
在这里插入图片描述

发布了17 篇原创文章 · 获赞 18 · 访问量 5570

猜你喜欢

转载自blog.csdn.net/qq_41566219/article/details/104004550