hualinux servlet 2.19:servlet请求转发三种方式

目录

一、servlet请求转发三种方式

二、forward请求转发

三、 redirect重定向

四、forward请求转发和redirect重定向区别


hualinux servlet 2.19:servlet请求转发三种方式也需要了解一下

一、servlet请求转发三种方式

servlet中的请求转发主要有三种方式:

1、  forward:是指转发,将当前request和response对象保存,交给指定的url处理。并没有表示页面的跳转,所以地址栏的地址不会发生改变。

2、  redirect:是指重定向,包含两次浏览器请求,浏览器根据url请求一个新的页面,所有的业务处理都转到下一个页面,地址栏的地址会变发生改变。

3、  include:意为包含,即包含url中的内容,进一步理解为,将url中的内容包含进当前的servlet当中来,并用当前servlet的request和respose来执行url中的内容处理业务.所以不会发生页面的跳转,地址栏地址不会发生改变。

二、forward请求转发

forward请求转发(服务器端转发):

请求转发是将请求再转发到其他地址,转发过程中使用的是同一个请求,转发后浏览器地址栏内容不变。 

请求转发(服务器端转发):

1、客户端(HTML)向服务器发送一条请求,服务端发现匹配的servlet,并指定它去执行。当这个servlet执行完之后,它要调用getRequestDispacther()方法,返回值类型是RequestDispatcher,设定目标资源jsp(jsp==servlet是服务端)。

2、调用forward(ServletRequest req,ServletResponse res):该方法是RequestDispatcher接口的方法,将请求从一个servlet转发到服务器上另一个资源jsp(目标资源)(jsp==servlet是服务端)

3、目标资源jsp(jsp==servlet是服务端)接收转发过来的请求,并将接收数据后的jsp生成HTML返回给客户端

重点:转发是服务器行为,因此也是在这个web应用内转发,整个过程是一个请求一个响应。可以看做一个request请求里包含了多个servlet,多个servlet共享的是同一个request,所以他们之间可以通过getAttribute()读取前一个servlet的存值。

(因为是一次请求,所以地址栏是不会改变的)

request执行转发操作,request.getRequestDispacther"url".forward(request,response)

 

 

三、 redirect重定向

由原请求地址重新定位到某个新地址,原有的请求失效,客户端看到的是新的请求返回的响应结果,客户端浏览器地址栏变为新的请求地址其中第二次请求是由客户端浏览器自动发出。 

从上图中看出,知道为什么要用response而不用request了吧?

由response执行重定向操作: response.sendRedirect();

把上面两个图简化后为:

重定向(客户端跳转):

1、客户端(HTML)发送一个请求到服务器,服务器匹配servlet,这都和请求转发一样。

2、servlet处理完之后调用了sendRedirect()这个方法,这个方法是response的方法,所以,当这个servlet处理完之后,看到response.senRedirect()方法,立即向客户端返回这个响应,响应行告诉客户端你的目标资源在哪里你必须要再发送一个请求,去访问你的目标资源jsp(jsp==servlet客户端)。

3、紧接着客户端收到这个请求后,立刻发出一个新的请求,去请求你的目标资源jsp(这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了)

4、目标资源jsp把自己生成HTML返回给客户端。

重点:重定向是客户端行为,也就注定可以向任何地址发送请求,客户端行为的改变是服务器所给的指示,亦即是response的行为返回,每次请求都是新的行为,request不保留上次的内容。

(因为是两次请求,所以地址栏会改变)

 

四、forward请求转发和redirect重定向区别

两者最大区别是:

运用forward方法只能重定向到同一个Web应用程序中的一个资源。

而sendRedirect方法可以让你重定向到任何 

 

猜你喜欢

转载自blog.csdn.net/hualinux/article/details/106844469