在Web应用程序中,应用程序的servlet等各种组件之间可能需要通信以便处理客户机请求。例如,假设Web应用程序中有一个servlet显示组织的版权信息。您可以使用各种servelt通信技术将此servlet的内容纳入到需要显示版权信息的所有其他应用程序servlet中。同样,如果处理请求时发生任何异常,Web应用程序的servlet可以向其他servlet转发请求。您可以使用以下对象在Web应用程序中实现servlet间通信技术:
- 请求分发程序对象
- servlet请求对象
1. 请求分发程序对象
请求分发程序是用于servlet 间通信的javax.servlet.RequestDispatcher接口的对象。您可以在servlet中使用请求分发程序向静态HTML页面或servlet等其他资源转发请求。还可以使用RequestDispatcher对象将其他servlet的内容纳入到您的servlet中。ServletContext接口提供了getRequestDispatcher(String path)方法来返回RequestDispatch对象。该方法 的路径参数指定了相对于目标资源上下文根的路径。获取到RequestDispatcher对象后,可以实现以下功能:
- 将内容纳入其他servlet
- 向其他servlet转发请求
将内容纳入其他servlet
RequestDispathcer接口提供了include()方法,可以使用此方法将内容纳入其他servlet。为此,首先需要获取RequestDispatcher接口的对象,然后调用include()方法。例如,假设ervlet CopyrightServlet 在ABC公司的网站上显示该组织的版权信息。
您可以使用以下代码开发CopyrightServlet servlet:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
/* This servlet prints Copyright Infomation.*/
public class CopyrightServlet extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOExcepiton
{
PrintWriter pw = response.getWriter();
pw.println("Copyright 2000-2004 ABC,Inc.All Rights Reserved.<BR>");
}
}
要将servlet CopyrightServlet的内容纳入servlet IncludeServlet,您需要首先通过传递CopyrightServlet的路径作为参数来调用ServletContext接口的getRequestDispatcher()方法。这样将返回RequestDispatcher对象。然后可以调用include()方法来纳入CopyrightServlet servlet的内容。您可以使用以下代码创建IncludeServlet servlet:
import javax.servlet.*;
import javax.servlet.http.*;
import javaa.io.*;
public class IncludeServlet extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
/* Obtain a RequestDispatcher Object */
RequestDispatcher dispatch = getServletContext().getRequestDispatcher("/CopyrightServlet")