2011-01-30 152 views
8

我试图使用getServletContext()方法getRealPath( “/”),但我不断收到此错误:为什么找不到getservletcontext?

找不到符号 符号:方法getServletContext()方法 位置:接口的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(); 


    } 

有你为什么发生这种情况的任何想法?

感谢仅限Ritesh,我做了什么,你告诉我,但现在我得到一个新的消息

enter image description here

------编辑--------

检查我的dispatcher-servlet.xml我发现它与此web上显示的代码有所不同。我不知道它是如何影响我的项目的,但我喜欢知道是否有不同的方法来获得与使用会话相同的结果。 的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

您可以查看本文档http:// netbeans。org/kb/68/web/quickstart-webapps-spring.html并查看在项目设置中是否有任何不同之处? – Ritesh 2011-01-30 13:18:34

+0

您正在使用哪个版本的Jasper报告以及您在项目中添加了Jasper报告的哪些罐子? – Ritesh 2011-01-30 17:21:41

回答

4

getServletContext()在Servlet 2.3的溶液。它在2.2中没有,请参阅Servlet 2.2 javadoc

所以唯一的解释是您的项目正在验证代码与旧版本的对比。

getServletContext()也出现在Spring的Controller类中,您似乎正在使用它。因此,而不是session.getServletContext().getRealPath("/"),你将被罚款只有getServletContext().getRealPath("/")

编辑1月30日:Jasper报表的jar文件清理

我已验证jasperreports-3.7.1-project.zip有老版本的servlet。罐。我建议如下:

  1. 删除您从jasperreports-3.7.1-project.zip的lib文件夹中添加的所有jar文件,但是从“DIST”文件夹中保存jar文件。

  2. 根据编译错误消息逐个添加jar文件。请不要添加任何在TOMCAT-HOME/lib文件夹中可用的jar文件,也不要添加任何Spring jar文件。既然您知道jasper报告项目包含旧的jar文件,请首先查看netbeans是否提供了这些jar文件,如果不是的话,请尝试使用来自其他存储库的最新版本,如http://repo1.maven.org/maven2/。 Spring框架下载与依赖关系也有几个常用的文件,你可以使用。

  3. 检查任何在线资源以获取有关所需jar文件的更多信息。以下链接描述了在netbeans中与jasper报告版本1.2.5的集成:http://developers.sun.com/jsenterprise/archive/reference/techart/jse8/jasper_reports.html但是您需要类似与3.7.1版本相关的内容。