Request请求转发与资源共享


一、请求转发

请求转发:是一种在服务器内部的资源跳转方式

假设要完成一项非常复杂的操作,我们访问AServlet类来完成,但仅让AServlet类中的一个方法来完成这项复杂操作并不合理。类的功能尽量单一细化,所以我们定义两个类AServlet和BServlet,当AServlet执行完后跳转到BServlet。这就是资源跳转的方式。

(1)请求转发的步骤

1.通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path);
2.通过requestDispatcher对象的forward方法进行转发:forward(ServletRequest request,ServletResponse response);

(2)request请求转发的特点☆

  • ①浏览器地址栏路径不发生变化。
  • ②只能转发到当前服务器内部资源中。
  • ③转发是一次请求。

二、数据共享

(1)request域对象

域对象:一个有作用范围的对象,可以在范围内共享数据。

request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据。

(2)提供的方法

void setAttribute(String name,Object obj) 存储数据
Object getAttribute(String name) 通过键获取值
removeAttribute(String name) 通过键移除键值对

三、演示请求转发与数据共享

写两个类分别继承HttpServlet,在RequestDemo7中转发到RequestDemo8。

package com.hudie.web.request;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 类说明:
 * 		请求转发演示
 * @author qianliangguo
 */
@WebServlet("/requestDemo7")
public class RequestDemo7 extends HttpServlet {

	@Override
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		System.out.println("Demo7...");
		request.setAttribute("msg", "hello");
		
		//转发到Demo8资源
		//先获得请求转发器对象,再通过对象的forward方法转发
		request.getRequestDispatcher("/requestDemo8").forward(request, response);
		
	}

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}
	
}

package com.hudie.web.request;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 类说明:
 * 		请求转发演示
 * @author qianliangguo
 */
@WebServlet("/requestDemo8")
public class RequestDemo8 extends HttpServlet {

	@Override
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		System.out.println("Demo8...");
		Object msg = request.getAttribute("msg");
		System.out.println(msg);
	}

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}
	
}

地址栏http://localhost:8080/Servlet&http&request/requestDemo7访问RequestDemo7后自动转发到了RequestDemo8:

在这里插入图片描述

发布了343 篇原创文章 · 获赞 905 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/weixin_43691058/article/details/104032148