Java Web开发6___包含 Web 资源----RequestDispatcher.include 方法

有时候为了实现代码重用,  需要将某些公用的代码 和 数据放到一个或几个Servlet 中, 以供其他的 Servlet 使用,为这实现上述功能, Java Web 专门提供了RequestDispather.include 方法,  在具体使用该方法时,可以首先通过 getServletContext  方法获取 ServletContext 对象, 然后通过 ServletContext.getRequestDispatcher 方法获取RequestDispatcher 对象.

 

IncludingServlet 类演示了如何使用include  方法包含Web 资源,   代码如下:

//包含了一个 Servlet: IncludedServlet 和一个html 页面
public class IncludingServlet extends HttpServlet {

	@Override
	protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{

		response.setContentType("text/html; charset=gb2312");
		PrintWriter out = response.getWriter();
		out.println("中国<br/>");
		//向客户端输出请求
		out.println("IncludingServlet URI:" + request.getRequestURI() + "<p/>");
		// RequestDispatcher对象封装的资源路径前必须加“/”, 
		RequestDispatcher rd = getServletContext().getRequestDispatcher("/servlet/IncludedServlet");
		//包含 IncludedServlet
		rd.include(request, response);
		
		rd = getServletContext().getRequestDispatcher("/chp4/IncludedHtml.html");
		//包含includedHtml.html页面
		rd.include(request, response);

	}
}


在 上述代码中, 包含了两个Web资源,映射路径为 "/servlet/IncludedServlet"  的Servlet 类 和 名为IncludedHtml.html 的静态页面

getRequsetDispatcher 方法的参数必须以  "/" 开头

IncludedServlet 类的代码如下:

public class IncludedServlet extends HttpServlet{

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{

		response.setContentType("text/plain; charset=utf-8");
		PrintWriter out = response.getWriter();
		out.println("<b>超人</b><br/>");
		out.println("IncludedServlet URI:" + request.getRequestURI() + "<p/>");

	}
}


 在WebRoot\chp4 目录下创建一个IncludedHtml.html 文件,代码如下:

<meta content="text/html; charset=utf-8">
<table border="1">
	<tr>
		<td>
			Book Name
		</td>
		<td>
			Publish Date
		</td>
	</tr>
	<tr>
		<td>
			Java 编程思想
		</td>
		<td>
			2006年12月
		</td>
	</tr>
</table>

在浏览器输入 URL:  http://localhost:8080/webdemo/servlet/IncludingServlet

运行效果如下

              包含了 Web 资源

使用include 方法时,Servlet 引擎并不会 调整HttpServletRequest 中的消息, 因此,IncludingServlet 和 IncludedServlet都输出了访问IncludingServlet 时的URI. 从这一点可以看出,调用 include 方法就相当于 Servlet 引擎在IncludingServlet 的service 方法中又调用了IncludedServlet 的 service 方法, 并将IncludingServlet 的service 方法的两个参数传入了IncludedServlet 的service 方法, 因此才会得出同样的URI 值。

在被调用都 中(在本例中为 IncludedServlet) 设置的响应消息头将被忽略。 读者从IncludedServlet 类中可以看到, 已经将响应正文的编码格式设置成了utf-8, 

但是, 注意Servlet 引擎发送的并不是utf-8编码格式, 而是gb2312.  另外在IncludedServlet  类中设置了MIME 类型是"text/plain" 而在输出“超人” 时变成了粗体, 而不是直接输出"<b>超人</b><br/>".  因此可以断定, 在IncludedServlet 中调用的setContentType  方法并没有生效。


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值