Servlet(7)请求转发和请求重定向

上一节:https://blog.csdn.net/Carl_changxin/article/details/86612004

本节参考:https://blog.csdn.net/liubin5620/article/details/79922692

1、概念

(1)背景:当前客户端访问的Servlet1不能处理客户端的问题,此时就有两种方式解决这种情况。

方式1:服务器通过把请求转发给Servlet2去处理然后响应客户端,此时客户端是不知道问题是由Servlet2处理的。

方式2:服务器告知客户端Servlet2能处理其问题,客户端再去访问Servlet2,即客户端把请求重定向给Servlet2。

(2)区别:上述的方式1和2分别是请求转发和请求重定向的思路,两种方式的区别大致分成4点。

区别1:请求转发是服务器完成的;请求重定向是客户端完成的。

区别2:请求转发客户端是不知道的,故浏览器的请求网址在请求转发的时候是不会改变的;因为请求重定向是由客户端完成的,所以请求网址会在请求重定向的时候作出相应改变。

区别3:客户端发出请求,再经过请求转发,最终也只算是一次请求;请求重定向算两次请求

区别4:请求转发只能访问同一个WEB应用中的组件;而请求重定向可以访问外部应用

2、实现

(1)梳理

自定义的Servlet继承HttpServlet类时,doGet和doPost方法是针对不同的请求方式可以选择实现doGet或doPost方法,与转发和重定向无关;

在do方法中有两个参数HttpServletRequest和HttpServletResponse,分别是接收请求消息的信息和设置响应消息的信息,具体的操作可参考:(https://blog.csdn.net/Carl_changxin/article/details/86607047);

(2)实现

HttpServletRequest对象中有请求转发相关的方法,请求转发的实现如下:

request.getRequestDispatcher("/servlet/demo6").forward(request, response);

HttpServletResponse对象中有请求重定向的方法,实现如下:

/*//告诉客户端要重新定向新的资源
		response.setStatus(302);
		//告诉浏览器要去访问哪个URL
		response.setHeader("location", "/day09_00_HttpServletResponse/servlet/demo8");*/

//上面两句合成一句,如下;request.getContextPath()的作用是获取/day09_00_HttpServletResponse
response.sendRedirect(request.getContextPath()+"/servlet/demo6");

(3)注意路径的填写

请求转发发生在服务器,第一个/代表当前项目根目录后的/ 

请求重定向发生在客户端,第一个/代表localhost:8080后的/ ,需要注意重定向的路径要写全了,一般可用getContextPath获取当前项目的根目录

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值