springmvc中pom依赖:
<!-- https://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports -->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.8.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-pdfa</artifactId>
<version>5.5.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.lowagie/itext -->
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.codehaus.groovy/groovy-all -->
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.5.6</version>
<type>pom</type>
</dependency>
数据源的配置类
package top.mau5.configuration;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import java.util.HashMap;
import java.util.Map;
@Configuration
@EnableAutoConfiguration
public class DruidDBConfig {
private Logger logger = LoggerFactory.getLogger(DruidDBConfig.class);
@Value("${spring.datasource.url}")
private String dbUrl;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.driverClassName}")
private String driverClassName;
// @Value("${spring.datasource.initialSize}")
// private int initialSize;
//
// @Value("${spring.datasource.minIdle}")
// private int minIdle;
//
// @Value("${spring.datasource.maxActive}")
// private int maxActive;
//
// @Value("${spring.datasource.maxWait}")
// private int maxWait;
//
// @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
// private int timeBetweenEvictionRunsMillis;
//
// @Value("${spring.datasource.minEvictableIdleTimeMillis}")
// private int minEvictableIdleTimeMillis;
//
// @Value("${spring.datasource.validationQuery}")
// private String validationQuery;
//
// @Value("${spring.datasource.testWhileIdle}")
// private boolean testWhileIdle;
//
// @Value("${spring.datasource.testOnBorrow}")
// private boolean testOnBorrow;
//
// @Value("${spring.datasource.testOnReturn}")
// private boolean testOnReturn;
//
// @Value("${spring.datasource.poolPreparedStatements}")
// private boolean poolPreparedStatements;
//
// @Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")
// private int maxPoolPreparedStatementPerConnectionSize;
//
// @Value("${spring.datasource.filters}")
// private String filters;
//
// @Value("{spring.datasource.connectionProperties}")
// private String connectionProperties;
@Bean //声明其为Bean实例
@Primary //在同样的DataSource中,首先使用被标注的DataSource
public DruidDataSource dataSource(){
DruidDataSource datasource = new DruidDataSource();
datasource.setUrl(this.dbUrl);
datasource.setUsername(username);
datasource.setPassword(password);
datasource.setDriverClassName(driverClassName);
// //configuration
// datasource.setInitialSize(initialSize);
// datasource.setMinIdle(minIdle);
// datasource.setMaxActive(maxActive);
// datasource.setMaxWait(maxWait);
// datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
// datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
// datasource.setValidationQuery(validationQuery);
// datasource.setTestWhileIdle(testWhileIdle);
// datasource.setTestOnBorrow(testOnBorrow);
// datasource.setTestOnReturn(testOnReturn);
// datasource.setPoolPreparedStatements(poolPreparedStatements);
// datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
// try {
// datasource.setFilters(filters);
// } catch (SQLException e) {
// logger.error("druid configuration initialization filter", e);
// }
// datasource.setConnectionProperties(connectionProperties);
return datasource;
}
@Bean
public ServletRegistrationBean druidServletRegistrationBean() {
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
servletRegistrationBean.setServlet(new StatViewServlet());
servletRegistrationBean.addUrlMappings("/druid/*");
return servletRegistrationBean;
}
/**
* 注册DruidFilter拦截
*
* @return
*/
@Bean
public FilterRegistrationBean duridFilterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new WebStatFilter());
Map<String, String> initParams = new HashMap<String, String>();
//设置忽略请求
initParams.put("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*");
filterRegistrationBean.setInitParameters(initParams);
filterRegistrationBean.addUrlPatterns("/*");
return filterRegistrationBean;
}
}
controller:
@RequestMapping(value = "report")
@RestController
public class ReportController {
@Autowired
DruidDataSource druidDataSource;
@Autowired
ReportService reportService;
public static final String ROOT_PATH = "C:\\Users\\korin\\Desktop\\jaspertest\\";//本机文件保存地址
// public static final String ROOT_PATH = "C:\\jaspertest\\";//云服务器文件保存地址
@RequestMapping("uploadJrxml")
public Map<String,Object> fileUpload(MultipartFile file) throws IllegalStateException, IOException{
System.out.println(file.getOriginalFilename());
Filepath filepath = new Filepath();
filepath.setName(file.getOriginalFilename());
filepath.setPath(ROOT_PATH+filepath.getName());
file.transferTo(new File(filepath.getPath()));
reportService.insesrt(filepath);
Map<String,Object> map = new HashMap<>();
map.put("msg", "ok");
map.put("uuid", filepath.getRid());
return map;
}
@RequestMapping("showfilelist")
public List<Filepath> showfilelist() throws IllegalStateException, IOException{
return reportService.select(new Filepath());
}
/**
* 通过jrxml文件生成html,参数固定测试版
*
* 在这之前应该有个上传jrxml文件功能,上传到指定文件夹,存数据库(uuid,存储路径等)后返回uuid
*
* @param jrxml_path jrxml存放路径
* @param id 主键id
* @return
* @throws JRException
* @throws IOException
* @throws UnsupportedEncodingException
*/
@RequestMapping(value = "jrxml2html",produces = "text/html;charset=UTF-8")/* 返回格式为text/html */
public String jrxml2html(HttpServletRequest request,String jrxmlName,String id) throws JRException, UnsupportedEncodingException, IOException {
JasperReport jasper = JasperCompileManager.compileReport(new FileInputStream(new File("C:\\Users\\korin\\Desktop\\jaspertest\\"+jrxmlName+".jrxml")));
Map<String,Object> map = new HashMap<>();
map.put("P_YHTZID", id);
Connection conn = null;
String str = "";
try {
/* 生成html文件 */
conn = druidDataSource.getConnection();
JasperPrint jasperPrint = JasperFillManager.fillReport(jasper,map,conn);
JasperExportManager.exportReportToHtmlFile(jasperPrint,"C:\\Users\\korin\\Desktop\\jaspertest\\"+jrxmlName+".html");
/* 读取html文件 */
URL url = new URL("file:\\C:\\Users\\korin\\Desktop\\jaspertest\\"+jrxmlName+".html");
BufferedReader br = null;
br = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
String res;
StringBuilder sb = new StringBuilder("");
while ((res = br.readLine()) != null) {
sb.append(res.trim());
}
str = sb.toString();
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return str;
}
//参数可变
@RequestMapping(value = "jrxml2html_",produces = "text/html;charset=UTF-8")/* 返回格式为text/html */
public String jrxml2html_(HttpServletRequest request) throws JRException, UnsupportedEncodingException, IOException {
Map<String,Object> map = getParameterMap(request);
String jrxmlName = map.get("jrxmlName").toString();
//,String jrxmlName,String paramId
JasperReport jasper = JasperCompileManager.compileReport(new FileInputStream(new File("C:\\Users\\korin\\Desktop\\jaspertest\\"+jrxmlName+".jrxml")));
// map.put("P_YHTZID", id);
Connection conn = null;
String str = "";
try {
/* 生成html文件 */
conn = druidDataSource.getConnection();
JasperPrint jasperPrint = JasperFillManager.fillReport(jasper,map,conn);
JasperExportManager.exportReportToHtmlFile(jasperPrint,"C:\\Users\\korin\\Desktop\\jaspertest\\"+jrxmlName+".html");
/* 读取html文件 */
URL url = new URL("file:\\C:\\Users\\korin\\Desktop\\jaspertest\\"+jrxmlName+".html");
BufferedReader br = null;
br = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
String res;
StringBuilder sb = new StringBuilder("");
while ((res = br.readLine()) != null) {
sb.append(res.trim());
}
str = sb.toString();
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return str;
}
//优化后
/**
* @param request 参数中要带rid(在数据库filepath表中的rid)和相应的报表中所需的参数名和值(如P_YHTZID=...)
* @return
* @throws JRException
* @throws UnsupportedEncodingException
* @throws IOException
*/
@RequestMapping(value = "jrxml2html__",produces = "text/html;charset=UTF-8")/* 返回格式为text/html */
public String jrxml2html__(HttpServletRequest request) throws JRException, UnsupportedEncodingException, IOException {
Filepath filepath = new Filepath();
Map<String,Object> map = getParameterMap(request);
filepath.setRid(map.get("rid").toString());
String filePath = reportService.select(filepath).get(0).getPath();
InputStream is = new FileInputStream(new File(filePath));
JasperReport jasper = JasperCompileManager.compileReport(is);
Connection conn = null;
String str = "";
filePath = filePath.replaceAll(".jrxml", ".html");//html文件路径
try {
/* 生成html文件 */
File file = new File(filePath);
if(file.exists()) {
file.delete();//删除以前的html文件
}
conn = druidDataSource.getConnection();
JasperPrint jasperPrint = JasperFillManager.fillReport(jasper,map,conn);
JasperExportManager.exportReportToHtmlFile(jasperPrint,filePath);
/* 读取html文件 */
URL url = new URL("file:\\"+filePath);
BufferedReader br = null;
br = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
String res;
StringBuilder sb = new StringBuilder("");
while ((res = br.readLine()) != null) {
sb.append(res.trim());
}
str = sb.toString();
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
is.close();//关流
conn.close();//关闭数据库连接
} catch (SQLException e) {
e.printStackTrace();
}
}
return str;
}
protected Map<String, Object> getParameterMap(HttpServletRequest request) {
return getParameterMap(request, false);
}
protected Map<String, Object> getParameterMap(HttpServletRequest request, boolean needNull) {
Map<String, Object> map = new HashMap<String, Object>();
Map<String, String[]> parameterMap = request.getParameterMap();
for (String paramName : parameterMap.keySet()) {
String[] paramValues = parameterMap.get(paramName);
if (null != paramValues && paramValues.length > 1) {
map.put(paramName, paramValues);
} else if (null != paramValues) {
String paramValue = parameterMap.get(paramName)[0];
if (StringUtils.isNotEmpty(paramValue) || needNull) {
map.put(paramName, paramValue);
}
}
}
return map;
}
}
网友评论