java转发图解,JavaWeb 重定向与请求转发的区别和执行流程(图解分析)

本文通过现实生活的例子引出重定向和请求转发,通过图解的方式讲解了整执行流程,希望可以帮助到大家

区别

序号

问题

重定向

请求转发

1

第二次请求谁请求的?

浏览器

服务器

2

浏览器发送了几次请求?

2次以上

1次

3

servlet可以共享request吗?

不可以

可以

4

地址栏是否发生改变?

不是

5

浏览器地址栏显示的哪一次访问地址?

最后一次

第一次

6

可以跳转到什么资源?

任意资源

项目内部

7

第二次的请求路径是?

绝对路径

内部路径

如果servlet执行流程不清楚可以查看我的另外个文章:

https://blog..net/u010452388/article/details/80395679

现实生活的例子

重定向

1419ae27a8208ff216752e9bebcf0cd7.png

①:A对B说,帮忙拿下快递

②:B对A说,没有空,你找下C吧

③:A对C说,帮忙拿下快递

④:C然后拿了快递给A

请求转发

93d28d6ff1f10701bcc10f5275b22784.png

①:A对B说,帮忙拿下快递

②:第二步,B没有空,直接找让C帮A拿下快递

③:C拿到了快递并返回给A

重定向-流程图、代码、结果

1.流程图

6165906c067d6cc8b1d390e6b4459d1f.png

2.1代码BoyServlet

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class BoyServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// 获取请求携带的id

String id = request.getParameter("id");

System.out.println("A对B说:帮我拿下快递,id号是:" + id);

System.out.println("B对A说:我没有空,你找下C");

System.out.println("----分割线----");

// 重定向方式1:

response.setStatus(302);

response.setHeader("location", "/redirect/girl");

// 重定向方式2:(正常用此方法)

// response.sendRedirect("/redirect/girl");

}

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

2.2代码GirlServlet

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class GirlServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//设置浏览器解析的格式,否则浏览器会出现乱码

response.setContentType("text/html;charset=utf-8");

//获取请求携带的id

String id = request.getParameter("id");

System.out.println("A对C说,帮我拿下快递,id号是:"+id);

System.out.println("拿到快递了");

//获取输出流

PrintWriter writer = response.getWriter();

//将信息返回给浏览器

writer.println("拿到快递了");

}

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

2.3web.xml文件

redirect

index.html

index.htm

index.jsp

default.html

default.htm

default.jsp

BoyServlet

BoyServlet

com.redirect.BoyServlet

BoyServlet

/boy

GirlServlet

GirlServlet

com.redirect.GirlServlet

GirlServlet

/girl

3.结果

3.1浏览器输入

0947a3a2e5885c8696378580e8cae735.png

3.2浏览器返回结果

4b5837c32f426c9ce781740a3aab6d63.png

3.3控制台打印结果

8a5438034f780f2eff0db34752080d1d.png

请求转发-流程图、代码、结果

1.流程图

c1f67dc31a41d3dbeb2f924cb50f2dde.png

2.1代码BoyServlet

import java.io.IOException;

import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class BoyServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// 获取请求携带的id

String id = request.getParameter("id");

System.out.println("A对B说:帮我拿下快递,id号是:" + id);

System.out.println("B对A说:好的");

System.out.println("----分割线----");

//---后面B直接在服务器将请求转发给C---

//获取转发对象,后面括号指定了转发的路径

RequestDispatcher dispatcher = request.getRequestDispatcher("/girl");

//执行转发功能,并将请求和响应一并转发过去

dispatcher.forward(request, response);

}

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

2.2代码GirlServlet

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class GirlServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// 设置浏览器解析的格式,否则浏览器会出现乱码

response.setContentType("text/html;charset=utf-8");

// 获取请求携带的id

String id = request.getParameter("id");

System.out.println("B对C说:帮A拿下快递,id号是:" + id);

System.out.println("拿到快递了");

// 获取输出流

PrintWriter writer = response.getWriter();

// 将信息返回给浏览器

writer.println("拿到快递了");

}

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

2.3web.xml文件

dispatcher

index.html

index.htm

index.jsp

default.html

default.htm

default.jsp

BoyServlet

BoyServlet

com.dispatcher.BoyServlet

BoyServlet

/boy

GirlServlet

GirlServlet

com.dispatcher.GirlServlet

GirlServlet

/girl

3.结果

3.1浏览器输入

40a166475fd47654a15d07b03e0ca0e3.png

3.2浏览器返回结果

258cbd88b2357a0511de46bcaa5f6a8c.png

3.3控制台结果

9c2910d693da0ed442e490103e2c8e75.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值