分享

servlet的请求转发与重定向

 擎天猪mpnlajkd 2016-11-08
servlet可以将发送给自己的某个请求转发给另外一个URL地址,这个地址可以是html、jsp、servlet或是其他的http地址。

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

1.inclue方法,应用代码为request.getRequestDispatcher("/url").include(request, response),其中URL地址是某个http地址。include转发时,地址栏没有改变,是原来的地址,这个过程是在服务器端完成,Servlet和被包含的页面同时被输出。

2.forward方法,request.getRequestDispatcher("/url").forward(request, response),地址栏也不会改变,同样是在服务器端完成,但仅输出被转发的URL中的内容

3.sendRedirect,只是客户重新发起一个请求,第二个请求指向其参数url。一般称做重定向,客户端的地址栏将改变为url值,是由客户端发起的第二次请求。参数中要写明具体的url地址,因为当客户端再次发送请求时,会直接请求web服务器根目录。要是要转发的一个html地址,它在WEB-INF文件夹下,那么要从servlet转发到这个 html地址,必须加上当前的web路劲名,这个路劲名可以通过request.getContextPath()获得,那么该转发代码可以为response.sendRedirect(request.getContextPath()+"/login.html");

注意:重定向是浏览器向服务器重新发出请求,但转发相当于把request的范围扩大,例如:
在a界面有个连接<a href="b.jsp?id=1">,在b界面可以通过request.getAttribute("id")获得,
在b界面也有个连接<a href="c.jsp?name="123">,则在界面用request.getAttribute("id")就取不到值。这是每个连接就像一个重定向,相当于重新创建了一个request,当b->c时,a->b的request已经结束了。
接下来,在c的界面前加<jsp:forward page="d.jsp"/> ,那么变量name在c、d都有效,所以在d想取到参数name的值,不必要把参数值放到session里来扩大他的范围。   

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多