⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 reportservlet.java

📁 Java报表源程序 提供二维报表设计
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -