jasperreports 보고서 플래시 디 스 플레이

8356 단어 flashjasperReportweb
더 읽 기
    jasperreports 의 웹 보고서 표현 방식 은 두 가지 가 있 습 니 다.하 나 는 applt viewer 이 고 다른 하 나 는 플래시 viewer 입 니 다.전자의 실현 은 브 라 우 저 에 자바 가 설치 되 어 실행 되 어야 할 때 다음 방식 만 고려 합 니 다.
 
앞에서 언급 한 demo 의 jasper-webapp 에서 플래시 폴 더 의 플래시 보고서 뷰 어 jasperreports-flash-4.0.0.swf 를 로 컬 프로젝트 의 한 폴 더 에 복사 합 니 다.
저 희 는 demo 의 swf.html 내용 을 참고 합 니 다.












  
  
  





 
 
코드 의 굵 은 부분 에 주 의 했 습 니까?프로젝트 배치 파일 웹 xml 에 servlet 극 을 추가 해 야 한 다 는 것 은 분명 합 니 다.


	JasperReports Flash Viewer - Web Application Sample
	
		Xml4SwfServlet
		net.sf.jasperreports.j2ee.servlets.Xml4SwfServlet
	
	
		Xml4SwfServlet
		/servlets/xml4swf
	


	
		SwfServlet
		com.easyway.jaserreport.flash.JasperReportFlashServlet
	
	
		SwfServlet
		/servlets/swf.html
	
	
		index.html
	
	
		BASIC
	

 
 
demo 의 단일 사용자 와 달리 사용자 가 보고 서 를 조회 한 후에 생 성 된 JasperPrint 대상 을 구분 해 야 하기 때문에 사용자 의 현재 session 에 set 를 넣 어야 합 니 다.그런데 이 걸 어떻게 꺼 내 서 Xml4Swf Servlet 으로 보 여 드릴 까요?이 servlet 는 fetch Size 인 자 를 제외 하고 어떤 인 자 를 받 을 수 있 습 니까?
 
다행히 jasperreports 는 소스 코드 를 직접 보고 수정 할 수 있 습 니 다.이 Xml4SwfServlet 의 실현 류 net.sf.jsperreports.j2ee.servlets.Xml4SwfServlet.java 의 조부 류 net.sf.jsperreports.j2ee.servlets.BaseHttpServlet.java 를 연구 해 봅 시다.
 
BaseHttpServlet 에서 session 의 모든 JasperPrint 대상 을 List 형식 으로 되 돌려 주 는 방법 을 정의 한 것 을 알 수 있 습 니 다.
 
public static List getJasperPrintList(HttpServletRequest request){
.......
}
 
이것 은 두 개 와 request 대상 이 받 아들 일 수 있 는 매개 변수 이름 을 정의 합 니 다.
public static final String JASPER_PRINT_LIST_REQUEST_PARAMETER = "jrprintlist";
public static final String JASPER_PRINT_REQUEST_PARAMETER = "jrprint";
그리고 getJasperPrintList 방법 에서 그들 을 받 아들 입 니 다.매개 변수 값 이 비어 있 지 않 으 면 이 두 매개 변수 값 으로 session 에서 해당 하 는 JasperPrint 대상 이나 JasperPrint 대상 이 있 는 List 를 꺼 냅 니 다.보고 서 를 채 워 서 하나의 JasperPrint 대상 set 를 session 에 만 들 때 다음 이 필요 합 니 다.
request.getSession().setAttribute(request.getSession().getId() + "_jrprint",jasperPrint);
 
이 때 인자"jrprint"의 값 은 request.getSession().getId()+"입 니 다.jrprint 의 값 입 니 다.
 
보고 서 를 수정 하여 페이지 ViewReport.jsp(demo 에 대응 하 는 swf.html)에서 Xml4SwfServlet 에 보 낸 매개 변 수 는 다음 과 같 습 니 다.
 
  
  

 
 
이렇게 하면 세 션 을 구분 하여 JasperPrint 대상 을 읽 고 플래시 보고 서 를 보 여 줍 니 다.
 
그러나 우 리 는 또 새로운 문제 에 부 딪 힐 것 이다.첫 번 째 로 보고 서 를 조회 하여 보 여 준 후에 조회 조건 을 재 설정 하여 다시 조회 할 때 플래시 의 보고서 내용 은 처음 과 마찬가지 로 업데이트 되 지 않 았 다 는 것 을 알 게 될 것 이다.
 
조사 결과 ViewReport.jsp 가 다시 불 러 올 때 서버 측 에 보 내 는 Http 요청 url 이 매번 같 기 때문에 브 라 우 저 는 서버 측 이 업데이트 되 지 않 았 다 고 생각 하고 캐 시 내용 을 페이지 로 되 돌려 줍 니 다.
 
그러면 우 리 는 방법 을 생각해 보 겠 습 니 다.매번 요청 한 url 이 다 릅 니 다.요청 한 후에 시간 을 추가 합 니 다.
 
네,저 는 인자 jrprint 의 값 을 추가 한 후에 현재 시간 을 추 가 했 습 니 다.분점 과 원래 의 값 으로 분리 되 었 습 니 다.그러면 사용자 가 보고서 조 회 를 한 후에 View Report.jsp 가 새로 고침 할 때 브 라 우 저가 서버 에 보 내 는 요청 은 매번 다 릅 니 다.큰 성 과 를 거 두 었 습 니 다.그러면 우 리 는 다 중 사용자 상황 에서 플래시 플레이어 로 완벽 하 게 보고 서 를 보 여줄 수 있 습 니 다.
 
 
JasperReportFlashServlet
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRRuntimeException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.j2ee.servlets.BaseHttpServlet;
import net.sf.jasperreports.j2ee.servlets.Xml4SwfServlet;

/**
 * 
 * 

,JasperReportFlashServlet Flash SWF

* * 2013-4-28
* @author longgangbai
* @version $Revision$ 2013-4-28 * @since 3.0.0 */ public class JasperReportFlashServlet extends Xml4SwfServlet { // private static final long serialVersionUID = 1L; public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ServletContext context = this.getServletConfig().getServletContext(); response.setContentType("text/html"); PrintWriter out = response.getWriter(); try { String reportFileName = context.getRealPath("reports/WebappReport.jasper"); File reportFile = new File(reportFileName); if (!reportFile.exists()) { throw new JRRuntimeException( "File WebappReport.jasper not found. The report design must be compiled first."); } Map parameters = new HashMap(); parameters.put("ReportTitle", "Address Report"); parameters.put("BaseDir", reportFile.getParentFile()); JasperPrint jasperPrint = JasperFillManager.fillReport(reportFileName, parameters, new JasperReportDataSource()); request.getSession().setAttribute(request.getSession().getId()+"_"+BaseHttpServlet.JASPER_PRINT_REQUEST_PARAMETER, jasperPrint); request.getRequestDispatcher("/jasperReportSWF.jsp").forward(request, response); } catch (JRException e) { out.println(""); out.println(""); out.println("JasperReports - Web Application Sample"); out.println(""); out.println(""); out.println(""); out.println("JasperReports encountered this error :"); out.println("

");
            e.printStackTrace(out);
            out.println("
");
out.println("");
out.println("");
}
}
}
 

좋은 웹페이지 즐겨찾기