• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

java中,请求和转发怎么实现,两者之间又有什么区别


wings

Recommended Posts

一、请求转发和重定向
请求转发:
  request.getRequestDispatcher(URL地址).forward(request,response)

  处理流程:

  客户端发送请求,Servlet做出业务逻辑处理。
  Servlet调用forword()方法,服务器Servlet把目标资源返回给客户端浏览器

请求转发

2)重定向:
  response.sendRedirect(URL地址)

  处理流程:

  客户端发送请求,Servlet做出业务逻辑处理。
  Servlet调用response.sendReadirect()方法,把要访问的目标资源作为response响应头信息发给客户端浏览器。
  客户端浏览器重新访问服务器资源xxx.jsp,服务器再次对客户端浏览器做出响应。

重定向
以上两种情况,你都需要考虑Servlet处理完后,数据如何在jsp页面上呈现。图例是请求、响应的流程,没有标明数据如何处理、展现。

二、转发和重定向的路径问题
    1)使用相对路径在重定向和转发中没有区别
    2)重定向和请求转发使用绝对路径时,根/路径代表了不同含义
    重定向response.sendRedirect("xxx")是服务器向客户端发送一个请求头信息,由客户端再请求一次服务器。/指的Tomcat的根目录,写绝对路径应该写成"/当前Web程序根名称/资源名" 。如"/WebModule/login.jsp","/bbs/servlet/LoginServlet"
    
    转发是在服务器内部进行的,写绝对路径/开头指的是当前的Web应用程序。绝对路径写法就是"/login.jsp"或"/servlet/LoginServlet"。

总结:以上要注意是区分是从服务器外的请求,还在是内部转发,从服务器外的请求,从Tomcat根写起(就是要包括当前Web的根);是服务器内部的转发,很简单了,因为在当前服务器内,/写起指的就是当前Web的根目录。

三、转发和重定向的区别
    1·request.getRequestDispatcher()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;服务器内部转发,整个过程处于同一个请求当中。
    response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。不在同一个请求。重定向,实际上客户端会向服务器端发送两个请求。所以转发中数据的存取可以用request作用域:request.setAttribute(), request.getAttribute(),重定向是取不到request中的数据的。只能用session。

    2·forward()更加高效,在可以满足需要时,尽量使用RequestDispatcher.forward()方法。(思考一下为什么?)

    3·RequestDispatcher是通过调用HttpServletRequest对象的getRequestDispatcher()方法得到的,是属于请求对象的方法。
    sendRedirect()是HttpServletResponse对象的方法,即响应对象的方法,既然调用了响应对象的方法,那就表明整个请求过程已经结束了,服务器开始向客户端返回执行的结果。

    4·重定向可以跨域访问,而转发是在web服务器内部进行的,不能跨域访问。

原文链接:https://blog.csdn.net/qq_40406929/article/details/85918561?depth_1-utm_source=distribute.pc_category.none-task-blog-new-3&request_id=&utm_source=distribute.pc_category.none-task-blog-new-3

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now