📄 reportservlet.java
字号:
package com.csscis.common.report;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jbc.config.ApplicationConfig;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class ReportServlet extends HttpServlet {
private static Log LOG = LogFactory.getLog(ReportServlet.class);
private static String EXTORT_PDF = "pdf";
private static String EXTORT_XLS = "xls";
private RptMain rptMain;
public void doGet(HttpServletRequest request, HttpServletResponse response) {
response.setContentType("text/html; charset=GBK");
String exportType = (String) request.getParameter("exportType");
String reportId = request.getParameter("reportId");
if (reportId == null || reportId.equalsIgnoreCase("null")
|| reportId.equalsIgnoreCase("")) {
LOG.error("报表运行:参数不正确请配置模块列表!");
outErrHtml(response, "参数不正确请配置模块列表");
return;
}
// 第一次呈现
Connection conn = new ReportConnection().getConection();
String sql = "select * from RPT_MAIN where rpt_id = '" + reportId + "'";
boolean hasError = false;
String errMessage = new String();
StringBuffer tableHtml = new StringBuffer();
try {
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);
boolean hasData = rs.next();
if (!hasData) {
LOG.error("没有数给定rpt_id为:" + reportId + "的报表配置!");
hasError = true;
errMessage = "没有数给定rpt_id为:" + reportId + "的报表配置!";
this.outErrHtml(response, errMessage);
return;
} else {
rptMain = new RptMain();
rptMain.setRptId(reportId);
rptMain.setRptName((String) rs.getString("rpt_name"));
rptMain.setRptTitle((String) rs.getString("rpt_title"));
rptMain.setRptPage((String) rs.getString("rpt_page"));
rptMain.setRptDirection((String) rs.getString("rpt_direction"));
rptMain.setRptScript((String) rs.getString("rpt_script"));
rptMain.setRptGroupby((String) rs.getString("rpt_groupby"));
rptMain.setRptLastPageFoot((String) rs
.getString("rpt_LastPageFoot"));
String script = (String) rptMain.getRptScript();
String title = (String) rptMain.getRptTitle();
String replaceScript = script;
if (script != null && !script.equals("")) {
int i_where = script.indexOf("where");
if (i_where > -1) {
String _script = script.substring(i_where + 5);
int _left0 = 0;
int _right0 = 0;
_left0 = _script.indexOf("[", _right0);
if (_left0 > 0) {
while (_left0 >= 0) {
boolean ihasOther = false;
_right0 = _script.indexOf("]", _left0);
if (_right0 <= _left0) {
LOG.error("给定rpt_id为:" + reportId
+ "的报表配置script有问题:[]不匹配");
hasError = true;
errMessage = errMessage + "给定rpt_id为:"
+ reportId + "的报表配置script有问题:[]不匹配";
break;
}
String str_tr = _script.substring(_left0 + 1,
_right0);
// 最后一个冒号
int i_colon = str_tr.lastIndexOf(":");
// 没有冒号或者冒号后没有字符
if (i_colon >= str_tr.length()) {
LOG.error("给定rpt_id为:" + reportId
+ "的报表配置script有问题:[]中的:位置不正确或者没有");
hasError = true;
errMessage = errMessage + "给定rpt_id为:"
+ reportId
+ "的报表配置script有问题:[]中的:位置不正确或者没有";
break;
}
String str_td = str_tr.substring(i_colon + 1);
if (str_td == null || str_td.equals("")) {
LOG.error("给定rpt_id为:" + reportId
+ "的报表配置script有问题:[]中的:后没有名称");
hasError = true;
errMessage = errMessage + "给定rpt_id为:"
+ reportId
+ "的报表配置script有问题:[]中的:后没有名称";
break;
}
tableHtml.append("<tr><td>").append(str_td)
.append("</td><td>");
int _left1 = 0;
int _right1 = 0;
String replaceString = null; // 替换的字符串
_left1 = str_tr.indexOf("{", _right1);
while (_left1 >= 0) {
_right1 = str_tr.indexOf("}", _left1);
if (_right1 <= _left1) {
LOG.error("给定rpt_id为:" + reportId
+ "的报表配置script有问题:{}不匹配");
hasError = true;
errMessage = errMessage + "给定rpt_id为:"
+ reportId
+ "报表配置script有问题:{}不匹配";
}
String parameter_column = str_tr.substring(
_left1 + 1, _right1);
String[] strArr = parameter_column
.split(":");
String parameter = request
.getParameter(strArr[0]);
if (parameter == null) {
createInputHtml(tableHtml, strArr[0]);
if (strArr.length > 1) {
tableHtml.append(strArr[1]);
}
} else {
// 生成替换字符串
// 1.between {_date_start:至} and {_date_end}:时间 ==> column between to_date('2007-01-01','yyyy-mm-dd') and to_date('2007-01-31','yyyy-mm-dd')
// 2.[{_str_year:年}{_str_month:月}:时间] ==> column = '200701'
// 3.{_str_year}**{str_month} column = '2007'**'01'
String strOther = null;
int left0 = str_tr
.indexOf("{", _right1);
if (left0 > 0) {
strOther = str_tr.substring(
_right1 + 1, left0);
}
if (strOther != null
&& !strOther.trim().equals("")) {
ihasOther = true;
}
if (replaceString == null
|| replaceString.equals("")) {
if (ihasOther) {
if (parameter_column
.indexOf("_nub") == 0) {
replaceString = "to_number('"
+ parameter + "')";
} else if (parameter_column
.indexOf("_date") == 0) {
replaceString = "to_date('"
+ parameter
+ "','yyyy-mm-dd')";
} else {
replaceString = "'"
+ parameter + "'";
}
replaceString = replaceString
+ strOther;
} else {
if (parameter_column
.indexOf("_nub") == 0) {
replaceString = "to_number('"
+ parameter;
} else if (parameter_column
.indexOf("_date") == 0) {
replaceString = "to_date('"
+ parameter;
} else {
replaceString = "'"
+ parameter;
}
}
} else {
if (ihasOther) {
if (parameter_column
.indexOf("_nub") == 0) {
replaceString = replaceString
+ "to_number('"
+ parameter + "')";
} else if (parameter_column
.indexOf("_date") == 0) {
replaceString = replaceString
+ "to_date('"
+ parameter
+ "','yyyy-mm-dd')";
} else {
replaceString = replaceString
+ "'"
+ parameter
+ "'";
}
replaceString = replaceString
+ strOther;
} else {
if (parameter_column
.indexOf("_nub") == 0) {
replaceString = replaceString
+ parameter;
} else if (parameter_column
.indexOf("_date") == 0) {
replaceString = replaceString
+ parameter;
} else {
replaceString = replaceString
+ parameter;
}
}
}
// 标题是单独替换
if (title != null
&& title.indexOf("{"
+ strArr[0] + "}") > -1) {
title = title.replace("{"
+ strArr[0] + "}",
parameter);
}
}
_left1 = str_tr.indexOf("{", _right1);
}
if (!ihasOther) {
if (str_tr.indexOf("{_nub") == 0) {
replaceString = replaceString + "')";
} else if (str_tr.indexOf("{_date") == 0) {
replaceString = replaceString
+ "','yyyy-mm-dd')";
} else {
replaceString = replaceString + "'";
}
}
if (replaceString != null) {
replaceScript = replaceScript.replace("["
+ str_tr + "]", replaceString);
}
tableHtml.append("</td></tr>");
_left0 = _script.indexOf("[", _right0);
}
} else {
// 没有中括号[]
int _left1 = 0;
int _right1 = 0;
String replaceString = null; // 替换的字符串
_left1 = script.indexOf("{", _right1);
while (_left1 >= 0) {
_right1 = script.indexOf("}", _left1);
if (_right1 <= _left1) {
LOG.error("给定rpt_id为:" + reportId
+ "的报表配置script有问题:{}不匹配");
hasError = true;
errMessage = errMessage + "给定rpt_id为:"
+ reportId + "报表配置script有问题:{}不匹配";
}
String parameter_column = script.substring(
_left1 + 1, _right1);
String[] strArr = parameter_column.split(":");
String parameter = request
.getParameter(strArr[0]);
if (parameter == null) {
tableHtml.append("<tr><td>");
if (strArr.length > 1) {
tableHtml.append(strArr[1]);
}
tableHtml.append("</td><td>");
createInputHtml(tableHtml, strArr[0]);
tableHtml.append("</td></tr>");
} else {
// 生成替换字符串
if (parameter_column.indexOf("_nub") == 0) {
replaceString = "to_number('"
+ parameter + "')";
} else if (parameter_column
.indexOf("_date") == 0) {
replaceString = "to_date('" + parameter
+ "','yyyy-mm-dd')";
} else {
replaceString = "'" + parameter + "'";
}
// 标题是单独替换
if (title != null
&& title.indexOf("{" + strArr[0]
+ "}") > -1) {
title = title.replace("{" + strArr[0]
+ "}", parameter);
}
}
if (replaceString != null) {
replaceScript = replaceScript.replace("{"
+ parameter_column + "}",
replaceString);
}
_left1 = script.indexOf("{", _right1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -