2011-01-30 19 views
8

Sto cercando di utilizzare getServletContext() getRealPath ("/"), ma continuo a ricevere questo errore:.Perché getservletcontext non è stato trovato?

non riesce a trovare il simbolo simbolo: il metodo getServletContext() posizione: Interfaccia javax. servlet.http.HttpSession String path = session.getServletContext(). getRealPath ("/") + "layout/tiles /" + reportPath; enter image description here

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { 

     session = request.getSession(); 
     Map params = new HashMap(); 
     String reportPath = "maintenance/jasper/report01.jasper"; 
     exportToPDF(reportPath , response, params); 

     return null; 
    } 

    protected void exportToPDF(String reportPath , HttpServletResponse response, Map jasperParams) throws Exception { 

      String path = session.getServletContext().getRealPath("/") + "layout/tiles/" + reportPath ; 

      if (!new File(path).exists()) { 
       throw new Exception("The path doesn''t exist. </br>" + path); 
      } 
      InputStream input = new FileInputStream(path); 

      jasperParams.put("REPORT_LOCALE", Locale.US); 

      JasperPrint jasper = JasperFillManager.fillReport(input , jasperParams, new JRBeanCollectionDataSource(Vehicles)); 

      response.setContentType("application/pdf"); 
      ServletOutputStream output = response.getOutputStream(); 

      JRExporter exporter = new JRPdfExporter(); 

      exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasper); 
      exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, output); 

      exporter.exportReport(); 
      output.close(); 


    } 

Avete idea perché questo sta accadendo?

Grazie Ritesh, ho fatto quello che mi hai detto, ma ora ho un nuovo messaggio

enter image description here

------ EDIT --------

controllo my dispatcher-servlet.xml Ho scoperto che è un po 'diverso dal codice mostrato su questo web. Non so come potrebbe influenzare il mio progetto, ma quello che mi piace sapere se c'è un approccio diverso per ottenere lo stesso risultato di usare la sessione. getServletContext() .getRealPath ("/")

<bean id="viewResolver" 
     class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
    <property name="viewClass" 
       value="org.springframework.web.servlet.view.tiles2.TilesView" /> 
</bean> 
<bean id="tilesConfigurer" 
     class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
    <property name="definitions"> 
     <list> 
      <value>/WEB-INF/tiles.xml</value> 
     </list> 
    </property> 
</bean> 
+0

È possibile controllare questo documento http: // netbeans.org/kb/68/web/quickstart-webapps-spring.html e vedi se qualcosa è diverso nella configurazione del tuo progetto? – Ritesh

+0

Quale versione dei report Jasper stai utilizzando e quali jar dei report Jasper hai aggiunto nel tuo progetto? – Ritesh

+0

@ Ritesh-JasperReports 3.7.1 e ... questo è piuttosto imbarazzante, dal momento che non sapevo quali vasi aggiungere, ho aggiunto tutti i vasi inclusi nelle cartelle "lib" e "dist" che vengono con i jasperreports- 3.7.1-project.zip. – eddy

risposta

4

getServletContext() è stato aggiunto nel Servlet 2.3. Non era lì in 2.2, vedi Servlet 2.2 javadoc

Quindi la sola spiegazione è che il tuo progetto sta convalidando il codice rispetto alla vecchia versione.

getServletContext() è anche presente nella classe Controller di Spring che sembra utilizzare. Così, invece di session.getServletContext().getRealPath("/"), vi troverete bene con appena getServletContext().getRealPath("/")

Edited 30 gennaio: Jasper Reports file jar pulizia

Ho verificato che jasperreports-3.7.1-project.zip ha vecchia versione di servlet. vaso. Mi consiglia di seguito:

  1. Rimuovere tutti i file jar che sono stati aggiunti dalla cartella lib di jasperreports-3.7.1-project.zip ma mantenere i file jar dalla cartella "dist".

  2. Aggiungere il file jar uno alla volta sulla base dei messaggi di errore di compilazione. Si prega di non aggiungere alcun file jar che sia disponibile anche nella cartella TOMCAT-HOME/lib e non aggiungere alcun file jar Spring. Dato che sai che il progetto di report jasper ha vecchi file jar, vedi prima se netbeans fornisce quei jar, altrimenti prova con le ultime versioni da altri repository come http://repo1.maven.org/maven2/. Il download del framework Spring con dipendenze ha anche diversi file comuni che è possibile utilizzare.

  3. Controllare qualsiasi risorsa online per ottenere ulteriori informazioni sui file jar richiesti. Il seguente link descrive l'integrazione con i report jasper versione 1.2.5 in netbeans: http://developers.sun.com/jsenterprise/archive/reference/techart/jse8/jasper_reports.html Ma è necessario qualcosa di simile alla versione 3.7.1.

+0

* "codice di convalida contro ..." * - più probabilmente, * si sta compilando * contro una vecchia versione delle API. –

+0

Siamo spiacenti, sono nuovo di java. Potresti dirmi come posso cambiare la versione? dove posso trovare questo barattolo? – eddy

+0

Dalla domanda (e dallo screenshot), non è chiaro se si tratta di un errore di compilazione. Non ci sono informazioni su come si sta costruendo il progetto. Se si utilizza l'IDE Eclipse, fare clic con il tasto destro del mouse sul nome del progetto, fare clic sulle proprietà, selezionare "Sfaccettatura progetto" e modificare la versione di "Modulo Web dinamico". Ciò risolverà l'errore di convalida in IDE. – Ritesh

Problemi correlati