为啥找不到 getservletcontext?

Posted

技术标签:

【中文标题】为啥找不到 getservletcontext?【英文标题】:Why getservletcontext isn't found?为什么找不到 getservletcontext? 【发布时间】:2011-06-17 22:55:10 【问题描述】:

我正在尝试使用 getServletContext().getRealPath( "/" ) ,但我不断收到此错误:

找不到符号 符号:方法 getServletContext() 位置:接口 javax.servlet.http.HttpSession 字符串路径 = session.getServletContext().getRealPath("/") + "layout/tiles/" + reportPath ;

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,我按照你说的做了,但现在我收到一条新消息

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

检查我的 dispatcher-servlet.xml 我发现它与 web 上显示的代码有点不同。我不知道它会如何影响我的项目,但我想知道是否有不同的方法可以获得与使用 session.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>

【问题讨论】:

你能看看这个文档netbeans.org/kb/68/web/quickstart-webapps-spring.html 看看你的项目设置有什么不同吗? 您使用的是哪个版本的 Jasper 报告,您在项目中添加了哪些 Jasper 报告 jar? @Ritesh-JasperReports 3.7.1 and ...这很尴尬,因为我不知道要添加哪些罐子,所以我添加了“lib”和“dist”中包含的所有罐子jasperreports-3.7.1-project.zip 附带的文件夹。 请在下面查看我编辑的答案。 【参考方案1】:

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.jar。我推荐以下:

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

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

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

【讨论】:

"validating code against ..." - 更有可能是针对旧版本的 API编译 对不起,我是 java 新手。你能告诉我如何更改版本吗?我在哪里可以找到这个罐子? 从问题(和截图)来看,不清楚是否是编译错误。没有关于该项目是如何建造的信息。如果您使用的是 Eclipse IDE,则右键单击项目名称,单击属性,选择“Project Facet”并更改“Dynamic Web Module”的版本。这将修复 IDE 中的验证错误。 @Ritesh- 我使用的是 netbeans 6.8 和 tomcat 6.0.29。当我尝试生成项目时,这是我现在得到的:“找不到符号符号:方法 getServletContext()” @Ritesh- 我不知道该怎么说谢谢你的帮助。我做了你告诉我的事情,结果我唯一需要的jar是“jasperreports-3.7.1.jar”。我什至不需要添加“iText-2.1.0.jar”,我认为是导出pdf时需要。

以上是关于为啥找不到 getservletcontext?的主要内容,如果未能解决你的问题,请参考以下文章

IDEA找不到程序包 和 request.getServletContext()报错Cannot resolve method 'getServletContext()的解决方法

J2EE:为啥getServletContext().getResourceAsStream("/WEB-INF/web.xml");读取不到呢?

未找到 request.getServletContext(),即使使用新 JAR

为啥jmeter4.0线程组右键添加,没有非测试元件选项?这样不是就找不到HTTP代理服务器了?

intellij idea新建时为啥找不到scala class

Servlet:为啥获取的是这个路径getServletContext().getResource("/")