`
unika_ly12
  • 浏览: 10608 次
  • 性别: Icon_minigender_1
  • 来自: 匕首岛
社区版块
存档分类
最新评论

JFreeChart Struts2组件报IllegalStateException解决方案

阅读更多
    在s2sh框架中应用了JFreeChart组件,使用了struts2-jfreechart-plugin,jfreechart生成图片的时候在服务器后台会产生如下的错误,但是图片却能够正常的显示出来。
严重: Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
	at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
	at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:770)
	at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:505)
	at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
	at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:574)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2018)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:651)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:676)
	at java.lang.Thread.run(Thread.java:595)

    这个问题困扰了我很久,当请求JFreeChart图片时突然中断或者第一次请求图片还没完成就发生第二次请求时就会抛出这个异常。
网上解释说是产生图片过程中发生了io异常,修改struts plugins包里ChartResult.java源文件。
...
HttpServletResponse response = ServletActionContext.getResponse();
        //OutputStream os = response.getOutputStream();//原来是这么写的
         OutputStream os = null;
        try {
            os = response.getOutputStream();//挪到try里面
            // check the type to see what kind of output we have to produce
            if ("png".equalsIgnoreCase(type)) {
                response.setContentType("image/png");
                ChartUtilities.writeChartAsPNG(os, chart, getIntValueFromString(width), getIntValueFromString(height));
            }
            else if ("jpg".equalsIgnoreCase(type) || "jpeg".equalsIgnoreCase(type)) {
                response.setContentType("image/jpg");
                
            }
            else
                throw new IllegalArgumentException(type + " is not a supported render type (only JPG and PNG are).");
        } catch (IOException e) {//加上异常捕获
        	
        } finally {
            if (os != null) os.flush();
        }
...


经测试问题依旧存在,查看struts2源码采用如下办法解决,在org.apache.struts2.dispatcher.Dispatcher 770行左右:
try {
                // WW-1977: Only put errors in the request when code is a 500 error
                if (code == HttpServletResponse.SC_INTERNAL_SERVER_ERROR) {
                    // send a http error response to use the servlet defined error handler
                    // make the exception availible to the web.xml defined error page
                    request.setAttribute("javax.servlet.error.exception", e);

                    // for compatibility
                    request.setAttribute("javax.servlet.jsp.jspException", e);
                }

                // send the error response
                response.sendError(code, e.getMessage());
            } catch (IOException e1) {
                // we're already sending an error, not much else we can do if more stuff breaks
            } catch (IllegalStateException e2) {
            	//添加IllegalStateException 异常捕捉             
            }

问题解决。
2
0
分享到:
评论

相关推荐

    struts2 + jfreechart demo

    Struts2和JFreeChart是两个在Java Web开发中广泛使用的框架和技术。Struts2是一个强大的MVC(Model-View-Controller)框架,用于构建结构化的Web应用程序,而JFreeChart是一个开源图表库,能够生成各种高质量的图表...

    struts2-jfreechart-plugin-2.1.6.jar.zip_jfreechart struts2_jfree

    "struts2-jfreechart-plugin-2.1.6.jar.zip_jfreechart struts2_jfree" 这个标题表明这是一个关于Struts2与JFreeChart结合使用的插件,版本为2.1.6。这个插件简化了在Struts2应用中使用JFreeChart的过程,使得开发者...

    JFreeChart+Struts2实践例子

    在Java Web开发中,JFreeChart和Struts2是两个非常重要的工具库。JFreeChart是一个用于创建高质量图表的开源库,而Struts2则是一个流行的MVC框架,用于构建可维护性和可扩展性强的Web应用程序。这篇内容将深入探讨...

    jfreechart与struts2的整合

    将JFreeChart与Struts2整合,可以将动态生成的图表展示在Web页面上,为用户提供直观的数据展示。 首先,我们需要理解JFreeChart的基本用法。JFreeChart提供了丰富的API来创建和定制图表。例如,要创建一个简单的...

    struts2+jfreechart

    Struts2和JFreeChart是两个在Java Web开发中广泛使用的开源库。Struts2是一个强大的MVC(Model-View-Controller)框架,用于构建可维护性和可扩展性极高的Web应用程序,而JFreeChart则是一个用于生成高质量图表的...

    JFreeChart(Struts1+jFreeChart)

    标题 "JFreeChart(Struts1+jFreeChart)" 提到的是在Struts1框架中集成JFreeChart库进行图表展示的技术。JFreeChart是一个强大的Java库,它提供了多种图表类型,如柱状图、饼图、线图、散点图等,用于数据可视化。而...

    jfreechart整合struts2的压缩包

    在Java Web开发中,JFreeChart和Struts2是两个非常重要的库。JFreeChart是一个用于创建各种图表的开源库,而Struts2则是一个基于MVC(Model-View-Controller)模式的Web应用程序框架。将这两者整合,可以使得在...

    struts2整合JFreechart的几个组件

    Struts2是一个强大的MVC...2. **配置Struts2**:在struts.xml配置文件中,声明使用struts2-jfreechart-plugin,并配置Action和Result。例如,创建一个Action类,生成JFreeChart对象,并设置到ValueStack。 ```xml ...

    struts2与jfreechart整合

    Struts2和JFreeChart是两个在Java开发中常用的库。Struts2是一个基于MVC设计模式的Web应用框架,用于构建动态、数据驱动的Java Web应用,而JFreeChart则是一个强大的图表生成库,可以生成各种类型的图表,如柱状图、...

    jfreechart 与struts2的柱状图以及折线图例子

    JFreeChart和Struts2都是Java开发中常用的工具,它们可以协同工作,为Web应用提供动态的数据图表展示。本篇文章将深入探讨如何在Struts2框架下利用JFreeChart创建柱状图和折线图。 **JFreeChart简介** JFreeChart...

    struts2整合 jfreechart 实现报表

    首先,整合Struts2和JFreeChart的首要步骤是确保在项目中引入JFreeChart和相关依赖。你需要在你的Maven或Gradle配置文件中添加JFreeChart的依赖,通常为以下形式: ```xml <groupId>org.jfree <artifactId>...

    jfreechart和struts2的例子

    **JFreeChart与Struts2整合应用详解** 在Java Web开发中,JFreeChart和Struts2是两个非常重要的库。JFreeChart是一个强大的图表生成库,能够创建各种类型的图表,如柱状图、饼图、线图等,用于数据可视化。而Struts...

    jfreechart struts2.0

    标题"jfreechart struts2.0"表明了这个压缩包包含的是与JFreeChart库和Struts2框架相关的资源。JFreeChart是一个强大的Java图表库,能够生成各种复杂的二维图表,如饼图、柱状图、线图等,常用于数据可视化。Struts2...

    JfreeChart与Struts2结合使用例子

    【JfreeChart与Struts2结合使用】 JFreeChart是一个强大的Java图表库,它提供了丰富的图表类型,如柱状图、饼图、折线图、散点图等,用于数据可视化。Struts2是一个流行的MVC框架,常用于构建企业级Web应用。将...

    struts2结合jfreechart框架出现图形所需的包

    Struts2和JFreeChart是两个在Java Web开发中广泛使用的框架。Struts2作为MVC(模型-视图-控制器)架构的一部分,主要用于处理HTTP请求和管理业务逻辑,而JFreeChart则是一个强大的库,用于创建各种图表,如线图、...

    struts2整合JFreechart

    struts2整合JFreechart: jcommon-1.0.16.jar jfreechart-1.0.13.jar struts2-jfreechart-plugin-2.0.11.jar 导成图片操作说明

    struts2+JFreeChart

    Struts2和JFreeChart是Java开发中两个重要的技术组件,它们在企业级应用开发中发挥着关键作用。Struts2是一个成熟的MVC(模型-视图-控制器)框架,用于构建可维护、可扩展的Web应用程序。而JFreeChart则是一个强大的...

    jfreechart+struts2 图形报表

    **JFreeChart与Struts2整合实现图形报表详解** 在Java Web开发中,为了更好地展示数据,我们常常需要使用图表来直观地呈现信息。JFreeChart是一个强大的Java库,能够生成各种类型的图表,如柱状图、饼图、折线图等...

    struts2-jfreechart-plugin-2.1.8.1.jar

    struts2-jfreechart-plugin-2.1.8.1.jar

    struts2-jfreechart-plugin-2.0.11.jar

    struts2-jfreechart-plugin-2.0.11.jarstruts2-jfreechart-plugin-2.0.11.jarstruts2-jfreechart-plugin-2.0.11.jar

Global site tag (gtag.js) - Google Analytics