客户端跳转与服务器端跳转的区别

客户端跳转时用HttPservletResopse对象的sendRedirect函数实现,服务器端跳转是使用RequestDispather对象的forward方法实现的。这两者之间的区别主要体现在三个方面:

1. 使用服务器端跳转时,客户浏览器的地址栏并不会显示目标地址的URL,而是用客户端跳转时,地址栏当中会显示目标资源的URL;

2. 服务器端跳转是由客户端发送一个请求,请求一个服务器资源——如JSP和Servlet——,这个资源又将请求转到另一个服务器资源,然后再给客户端发送一个响应,也就是说服务器端跳转是客户端发送一次请求,服务器端给出一次响应;而客户端跳转的流程则不同。客户端同样是发送一个请求给服务器端资源,这个服务器资源会首先给客户端一个响应,客户端再根据这个响应当中所包含的地址,再次向服务器端发送一个请求,也就是说客户端跳转是两次请求,两次响应;

3. 在进行客户端跳转和服务器端跳转时,都需要指定目标资源的URL,如果这个路径以“”开始。在客户端跳转当中“”代表的是应用服务器根目录,而在服务器端跳转当中代表的是应用程序根目录。

 

 

page = 页面级别

request = 请求级别(与服务器端跳转配合使用)

session = 会话级别(客户端跳转(服务器端跳转也可,但是客户端跳转更加突出了session的作用范围))

application = 应用级别

客户端跳转:服务器端将请求结果返回给客户端,客户端向服务器发出另一次请求。在客户端跳转过程中是两次不同的请求。在地址栏中显示的是最后一次请求地址。

客户端跳转可以进行站外跳转。

1、链接跳转:<a href=””></a>

2、表单提交

3、Response.sendRedirect(“3.jsp”);

4、<mata http-equiv=”refresh”, content=”3;2.jsp”/>

5、response.setHeader(“refresh”,” 3;2.jsp”);

6、客户端跳转“/”代表服务器跟路径webapps

 

服务器端跳转(容器内跳转):能够自动的在服务器内部进行跳转,这种跳转对用户来说是透明的。两次跳转时同一个request,在地址栏中显示的事第一次页面地址。

只能进行站点内跳转。

1、<jsp:forward page=””/>

2、pageContext.forward();

3、 request.getRequestDispatcher("1.jsp").forward(request,response);

3、服务器端跳转“/”代表站点根路径

 
response.sendRedirect 的功能是地址重定向(页面跳转)

1.response.sendredirect(url);    

新的页面并不能处理旧页面的pagecontext(request,response,...)对象,所以你用request.getparameter(ff)企图调用原页面     request对象的参数,得到的自然是null        

2.getservletcontext().getrequestdispatcher(url).forward(request,response);  

      forward函数已经把原页面的request,response对象传入新的页面,因此这新旧页面拥有相同的     request,response对象。request.getparameter(ff)就可以得到相应的值        

3.servletcontext.getrequestdispatcher   路径必须是相对上下文的绝对路径                 servletrequest.getrequestdispatcher   可以是相对也可以是绝对            

 服务器端进行转向的4种方法:    

     1.   servletcontext 的 getrequestdispatcher()    

     2.   servletcontext 的 getnameddispatcher()    

     3.   servletrequest 的 getrequestdispatcher()    

     4.   servletresponse 的 sendredirect()进行转向。    

1.2.3   =>   forward()                     4.   sendredirect()            

 使用forward方法,因为这些这样比较高效。只有在forward方法不能使用时,再使用servletresponse的sendredirect()方法。        

 <jsp:fordward>与   sendredirect   方法的比较    

 虽然   <jsp:fordward>与   sendredirect   方法,都可以将浏览器浏览的网页,重导至另一个网页,但是两者在原理上是不太相同。    

a. <jsp:fordward>   :   动作是利用伺服端,将资料输出至缓冲区的机制,在前一个网页尚未输出到客户端前,取消资料的输出,然后输出另一个网页的资料,达到重导浏览器的效果。     优点:   两网页间可以分享   request   对象内的变量。    

b. sendredirect   :   动作是透过   http   协议的   header   ,   对浏览器下达重导指令,因此,不牵涉到服务器端缓冲区的问题。     不过由于   sendredirect   方法作用于客户端,所以重导前后网页无法分享存在于   request   对象内的变量。     solution:   response.sendredirect(“sendredirect.htm?name=sparkwu&e-mail=spark.wu@cobra-tech.com”)       

         直观一点:                     response.sendredirect(url);                       对服务器的响应进行重定向。当server作出响应后,client客户端的请求的生存周期就终止了。这个时候再用request.getparameter()或request.getattribute()得到的只能是null。                         getservletcontext().getrequestdispatcher(url).forward(request,response);                     它则可以认为是对client的请求(request)   进行传递,在server没有进行响应前,即没有response一直可以进行传递--重定向。网友:alexlovejava 前者是的跳转是的客户端,后者是在服务器端,后者在跳转的时候可以传request对象,前者只能通过?穿参数,后者是forword(),这两者在流转的时候url的路径不一样,在ie地址栏显示的路径也不一样,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值