Java 提交前加载页面时出现Servlet空指针异常

Java 提交前加载页面时出现Servlet空指针异常,java,oracle,jsp,servlets,nullpointerexception,Java,Oracle,Jsp,Servlets,Nullpointerexception,下面我的servlet正在触发一个空指针异常,但服务器控制台没有详细说明异常从何处触发。此外,链接到servlet的表单所在的页面不会加载,只会显示一个关于空指针异常的HTTP Status 500错误。下面我复制了我的servlet和数据库连接代码,但我真的能看到错误的来源吗 有人可以看看我的代码,看看是否有任何直接的问题 我的Servlet: @WebServlet(name = "DateSearchServlet", urlPatterns = {"/Search"}) public c

下面我的servlet正在触发一个空指针异常,但服务器控制台没有详细说明异常从何处触发。此外,链接到servlet的表单所在的页面不会加载,只会显示一个关于空指针异常的HTTP Status 500错误。下面我复制了我的servlet和数据库连接代码,但我真的能看到错误的来源吗

有人可以看看我的代码,看看是否有任何直接的问题

我的Servlet:

@WebServlet(name = "DateSearchServlet", urlPatterns = {"/Search"})
public class DateSearchServlet {

DatabaseConnector dataManager;
boolean dbOK = false;
HomeList homes = new HomeList();

public void init() {
    dataManager = new DatabaseConnector();
}

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

    String dateFrom = request.getParameter("from");
    String dateTo = request.getParameter("to");

    if (dateFrom == null || dateTo == null) {
        dbOK = false;
    } else {
        dbOK = true;
    }//end if

    if (dbOK) {
        homes = dataManager.getPropertiesSearch(dateFrom, dateTo);
        request.setAttribute("homeList", homes);
        request.getRequestDispatcher("bookings.jsp").forward(request, response);
    } else {
        System.out.println("DBNOTOK");
        //will add error messages etc...
    }
}
}
JSP页面:

<div class="dateSearch">
   <form name="dateSearch" action="DateSearchServlet" method="post">
   <label for="from">Date From</label>
   <input type="text" id="from" name="from" />
   <label for="to">Date To</label>
   <input type="text" id="to" name="to" />
   <input type="submit" id="submit">
   </form>
</div>
<h2>List of Properties</h2>
<%
    HomeList homes = (HomeList)request.getAttribute("homeList");
%>

什么时候调用init()方法?很可能从未调用过它,并且您得到了一个NPE,因为
dataManager
在此行为空:

 homes = dataManager.getPropertiesSearch(dateFrom, dateTo);

你怎么知道有NPE?它是否在错误消息中指明了位置?请提供堆栈跟踪。
closeConnection()
是否测试通过的
conn
是否为空,或者是否介意它是否已经关闭?
bookings.jsp
是有效的相对路径吗?如果不是,则
getRequestDispatcher
可能返回null,并且
。forward
将获得NPE,但我认为不是这样。
bookings\u jsp.java
是否与servlet或DB代码(我假设是后者)相关?如果是,第191行是哪一行?它是一个servlet,因此在加载实例时会自动调用
init()
,而不显式调用它。
    public HomeList getPropertiesSearch(String from, String to) {
    HomeList homes = new HomeList();//UserBean object to hold the user data
    Connection conn = null;
    conn = createConnection(conn);//set up the connection to the datbase

    //if connection is sucessful, create empty ResultSet and PreparedStatement
    if (conn != null) {
        ResultSet rs = null;
        PreparedStatement preparedStatement = null;
        try {
            String strQuery =
                    "SELECT homes.home_id, homes.title, homes.description, homes.living_room_count, homes.bedroom_count, homes.bathroom_count, homes.price, homes.sqft, "
                    + "listagg(features.feature_name, '\\n') WITHIN GROUP(ORDER BY features.feature_name) features, home_type.type_name\n"
                    + "FROM homes "
                    + "INNER JOIN bookings ON bookings.home_id <> homes.home_id"
                    + "INNER JOIN home_feature ON homes.home_id = home_feature.home_id"
                    + "INNER JOIN home_type ON home_type.type_code = homes.type_code"
                    + "INNER JOIN features ON home_feature.feature_id = features.feature_id"
                    + "WHERE bookings.booking_end < date '?'"
                    + "OR bookings.booking_start > date '?'"
                    + "GROUP BY homes.home_id, homes.title, homes.description, homes.living_room_count, homes.bedroom_count, homes.bathroom_count, homes.price, homes.sqft, home_type.type_name";

            preparedStatement = conn.prepareStatement(strQuery);//prepare the statement
            preparedStatement.setString(1, to);//insert password into query
            preparedStatement.setString(2, from);//insert password into query
            rs = preparedStatement.executeQuery();//execute the query and store this into a ResultSet

            homes = new HomeList(rs);
        }//end try
        catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            closeConnection(conn);//call close connection the close the database connection
        }//end finally
    }//end if

    conn = closeConnection(conn);

    return homes;
}
WARNING: StandardWrapperValve[jsp]: PWC1406: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
at org.apache.jsp.bookings_jsp._jspService(bookings_jsp.java:191)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:722)
 homes = dataManager.getPropertiesSearch(dateFrom, dateTo);