请求转发与重定向

前言

在进行JavaWeb项目开发的时候,我们常常需要一些页面之间的跳转,来具体的处理某些场景下的业务,从而实现业务的模块化。:一般来说,任何一个Web项目都会有index页面,在不同的web框架下,index页面可能是不同的文件,比如说在Jsp+Jquery结合的Web框架下,index页面由index.jsp文件来完成,在Thymeleaf为主导的Web框架下,index页面就是以index.html的形式存在,因为Thymeleaf主导的就是倡导自然模板,即以HTML文件为模板,利用其自身带有的标准表达式、判断与循环、模板的布局

举个例子,在以Jquery与Jsp为主导的index.jsp中
index
此index中利用jsp中forward动作将页面请求转发,而不直接在index.jsp页面中处理视图层的逻辑。
<jsp:forward>用于将一个jsp的内容传送到page所指定的JSP程序或者Servlet中处理(URL)。既可以转发到静态的HTML页面,也可以转发到动态的JSP页面,或者转发到容器中的Servlet。
1. jsp:forward执行时,用户请求的地址依然没有发生变化,但页面内容却完全被forward目标页的内容。
2. 执行forward指令转发请求时,客户端的请求参数不会丢失。
3. <jsp:forward>动作指令之后的代码是不会执行的。

在本案例中,使用额外参数将请求转发到Servlet中,这样做的前提是在
web.xml文件中配置好相关的信息
记着用server就必须在web.xml中配置相应的信息。

<server>
<server-name>server名</server-name>
<server-class>server类的路径信息</server-class>
</server>
<server-mapping>
<server-name>server名</server-name>
<url-pattern>映射的地址</url-pattern>
</server-mapping>
<servlet>
   <servlet-name>ClientBookServlet</servlet-name>
   <servlet-class>com.atguigu.web.ClientBookServlet</servlet-class>
</servlet>
<servlet-mapping>
   <servlet-name>ClientBookServlet</servlet-name>
   <url-pattern>/client/bookServlet</url-pattern>
</servlet-mapping>

请求转发

请求转发本身是一种服务器行为,其本质是客户端请求到达服务端之后,服务端将这个请求信息进行一个转发并且将请求转发的对象进行保存,此时如果我们使用的是浏览器,会发现浏览器上方的URL路径栏中的路径是没有变化的。这是一种服务器的内部行为,是一个servlet将一个请求转发给服务器内部的另一个servlet的行为,这种跳转只能在服务器内部发生,也就是说只能将请求转发到一个位于该服务器内部的资源中,而不能转发到外部,这个和服务器内部的请求信息保存方式有关。

特点

1、请求转发不支持跨域访问,只能跳转到当前应用中的资源。
2、请求转发之后,浏览器地址栏中的 URL 不会发生变化,因此浏览器不知道在服务器内部发生了转发行为,更无法得知转发的次数。
3、参与请求转发的 Web 资源之间共享同一 request 对象和 response 对象。
4、由于 forward() 方法会先清空 response 缓冲区,因此只有转发到最后一个 Web 资源时,生成的响应才会被发送到客户端

重定向

重定向是指当浏览器向Tomcat服务器发送请求时,由于一个Servlet1类无法完成所有请求响应工作,这时候Servlet1类会通知浏览器重新定向到另一个Servlet2类。浏览器再次发送请求Servlet2,来获得Servlet2的响应。

在重定向中,使用到了另一个对象Response对象,这个对象是专门向客户端返回信息用的,使用重定向的时候,Servlet没有再继续向下跳转,而是使用HttpServletResponse对象向客户端进行了返回,它将ServletB的地址返回给了客户端,然后让客户端去重新访问这个地址,于是客户端就又发出了一次请求,这次请求是直接向ServletB的请求。这就解释了为什么我们使用重定向的时候,URL会发生改变,因此我们重新发送了一次请求,重定向是一个二次请求,和请求转发是不同的,与此同时,ServletA返回的这个地址不一定是服务器内部资源地址,也可以使一个站外地址,这样一来就能实现站外资源的跳转。

特点(与请求转发对比)

对比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值