2013-01-22 35 views
0

我的servlet在下面引發空指針異常,但服務器控制檯沒有詳​​細說明異常從何處被觸發。此外,鏈接到servlet的表單所在的頁面不會加載,只會顯示關於空指針異常的HTTP狀態500錯誤。下面我已經複製了我的servlet和數據庫連接代碼,但是真的可以看到錯誤來自哪裏?提交之前頁面加載的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"); 
%> 

XML文件:

​​

數據庫搜索方法:

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) 
+1

你怎麼知道有一個NPE?它是否說錯誤信息中的位置? –

+0

請提供堆棧跟蹤。 – Swapnil

+0

'closeConnection()'測試傳遞的'conn'是否爲null,或者介意它是否已經關閉? 'bookings.jsp'是一個有效的* relative *路徑 - 如果不是'getRequestDispatcher'可能返回null,'.forward'會得到NPE,但我不認爲就是這樣。 'bookings_jsp.java'是否與servlet或DB代碼有關 - 我假設後者 - 如果是,哪一行是191行? –

回答

0
當你調用init()方法

?最有可能它永遠不會被叫,你有一個NPE,因爲dataManager在這一行爲空:

homes = dataManager.getPropertiesSearch(dateFrom, dateTo); 
+0

這是一個servlet,所以'init()'在實例加載時自動調用 - 你不會明確地調用它。 –