2012-04-10 9 views
1

Ich versuche, die Daten von Jena Query über Servlet und Beans nach Jsp weiterzuleiten. Wenn ich versuche, durch die Bean in der JSP-Datei zu iterieren, tritt ein NPE auf. Wenn ich vor der Iteration auf nicht null überprüfe, wird jsp.file ohne Inhalt angezeigt.Java Servlet 3.0 Nullzeiger Weiterleitung Jena Query

Servlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    Query query = QueryFactory.read(querySPARQL); 
    // String co = request.getParameter("country"); 
    query = QueryFactory.create(query.toString().replaceAll("\\?country", "a:Netherlands")); 

    QueryExecution qexec = QueryExecutionFactory.sparqlService(endpoint, 
      query); 

    try { 
     ResultSet results = qexec.execSelect(); 
     PlantsBean bean = new PlantsBean(results); 
     HttpSession session = request.getSession(); 
     session.setAttribute("PlantsBean", bean); 


    } finally { 
     qexec.close(); 
    } 
} 

/** 
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
*/ 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    doGet(request, response); 
} 

jsp.file

<% 

     PlantsBean pb = (PlantsBean)session.getAttribute("PlantsBean"); 

     for(PowerPlantInfo ppi : pb) { 
    %> 
    <tr> 


    <td><%=ppi.getFuel() %></td> 


    </tr> 
    <% 
     } 
    %> 
</table> 

Fehlermeldung

Servlet.service() for servlet [jsp] in context with path [/SemTec1] threw exception 
[java.lang.NullPointerException] with root cause 
java.lang.NullPointerException 
at org.apache.jsp.te_jsp._jspService(te_jsp.java:107) 
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
at java.lang.Thread.run(Thread.java:722) 

NPE in Zeile auftritt: for (PowerPlantInfo: ...). Die NPE sagt also, dass die Bean null ist. aber das kann nicht möglich sein. Die Jena-Abfrage funktioniert gut. als ich versuchte Servlet in Web-inf/Klassen, nicht funktionierend. gestern, als ich diese ganze Sache noch einmal aufgesetzt habe und das erste Mal, dass ich es auf dem Server laufen ließ, funktionierte es. 2. Mal, funktioniert nicht mehr.

Ich benutze Tomcat 7, JDK 7 und Servlets 3.0.

danke im voraus.

Antwort

0

Ihr Servlet leitet die Anfrage nicht an die JSP weiter. Ich nehme an, Sie greifen direkt auf die JSP zu (d. H. http://yourhost/path/yourfile.jsp).

Stattdessen würde ich erwarten, dass Ihr Servlet zur JSP umleitet (mit request.getRequestDispatcher("yourfile.jsp")). Wenn Sie Ihr Servlet mit Ihrem Browser aufrufen (z. B. http://yourhost/path/YourServlet), wird Ihr Servlet ausgeführt und schließlich zur JSP umgeleitet.