web对象中请求转发和重定向

请求转发

	请求转发,是一种服务器的行为,当客户端请求到达后,服务器进行转发,此时会将请求对象进行保存,地址栏中的URL 地址不会改变,得到响应后,服务器端再将响应发送给客户端,从始至终只有一个请求发出。实现方式如下,达到多个资源协同响应的效果。
req.getRequestDispatcher("转发的路径").forward(req,resp);

public class AServlet01 extends HttpServlet {
	private static final long serialVersionUID = 1L;


	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("llf被请去吃s");
		String money = request.getParameter("money");
		System.out.println("llf请求转发给了ld");
		request.getRequestDispatcher("BS").forward(request, response);
	}

}

public class BServlet02 extends HttpServlet {
	private static final long serialVersionUID = 1L;


	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		System.out.println("ld被请求去吃s");
		String money = request.getParameter("money");
		if(money == null || "".equals(money)){
			response.getWriter().write("不给钱,就想要我l某人吃s");
			return;
		}
		System.out.println("拿到" + money + "毛钱并吃了s");
		PrintWriter out = response.getWriter();
		out.write("我l某人爱吃s");
		out.close();		
	}

}

重定向跳转

	重定向是一种服务器指导客户端的行为。客户端发出第一个请求,被服务器接收,经过处理服务器进行响应,与此同时,服务器给客户端一个地址(下次请求的地址 resp.sendRedirect("url");),当客户端接收到响应后,立刻、马上、自动根据服务器给的地址进行第二个请求的发送,服务器接收请求并作出响应,重定向完成。从描述中可以看出重定向当中有两个请求存在,并且属于客户端行为。
resp.sendRedirect("index.html")
public class AServlet01 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("张家辉被请求去买水");
		String money = request.getParameter("money");
		// 往request域对象存数据(格式  key:value)
		request.setAttribute("小费", "0.1");

		System.out.println("张家辉重定向给了万鲲");
		// 重定向
		response.sendRedirect("s02");
	}

}
public class BServlet02 extends HttpServlet {
	private static final long serialVersionUID = 1L;


	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		System.out.println("万鲲被请求买水");
		// 从request作用域中获取数据
		String smallmoney = (String)request.getAttribute("小费");
		System.out.println("得到小费" + smallmoney);
		String money = request.getParameter("money");
		if(money == null || "".equals(money)){
			response.getWriter().write("不给钱,滚蛋");
			return;
		}
		System.out.println("拿到" + money + "毛去买水");
		PrintWriter out = response.getWriter();
		out.write("这是一瓶超级好喝的自来水!");
		out.close();
	}

}

两者区别

请求转发(req.getRequestDispatcher().forward())重定向(resp.sendRedirect())
一次请求,数据在 request 域中共享两次请求,request 域中数据不共享
服务器端行为客户端行为
地址栏不发生变化地址栏发生变化
绝对地址定位到站点后绝对地址可写到 http://
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值