关于程序员:JavaWeb之请求转发和重定向

8次阅读

共计 2524 个字符,预计需要花费 7 分钟才能阅读完成。

申请转发和重定向

// 申请转发
request.getRequestDispatcher(url).forward(req,resp)
// 申请重定向
response.sendRedirect(url)

<!– more –>

申请转发 forward

申请转发是将一个申请转到服务器的另一个资源,在解决完初步申请另外的资源之后生成响应,应用的是 RequestDispatcher.forward 办法来实现的,先看一下 RequestDispatcher 这个接口是什么

RequestDispatcher 接口

RequestDispatcher 的实例是由 Servlet 引擎创立的,用于包装一个要被其余资源调用的资源,并能够通过其中的办法将客户端的申请转发给所包装的资源

public interface RequestDispatcher {

   
    static final String FORWARD_REQUEST_URI = "javax.servlet.forward.request_uri";

    static final String FORWARD_CONTEXT_PATH = "javax.servlet.forward.context_path";

    static final String FORWARD_PATH_INFO = "javax.servlet.forward.path_info";

    static final String FORWARD_SERVLET_PATH = "javax.servlet.forward.servlet_path";

    static final String FORWARD_QUERY_STRING = "javax.servlet.forward.query_string";

    static final String INCLUDE_REQUEST_URI = "javax.servlet.include.request_uri";

    static final String INCLUDE_CONTEXT_PATH = "javax.servlet.include.context_path";

    static final String INCLUDE_PATH_INFO = "javax.servlet.include.path_info";

    static final String INCLUDE_SERVLET_PATH = "javax.servlet.include.servlet_path";

    static final String INCLUDE_QUERY_STRING = "javax.servlet.include.query_string";

    public static final String ERROR_EXCEPTION = "javax.servlet.error.exception";

    public static final String ERROR_EXCEPTION_TYPE = "javax.servlet.error.exception_type";

    public static final String ERROR_MESSAGE = "javax.servlet.error.message";

    public static final String ERROR_REQUEST_URI = "javax.servlet.error.request_uri";

    public static final String ERROR_SERVLET_NAME = "javax.servlet.error.servlet_name";

    public static final String ERROR_STATUS_CODE = "javax.servlet.error.status_code";

      // 用于将申请转发到 RequestDispatcher 对象封装的资源
    public void forward(ServletRequest request, ServletResponse response)
        throws ServletException, IOException;

      // 将 RequestDispatcher 对象封装的资源作为以后响应的一部分蕴含进来
    public void include(ServletRequest request, ServletResponse response)
        throws ServletException, IOException;
}

申请重定向 sendRedirect

重定向应用的是 response.sendRedirect 办法,sendRedirect 办法会产生一个 302 的响应码和 Location 的响应头,从而告诉客户端去从新拜访 Location 响应头中指定的 URL,此时会创立一个新的申请。个别用于防止用户的非正常拜访。

// 申请重定向
response.sendRedirect(url);

除了能够应用 response.sendRedirect 办法,还能够通过手动的设置所跳转的地址

response.setStatus(302);
response.setHeader("Location","所要重定向的地址")

两者的区别

本质区别:申请转发是在服务器外部转发,重定向是在客户端转发

申请转发只向服务器发动一次申请,重定向发动两次申请

  • 申请转发:能够放弃 request 的 parameter,attribute 这些值

    重定向:抛弃 request 的 parameter,attribute 这些值

  • 申请转发:地址是首次发出请求的地址
    重定向:地址栏是最初响应的地址
  • 申请转发:在最终的 Servlet 中,request 对象和直达的那个 request 是同一个对象
    重定向:在最终的 Servlet 中,request 对象和直达的那个 request 不是同一个对象
  • 申请转发:只能转发到以后 web 利用
    申请重定向:能够重定向到任何资源
  • 申请转发:/ 代表以后 web 利用的根目录
    申请重定向:/ 代表以后 web 站点的根目录,要应用 request.getContextPath()再加上门路

https://zhhll.icu/2021/javaweb/ 根底 /4. 申请转发和重定向 /

本文由 mdnice 多平台公布

正文完
 0