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

8
我将使用NetBeans 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异常。

请参见:http://stackoverflow.com/questions/4496770/how-to-invoke-another-servlet-in-a-servlet - Kevin Bowersox
2个回答

17

使用RequestDispatcher

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

请求分发器(RequestDispatcher)

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


更新

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

来源于 Oracle JavaEE 文档Servlet 生命周期

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

  1. 如果 servlet 实例不存在,则 web 容器

    • 加载 servlet 类。

    • 创建 servlet 类的实例。

    • 通过调用 init 方法初始化 servlet 实例。有关初始化的信息,请参阅创建和初始化 Servlet

  2. 调用服务方法,并传递请求和响应对象。服务方法在编写服务方法中讨论。


2

你在这里尝试什么,

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

不需要显式创建Servlet对象,Web容器会为Servlet创建实例,并在应用程序的生命周期内共享它。尽管您在此处创建了一个对象,但它仍将仅返回现有的对象。

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


谢谢,它完美地工作了! - parsecer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接