整合过程
1. 两种实现方式servlet 和整合实现
Servlet 需要在web.xml中增加
<servlet>
<servlet-name>JRPDFServlet</servlet-name>
<servlet-class>framework.servlet.JRPDFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JRPDFServlet</servlet-name>
<url-pattern>/a/servlet/JRPDFServlet</url-pattern>
</servlet-mapping>
编写JRPDFServlet实现类
packageframework.servlet;
importjava.io.File;
importjava.io.IOException;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.util.Enumeration;
importjava.util.HashMap;
importjavax.servlet.ServletContext;
importjavax.servlet.ServletException;
importjavax.servlet.ServletOutputStream;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importnet.sf.jasperreports.engine.JRException;
importnet.sf.jasperreports.engine.JasperRunManager;
importcom.thinkgem.jeesite.common.config.Global;
publicclass JRPDFServlet extends HttpServlet
{
private static final long serialVersionUID= 1L;
public void service(HttpServletRequestrequest, HttpServletResponse response)
throws ServletException,IOException
{
// Connection connection =getConnection(ConnectionList.mainConnection);
Stringurl= Global.getConfig("jdbc.url");
Stringusername= Global.getConfig("jdbc.username");
Stringpassword= Global.getConfig("jdbc.password");
Stringdriver =Global.getConfig("jdbc.driver");
Connection connection =getConnection(driver, url, username, password);
try
{
//据据jasper文件生成JasperPrint对象
ServletContext context =this.getServletConfig().getServletContext();
String fileName =request.getParameter("fileName");//ireport编译文件:*.jasper(由模板文件*.jrxml文件编译生成)
File reportFile = newFile(context.getRealPath("/WEB-INF/jaspers/"+fileName));
if (reportFile.exists()) {
HashMap<String, Object>parameters = new HashMap<String, Object>();//给报表模板文件传参
//得到枚举类型的参数名称,参数名称若有重复的只能得到第一个--获取页面传来的参数,和模板中文件的sql参数名称一一对应
Enumeration<?> temp =request.getParameterNames();
while (temp.hasMoreElements())
{
String paramName = (String)temp.nextElement();
String paramValue =request.getParameter(paramName);
if("begintime".equals(paramName)){
if("".equals(paramValue) || paramValue== null){
paramValue="2017-01-01";
}
}
if("endtime".equals(paramName)){
if("".equals(paramValue) || paramValue== null){
paramValue="2035-12-29";
}
}
parameters.put(paramName,paramValue);
}
byte[] buffer = new byte[1024];
buffer =JasperRunManager.runReportToPdf(reportFile.getPath(), parameters,connection);
response.setContentType("application/pdf");
response.setContentLength(buffer.length);
ServletOutputStream outStream =response.getOutputStream();
outStream.write(buffer,0,buffer.length);
outStream.flush();
outStream.close();
buffer =null;
}
} catch (JRException e)
{
e.printStackTrace();
}
}
public Connection getConnection(Stringdriver, String url, String user, String password){
Connection conn = null ;
try{
Class.forName(driver) ;
conn = DriverManager.getConnection(url,user, password) ;
return conn ;
}catch(Exception e){
e.printStackTrace();
}
return null ;
}
}
引入jar包 必不可少
SpringMvc JasperReport整合
1、 继承JasperReportsMultiFormatView类,并重写fillReport()方法,在该方法中增加setUrl()实现,这样就可以在controller中指定要使用的报表模板文件了。这样做的好处是,只需要一个jasperReport配置文件,可以在controller中动态的设定报表模板url。见
2、 在/WEB-INF/jasper/目录下创建报表视图配置文件jasper-defs.xml,并指定解析器类为自定义的视图解析器类,见
3、 Jasper报表的渲染需要用到XmlViewResolver视图解析器,这样你的项目中就会存在多个视图解析器。需要注意的是,项目中如果使用了多个视图解析器,则需要设置order的值来区分解析器的使用顺序,order值越小则越靠前。增加XmlViewResolver视图解析器的同时,并指定其要解析的配置文件路径。在springmvc 配置文件中添加
<bean id="jasperReportResolver" class="org.springframework.web.servlet.view.XmlViewResolver">
<property name="order" value="0"/>
<property name="location" value="WEB-INF/jaspers/jasper-defs.xml"/>
</bean>
4、 接下来进行controller的处理
/**
*
* @parammodel
*@return
*/
@RequiresPermissions("report:trend:view")
@RequestMapping(value = "/report",method = RequestMethod.GET)
public String report(Model model,SaferRecordQuerysaferRecordQuery,HttpServletRequest request, HttpServletResponse response) {
//通过连接数据库获取数据
List<SaferRecord> saferList =logglService.getSaferList(saferRecordQuery);
// 报表数据源
JRDataSource jrDataSource = new JRBeanCollectionDataSource(saferList);
// 动态指定报表模板url
model.addAttribute("url","/WEB-INF/jaspers/report2.jasper");
model.addAttribute("format", "pdf"); // 报表格式
model.addAttribute("jrMainDataSource", jrDataSource);
return "iReportView"; // 对应jasper-defs.xml中的bean id
}
页面
<script type="text/javascript">
function getSearch() {
debugger;
var begintime = $("#begintime").val();
var endtime = $("#endtime").val();
var path = "report/trend/report?fileName=report2.jasper&begintime="+begintime+"&endtime="+endtime;
}
</script>
<%@ page contentType="text/html;charset=UTF-8"%>
<%--<%@ includefile="/WEB-INF/views/include/taglib.jsp"%>--%>
<html>
<head>
<title>整改通知管理</title>
<script type="text/javascript">
function getSearch() {
var path = "a/servlet/JRPDFServlet?fileName=report2.jasper";
document.getElementById("reportFrame").setAttribute("src", path);
}
</script>
</head>
<body>
<%--ireport引入 --%>
<li class="btns"><inputid="btnSubmit" class="btn btn-primary"type="button" value="查询" οnclick="getSearch()"/></li>
<iframe id="reportFrame" width="800px" height="600px"frameborder="no" border="0"marginwidth="0" marginheight="0"scrolling="no" allowtransparency="yes"></iframe>
</body>
</html>
相关jar包的url http://download.csdn.net/download/zhanglixin_1984/10127296