servlet的dispatcher包含forward/include

很多时候,使用一个servlet来收集、处理请求,处理的结果会交由另一个Servlet对浏览器进行响应。如果使用多个servlet处理请求,则会依据请求的内容来决定转发给哪一个servlet作下一步的处理。

执行语句:

ResquestDispatcher rd = request.getRequestDispatcher("URL");

转发请求有两种:forward / include
1、forward转发
html:

<a href="s1">转发请求器</a>

servlet1:

public class servlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html;charset=UTF-8");
		resp.getWriter().write("这是servlet1里面的resp");
		req.setAttribute("test", "这是Servlet1里面的test");
		RequestDispatcher rd = req.getRequestDispatcher("s2");
		rd.forward(req, resp);
	}
	protected void doPost(HttpServletRequest req, HttpServletResponse resp){
		doGet(req,resp);
}
}

sevlet2:

public class servlet2 extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.getWriter().write("这是servlet2里面的resp");
		String test = (String)req.getAttribute("test");
		resp.getWriter().write(test+"<br/>");		
	}
	protected void doPost(HttpServletRequest req, HttpServletResponse resp){
		doGet(req,resp);
}
}

web.xml文件(此时应该配置2个servlet的xml文件):

<servlet>
	<servlet-name>s1</servlet-name>
	<servlet-class>com.sy.servlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>s1</servlet-name>
	<url-pattern>/s1</url-pattern>
</servlet-mapping>

<servlet>
	<servlet-name>s2</servlet-name>
	<servlet-class>com.sy.servlet2</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>s2</servlet-name>
	<url-pattern>/s2</url-pattern>
</servlet-mapping>

结果:
在这里插入图片描述
会发现servlet1里面的resp并没有write出来,但是resp里面设置的响应contentType起作用了。

2、include转发
代码与上面都一样,不过将rd.forward(req, resp) 改为 rd.include(req, resp);
结果:
在这里插入图片描述
发现servlet1里面的write可以实现了。

总结:
forward:servlet1将请求全部转给servlet2,自己的resp不响应
include:是将servlet2的resp包含在了servlet1,在客户端会感觉只有一个servlet,也就是所有的resp都会被响应。

forward:
在这里插入图片描述
include:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值