Servlet学习笔记(二)——Servlet请求转发和请求包含

很多时候一个请求会需要多个Servlet协作才能完成,这时候就需要从一个Servlet中跳转到另个一Servlet中处理了。

一、格式

首先调用request的getRequestDispatcher(“参数”)方法,获取到一个RequestDispatcher对象:

ResquestDispatcher rd=request.getRequestDispatcher("/MyServlet");

参数为被包含或被转发的目标Servlet路径。

如果是请求转发,接下来输入:

rd.forward(request,response); 

如果是请求包含,接下来输入:

rd.include(request,response);

就可完成我们的请求转发和请求包含。二者的区别为:

  • 请求转发:由当前Servlet设置响应头(不能设置响应体),下一个Servlet既可设置响应头也可设置响应体。
  • 请求包含:当前Servlet和下一个Servlet共同完成相应头和响应体。

需要注意的是无论是请求转发还是请求包含,都在一个请求范围内,所以多个Servlet中使用的是同一个request和response。

二、请求转发

FirstServlet代码如下:

        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		response.setCharacterEncoding("utf-8");
		response.getWriter().print("This is the FirstServlet");
		
		RequestDispatcher rd=request.getRequestDispatcher("/SecondServlet");
		rd.forward(request, response);
	}

SecondServlet代码如下:

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		response.setCharacterEncoding("utf-8");
		response.getWriter().print("This is the SecondServlet");

	}

显示结果:


网页响应的结果我们可以看出FirstServlet中设置的响应体并没有在网页中显示出来,只有SecondServlet中设置的响应体被显示出来了。

三、请求包含

请求包含和请求转发中代码相比,只是在OneServlet中将forward()方法改为include()方法而已。

FirstServlet代码如下:

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		response.setCharacterEncoding("utf-8");
		response.getWriter().println("This is the FirstServlet");
		
		RequestDispatcher rd=request.getRequestDispatcher("/SecondServlet");
		rd.include(request, response);
	}

SecondServlet代码如下:

        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		response.setCharacterEncoding("utf-8");
		response.getWriter().print("This is the SecondServlet");

	}

显示结果:

网页响应可看出 FirstServlet和SecondServlet中设置的响应体都显示出来了。

四、请求转发和重定向的区别

  1. 请求转发是一个请求一次响应,而重定向是两次请求两次响应。
  2. 请求转发地址栏不变化,而重定向会显示后一个请求的地址。
  3. 请求转发只能转发到本项目其他Servlet,而重定向不只能重定向到本项目的其它Servlet,还能定向到其它项目。
  4. 请求转发是服务器端行为,只需给出转发的Servlet路径,而重定向需要给出requestURI,即包含项目名。
  5. 请求转发和重定向二者效率前者高,因为前者只发出一个请求。                                
    很多时候我们需要地址栏发生变化,那时候必须使用重定向。
    需要在下一个Servlet中获取到request域中的数据,必须用请求转发
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值