申请转发和重定向
// 申请转发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多平台公布