我正在使用net beans 7.1并且我创建了一个带有两个servlet文件的JSP文件。 像
index.jsp ---> servlet1.java ---> servlet2.java
我从index.jsp
文件中提取一些值并发送给servlet1.java
。
在这个servlet1.java
文件中,我调用servlet2.java
文件。
然后抛出NullPointerException
我该如何解决这个问题?
我的代码就像这样。
<form action="servlet1" method="post">
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
..................
..................
..................
servlet2 ob=new servlet2();
ob.doPost(request, response);
..................
..................
..................
}
然后抛出NullPointerException
。
答案 0 :(得分:15)
RequestDispatcher rd = request.getRequestDispatcher("servlet2");
rd.forward(request,response);
定义一个对象,该对象接收来自客户端的请求并将它们发送到服务器上的任何资源(例如servlet,HTML文件或JSP文件)。
无需手动创建servlet对象,只需使用RequestDispatcher
来调用servlet,因为Web容器控制servlet的生命周期。
来自Oracle JavaEE docs Servlet Lifecycle
servlet的生命周期由部署了servlet的容器控制 当请求映射到servlet时,容器执行以下步骤。
如果servlet的实例不存在,则为Web容器
加载servlet类。
创建servlet类的实例。
通过调用init方法初始化servlet实例。初始化包含在Creating and Initializing a Servlet。
调用服务方法,传递请求和响应对象。服务方法在Writing Service Methods。
答案 1 :(得分:1)
你在这做什么,
servlet2 ob=new servlet2();
ob.doPost(request, response);
没有必要为servlet显式创建一个对象,Web容器为servlet创建一个实例,并在应用程序的生存期期间共享它。虽然您在此处创建了一个对象,但它只返回现有对象。
您可以转而使用请求调度程序或页面重定向。