重定向和请求分派

来源:互联网 发布:打字软件有哪些 编辑:程序博客网 时间:2024/05/07 12:27
 

重定向

HttpServletponset接口提供的sendRedirect()方法用于生成302响应码和Location响应头,从而通知客户端去重新访问Location响应头中指定的URL,完整的定义语句:

       Public void sendRedirect(String location)throws IOException;

       其中Location参数指定了重定向的URL,他可以使用绝对URL和相对URL,Servlet容器会自动将相对URL转换成绝对URL后,在生成location字段

请求分派

Servlet API中定义了一个RequestDispatcher接口,俗称请求分派器。它定义了如下两个方法:

public void forward(ServletRequest request, ServletResponse response)

throws ServletException,IOException;

public void include(ServletRequest request, ServletResponse response)

throws ServletException,IOException;

获取RequestDispatcher实例的方式主要有两种:

调用ServletContext接口提供的getRequestDispatcher(String url)方法。

调用ServletRequest接口提供的getRequestDispatcher(String url)方法

重定向和请求分派的比较
HttpServletResponse的sendRedirect()方法实现的重定向和RequestDispatcher的forward()方法实现的请求转发的比较:

请求分派只能将请求转发给同一个Web应用中的其他组件;而重定向不仅可以定向到当前应用程序中的其他资源,也可以重定向到其他站点的资源上。

重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

请求分派的发起者和被调用者之间共享相同的request实例和response实例,它们属于同一个“请求/响应”过程;而重定向的发起者和被调用者使用各自的request实例和response实例,它们各自属于独立的“请求/响应”过程。

HttpServletRequest接口中提供了几个方法用来操作请求实例中存储的对象:

public void setAttribute(String name, Object obj):将对象存储进HttpServletRequest实例中。

public Object getAttribute(String name):检索存储在HttpServletRequest实例中的对象。

public Enumeration getAttributeNames():返回包含HttpServletRequest实例中的所有属性名的Enumeration对象。

ServletConfig和ServletContext的区别

整个Web应用只有一个ServletContext,在部署Web应用的时候,容器会建立这一个ServletContext对象,这个上下文对Web应用中的每个Servlet和JSP都可用。

Web应用中的各个Servlet都有自己的ServletConfig,它只对当前Servlet有效。

 

 

 

 

原创粉丝点击