【问题标题】:How can I call from one servlet file to another servlet file? [duplicate]如何从一个 servlet 文件调用另一个 servlet 文件? [复制]
【发布时间】:2014-01-06 10:21:53
【问题描述】:

我使用的是 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

【问题讨论】:

标签: java jsp servlets nullpointerexception


【解决方案1】:

使用RequestDispatcher

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

RequestDispatcher

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


更新

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

来自 Oracle JavaEE 文档Servlet Lifecycle

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

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

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

【讨论】:

    【解决方案2】:

    你在这里尝试什么,

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

    无需为 servlet 显式创建对象,Web 容器会为 servlet 创建一个实例并在应用的生命周期 期间共享它。虽然您在这里创建了一个对象,但它只会返回现有的对象。

    您可以改为使用 Request Dispatcher 或页面重定向

    【讨论】:

    • 谢谢,效果很好!
    猜你喜欢
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多