2024年5月11日发(作者:)

请求转发和重定向是Servlet处

理完数据后进行页面跳转的两

种主要方式

• 请求转发

 请求转发是指将请求再转发到另一资源(一般为JSP或Servlet)。此过程依然在

同一个请求范围内,转发后浏览器地址栏内容不变

 请求转发使用RequestDispatcher接口中的forward()方法来实现,该方法可以把

请求转发到另外一个资源,并让该资源对浏览器的请求进行响应

RequestDispatcher rd = uestDispatcher(path);

d(request,response);

uestDispatcher(path) .forward(request,response);

• 重定向

 重定向是指页面重新定位到某个新地址,之前的请求失效,进入一个新的请求,

且跳转后浏览器地址栏内容将变为新的指定地址

 重定向是通过HttpServletResponse对象的sendRedirect()来实现,该方法相当于

浏览器重新发送一个请求

direct(path);

• 请求转发和重定向区别如下:

 forward()只能将请求转发给同一个Web应用中的组件,而sendRedirect()方法不

仅可以重定向到当前应用程序中的其他资源,还可以重定向到其他站点的资源。

 sendRedirect()方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发

生改变,由初始的URL地址变成重定向的目标URL;而调用forward()方法的请

求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

 forward()方法的调用者与被调用者之间共享相同的request对象和response对

象;而sendRedirect()方法调用者和被调用者使用各自的request对象和response

对象,它们属于两个独立的请求和响应过程。

使用请求对象(request)存储数据 (在servlet中存,

request. setAttribute(“score”,score);

int score=(INTEGER)request. getAttribute(“score”);

HttpServletRequest接口的方法:

public void setAttribute(String name, Object obj)

public Object getAttribute(String name)

public Enumeration getAttributeNames()

public void removeAttribute(String name)

使用HttpSession对象存储数据

HttpSession session=sion();

session.

setAttribute(“score”,score);

int score=(Integer)

session

. getAttribute(“score”);

 HttpSession接口的方法

public void setAttribute(String name, Object obj)

public Object getAttribute(String name)

public Enumeration getAttributeNames()

在JSP中取)

public void removeAttribute(String name)

• 使用ServletContext对象存储数据

ServletContext context = vletContext();或

ServletContext context = vletConfig().getServletContext();

context. setAttribute(“score”,score);

int score=(Integer)

application

. getAttribute(“score”);

 ServletContext接口的方法

public void setAttribute(String name, Object obj)

public Object getAttribute(String name)

public Enumeration getAttributeNames()

public void removeAttribute(String name)

简单的说,HttpServletRequest共享的对象仅在请求的生存期中可被访问,使用

HttpSession共享的对象仅在会话的生存期中可被访问,使用ServletContext共享的

对象在应用程序的生存期中可被访问。