簡體   English   中英

如何捕獲從Jasper報告圖像Servlet引發的異常

[英]How to catch exception raised from the Jasper report image servlet

我的Web應用程序使用JASPERREPORTS來編譯和提供各種報告。 報告中顯示的所有圖像均來自ImageServlet net.sf.jasperreports.j2ee.servlets.ImageServlet

<servlet>
    <servlet-name>ImageServlet</servlet-name>
    <servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ImageServlet</servlet-name>
    <url-pattern>/image</url-pattern>
</servlet-mapping>

圖像請求如下所示:

GET /watapp/image?rand=0.5039537955900038&image=px

在我的應用程序的安全審核中,有人提出,如果更改查詢參數(如設置image=pxxx會導致500個內部服務器錯誤。 所以我需要處理這個異常。

net.sf.jasperreports.engine.JRRuntimeException: Invalid image name: pxxx
        at net.sf.jasperreports.engine.export.JRHtmlExporter.getPrintElementIndex(JRHtmlExporter.java:2408)
        at net.sf.jasperreports.engine.export.JRHtmlExporter.getImage(JRHtmlExporter.java:695)
        at net.sf.jasperreports.j2ee.servlets.ImageServlet.service(ImageServlet.java:98)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at com.watapp.filters.login.ApplicationFilter.doFilter(ApplicationFilter.java:41)
        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:127)
        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:298)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:662)

我的問題是,如何處理此異常? servlet隨JASPER jar一起提供,我無法控制servlet的代碼。 請指教。

創建您自己的servlet並修改/image的servlet映射以指向該/image ,而不是碧玉servlet。

您的新servlet不必執行任何工作,它可以簡單地將請求傳遞給jasper servlet,但是它使您能夠插入異常處理程序以捕獲JRRuntimeException

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM