如何从一个servlet文件调用另一个servlet文件?

时间:2014-01-06 10:21:54

标签: java jsp servlets nullpointerexception

我正在使用net beans 7.1并且我创建了一个带有两个servlet文件的JSP文件。 像

index.jsp ---> servlet1.java ---> servlet2.java

我从index.jsp文件中提取一些值并发送给servlet1.java

在这个servlet1.java文件中,我调用servlet2.java文件。

然后抛出NullPointerException 我该如何解决这个问题?

我的代码就像这样。

的index.jsp

<form  action="servlet1" method="post">  

servlet1.java

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

                              ..................
                              ..................
                              ..................
        servlet2 ob=new servlet2();
        ob.doPost(request, response);
                              ..................
                              ..................
                              ..................
       }

然后抛出NullPointerException

2 个答案:

答案 0 :(得分:15)

使用RequestDispatcher

RequestDispatcher rd = request.getRequestDispatcher("servlet2");
rd.forward(request,response);

RequestDispatcher的

  

定义一个对象,该对象接收来自客户端的请求并将它们发送到服务器上的任何资源(例如servlet,HTML文件或JSP文件)。


更新

无需手动创建servlet对象,只需使用RequestDispatcher来调用servlet,因为Web容器控制servlet的生命周期

来自Oracle JavaEE docs Servlet Lifecycle

servlet的生命周期由部署了servlet的容器​​控制 当请求映射到servlet时,容器执行以下步骤。

  1. 如果servlet的实例不存在,则为Web容器

  2. 调用服务方法,传递请求和响应对象。服务方法在Writing Service Methods

  3. 中讨论

答案 1 :(得分:1)

你在这做什么,

servlet2 ob=new servlet2();
ob.doPost(request, response);

没有必要为servlet显式创建一个对象,Web容器为servlet创建一个实例,并在应用程序的生存期期间共享它。虽然您在此处创建了一个对象,但它只返回现有对象。

您可以转而使用请求调度程序或页面重定向