我使用的是SpringSource ToolSuite开发工具(内核还是Eclipse)。
1.首先使用iReport工具自己做一个.jrxml结尾的报表文件。
2.配置好struts2的开发环境。
直接粘贴代码吧:
下面是Maven工程的路径
pom.xml(自动加载jar包的文件):
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.banclogix.jasper</groupId>
<artifactId>jasper</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>jasper Maven Webapp</name>
<url>http://maven.apache.org</url>
<repositories>
<repository>
<id>jasperreports</id>
<url>http://jasperreports.sourceforge.net/maven2</url>
</repository>
</repositories>
<dependencies>
<!-- <dependency>
<groupId>ar.com.fdvs</groupId>
<artifactId>DynamicJasper</artifactId>
<version>3.0.13</version>
</dependency>
-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.2.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1-alpha-1</version>
</dependency>
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.10.0.GA</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>net.sourceforge.jtds</groupId>
<artifactId>jtds</artifactId>
<version>1.2.4</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.0.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.8.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>2.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-digester</groupId>
<artifactId>commons-digester</artifactId>
<version>1.7</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>1.7.5</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.6</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>jfree</groupId>
<artifactId>jcommon</artifactId>
<version>1.0.15</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>gnujaxp</groupId>
<artifactId>gnujaxp</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.0.12</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>gnujaxp</groupId>
<artifactId>gnujaxp</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<finalName>jasper</finalName>
</build>
</project>
其他的Jar包:
struts.xml文件内容:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<constant name="struts.action.extension" value="action"/>
<include file="example.xml"/>
<!-- <package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index" />
<action name="index">
<result type="redirectAction">
<param name="actionName">HelloWorldAction</param>
<param name="namespace">/example</param>
</result>
</action>
</package> -->
<!-- Add packages here -->
</struts>
-------------------------------------------------------------------
example.xml文件内容:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="export" namespace="/export" extends="struts-default">
<action name="export_*" class="com.dmf.action.ExampleAction" method="{1}">
<result name="export_html">/export/export_html.jsp?currency=${currency}</result>
<!-- ../reports/image?image=px -->
<!-- ../reports/px -->
<result name="image"></result>
</action>
<!-- <action name="Login_*" method="{1}" class="example.Login">
<result name="input">/example/Login.jsp</result>
<result type="redirectAction">Menu</result>
</action>
<action name="*" class="example.ExampleSupport">
<result>/example/{1}.jsp</result>
</action> -->
<!-- Add actions here -->
</package>
<package name="default"
extends="struts-default,jasperreports-default">
<action name="PDF" class="com.dmf.action.JasperAction">
<result name="success" type="jasper">
<param name="location">
/reports/compiled_KDF_Report07.jasper
</param>
<param name="dataSource">Quotes</param>
<param name="format">PDF</param>
</result>
</action>
<action name="HTML" class="com.dmf.action.JasperAction">
<result name="success" type="jasper">
<param name="location">
/reports/compiled_KDF_Report07.jasper
</param>
<param name="dataSource">Quotes</param>
<param name="format">HTML</param>
</result>
</action>
<action name="XML" class="com.dmf.action.JasperAction">
<result name="success" type="jasper">
<param name="location">
/reports/compiled_KDF_Report07.jasper
</param>
<param name="dataSource">Quotes</param>
<param name="format">XML</param>
</result>
</action>
<action name="CSV" class="com.dmf.action.JasperAction">
<result name="success" type="jasper">
<param name="location">
/reports/compiled_KDF_Report07.jasper
</param>
<param name="dataSource">Quotes</param>
<param name="format">CSV</param>
</result>
</action>
<action name="XLS" class="com.dmf.action.JasperAction">
<result name="success" type="jasper">
<param name="location">
/reports/compiled_KDF_Report07.jasper
</param>
<param name="dataSource">Quotes</param>
<param name="format">XLS</param>
</result>
</action>
<action name="RTF" class="com.dmf.action.JasperAction">
<result name="success" type="jasper">
<param name="location">
/reports/compiled_KDF_Report07.jasper
</param>
<param name="dataSource">Quotes</param>
<param name="format">RTF</param>
</result>
</action>
</package>
</struts>
------------------------------------------------------------------------
database.properties:
password=pass
url=jdbc/:jtds/:sqlserver/://yourIP:1433/databaseName
username=use
driver_name=net.sourceforge.jtds.jdbc.Driver
close_time=1200000
-------------------------------------------------------------------
JasperAction.java:
package com.dmf.action;
import java.io.File;
import java.util.List;
import net.sf.jasperreports.engine.JasperCompileManager;
import org.apache.struts2.ServletActionContext;
import com.dmf.db.DataBaseLayer;
import com.dmf.dto.Quote;
import com.opensymphony.xwork2.ActionSupport;
public class JasperAction extends ActionSupport {
private static final long serialVersionUID = 1L;
// private List<PeopleBean> myList;
private List<Quote> quotes;
private DataBaseLayer dataBaseLayer;
public String execute() throws Exception {
//From DB
dataBaseLayer = DataBaseLayer.getInstance();
quotes = dataBaseLayer.getQuotes();
try {
String reportSource = ServletActionContext.getServletContext()
.getRealPath("/reports/KDF_Report07.jrxml");
File parent = new File(reportSource).getParentFile();
JasperCompileManager.compileReportToFile(reportSource, new File(
parent, "compiled_KDF_Report07.jasper")
.getAbsolutePath());
} catch (Exception e) {
e.printStackTrace();
return ERROR;
}
return SUCCESS;
}
public List getQuotes() {
return quotes;
}
}
---------------------------------------------------------------------
Constants.java:
public class Constants {
public static final String DATABASEFILEPATH = "D://workspace//jasper//src//main//resources//database.properties";
}
---------------------------------------------------------------------------
ConfigReader.java:
package com.dmf.db;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
import org.apache.log4j.Logger;
/**read from file
* @author limx */
public class ConfigReader {
private static Logger logger = Logger.getLogger(ConfigReader.class);
private static ConfigReader configReader;
private Properties prop;
private FileInputStream fis;
public ConfigReader(){
}
/**
* open properties file
* @param fileName
*/
public void init(String path){
if(prop == null)
prop = new Properties();
try {
fis = new FileInputStream(path);
prop.load(fis);
} catch (FileNotFoundException e) {
logger.info("3 some error:"+e);
}
catch (IOException e) {
logger.info("4 some error:"+e);
}
}
/**Got a single class
*/
public static synchronized ConfigReader getInstance(){
if(configReader == null){
configReader = new ConfigReader();
}
return configReader;
}
/**Got a item from config file
*/
public String getConfigItem(String key,String defaultValue){
return prop.getProperty(key, defaultValue);
}
}
----------------------------------------------------------------------------------
ConnBean.java:
package com.dmf.db;
/**
* @author limx
*/
public class ConnBean {
private String driverName;
private String url;
private String username;
private String password;
public String getDriverName() {
return driverName;
}
public void setDriverName(String driverName) {
this.driverName = driverName;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
------------------------------------------------------------------
ConnectionPool.java
package com.dmf.db;
import java.sql.*;
import java.lang.reflect.*;
import java.util.*;
import java.io.*;
import org.apache.log4j.Logger;
import com.dmf.common.Constants;
@SuppressWarnings("unchecked")
/**@author limx
* */
public class ConnectionPool {
private static Logger logger = Logger.getLogger(ConnectionPool.class);
@SuppressWarnings("rawtypes")
private static LinkedList m_notUsedConnection = new LinkedList();
@SuppressWarnings("rawtypes")
private static HashSet m_usedUsedConnection = new HashSet();
private static String m_url = "";
private static String m_user = "";
private static String m_password = "";
private static String m_driver_name = "";
private static long close_time = 10000;
static final boolean DEBUG = true;
static private long m_lastClearClosedConnection = System.currentTimeMillis();
static {
initConnectionPool();
initDriver();
}
private ConnectionPool() {
}
private static void initConnectionPool(){
ConfigReader configReader = ConfigReader.getInstance();
configReader.init(Constants.DATABASEFILEPATH);
ConnectionPool.setClose_time(Long.parseLong(configReader.getConfigItem("close_time", "120000000")));
ConnectionPool.setPassword(configReader.getConfigItem("password", "kdf"));
ConnectionPool.setUrl(configReader.getConfigItem("url", "kdf"));
ConnectionPool.setUser(configReader.getConfigItem("username", "kdf"));
ConnectionPool.setM_driver_name(configReader.getConfigItem("driver_name", ""));
}
private static void initDriver() {
Driver driver = null;
// load driver
try {
driver = (Driver) Class.forName(ConnectionPool.getM_driver_name())
.newInstance();
installDriver(driver);
} catch (Exception e) {
}
}
public static void installDriver(Driver driver) {
try {
DriverManager.registerDriver(driver);
} catch (Exception e) {
System.out.println("ConnetionPool:installDriver");
e.printStackTrace();
}
}
@SuppressWarnings("rawtypes")
public static synchronized Connection getConnection() {
clearClosedConnection();
while (m_notUsedConnection.size() > 0) {
try {
ConnectionWrapper wrapper = (ConnectionWrapper) m_notUsedConnection
.removeFirst();
if (wrapper.connection.isClosed()) {
continue;
}
m_usedUsedConnection.add(wrapper);
if (DEBUG) {
wrapper.debugInfo = new Throwable(
"Connection initial statement");
}
return wrapper.connection;
} catch (Exception e) {
}
}
int newCount = getIncreasingConnectionCount();
LinkedList list = new LinkedList();
ConnectionWrapper wrapper = null;
for (int i = 0; i < newCount; i++) {
wrapper = getNewConnection();
if (wrapper != null) {
list.add(wrapper);
}
}
if (list.size() == 0) {
return null;
}
wrapper = (ConnectionWrapper) list.removeFirst();
m_usedUsedConnection.add(wrapper);
m_notUsedConnection.addAll(list);
list.clear();
return wrapper.connection;
}
private static ConnectionWrapper getNewConnection() {
try {
Connection con = DriverManager.getConnection(m_url, m_user,
m_password);
ConnectionWrapper wrapper = new ConnectionWrapper(con);
return wrapper;
} catch (Exception e) {
String message = "DataBaseLayer:->getNewConnection failed!";
logger.error(message+" "+e.toString());
}
return null;
}
static synchronized void pushConnectionBackToPool(ConnectionWrapper con) {
boolean exist = m_usedUsedConnection.remove(con);
if (exist) {
m_notUsedConnection.addLast(con);
}
}
@SuppressWarnings("rawtypes")
public static int close() {
int count = 0;
Iterator iterator = m_notUsedConnection.iterator();
while (iterator.hasNext()) {
try {
((ConnectionWrapper) iterator.next()).close();
count++;
} catch (Exception e) {
}
}
m_notUsedConnection.clear();
iterator = m_usedUsedConnection.iterator();
while (iterator.hasNext()) {
try {
ConnectionWrapper wrapper = (ConnectionWrapper) iterator.next();
wrapper.close();
if (DEBUG) {
wrapper.debugInfo.printStackTrace();
}
count++;
} catch (Exception e) {
}
}
m_usedUsedConnection.clear();
return count;
}
@SuppressWarnings("rawtypes")
private static void clearClosedConnection() {
long time = System.currentTimeMillis();
// sometimes user change system time,just return
if (time < m_lastClearClosedConnection) {
time = m_lastClearClosedConnection;
return;
}
// no need check very often
if (time - m_lastClearClosedConnection < close_time) {
return;
}
m_lastClearClosedConnection = time;
// begin check
Iterator iterator = m_notUsedConnection.iterator();
while (iterator.hasNext()) {
ConnectionWrapper wrapper = (ConnectionWrapper) iterator.next();
try {
if (wrapper.connection.isClosed()) {
iterator.remove();
}
} catch (Exception e) {
iterator.remove();
if (DEBUG) {
System.out
.println("connection is closed, this connection initial StackTrace");
wrapper.debugInfo.printStackTrace();
}
}
}
// make connection pool size smaller if too big
int decrease = getDecreasingConnectionCount();
if (m_notUsedConnection.size() < decrease) {
return;
}
while (decrease-- > 0) {
ConnectionWrapper wrapper = (ConnectionWrapper) m_notUsedConnection
.removeFirst();
try {
wrapper.connection.close();
} catch (Exception e) {
}
}
}
/**
* get increasing connection count, not just add 1 connection
*
* @return count
*/
public static int getIncreasingConnectionCount() {
int count = 1;
int current = getConnectionCount();
count = current / 4;
if (count < 1) {
count = 1;
}
return count;
}
/**
* get decreasing connection count, not just remove 1 connection
*
* @return count
*/
public static int getDecreasingConnectionCount() {
int current = getConnectionCount();
if (current < 10) {
return 0;
}
return current / 3;
}
public synchronized static void printDebugMsg() {
printDebugMsg(System.out);
}
@SuppressWarnings({ "unused", "rawtypes" })
public synchronized static void printDebugMsg(PrintStream out) {
if (DEBUG == false) {
return;
}
StringBuilder msg = new StringBuilder();
msg.append("debug message in " + ConnectionPool.class.getName());
msg.append("/r/n");
msg.append("total count is connection pool: " + getConnectionCount());
msg.append("/r/n");
msg.append("not used connection count: " + getNotUsedConnectionCount());
msg.append("/r/n");
msg.append("used connection, count: " + getUsedConnectionCount());
out.println(msg);
Iterator iterator = m_usedUsedConnection.iterator();
while (iterator.hasNext()) {
ConnectionWrapper wrapper = (ConnectionWrapper) iterator.next();
wrapper.debugInfo.printStackTrace(out);
}
out.println();
}
public static synchronized int getNotUsedConnectionCount() {
return m_notUsedConnection.size();
}
public static synchronized int getUsedConnectionCount() {
return m_usedUsedConnection.size();
}
public static synchronized int getConnectionCount() {
return m_notUsedConnection.size() + m_usedUsedConnection.size();
}
public static String getUrl() {
return m_url;
}
public static void setUrl(String url) {
if (url == null) {
return;
}
m_url = url.trim();
}
public static String getUser() {
return m_user;
}
public static void setUser(String user) {
if (user == null) {
return;
}
m_user = user.trim();
}
public static String getPassword() {
return m_password;
}
public static void setPassword(String password) {
if (password == null) {
return;
}
m_password = password.trim();
}
public static long getClose_time() {
return close_time;
}
public static void setClose_time(long close_time) {
ConnectionPool.close_time = close_time;
}
public static String getM_driver_name() {
return m_driver_name;
}
public static void setM_driver_name(String m_driver_name) {
ConnectionPool.m_driver_name = m_driver_name;
}
}
class ConnectionWrapper implements InvocationHandler {
private final static String CLOSE_METHOD_NAME = "close";
public Connection connection = null;
private Connection m_originConnection = null;
public long lastAccessTime = System.currentTimeMillis();
Throwable debugInfo = new Throwable("Connection initial statement");
ConnectionWrapper(Connection con) {
this.connection = (Connection) Proxy.newProxyInstance(con.getClass()
.getClassLoader(), new Class[]{Connection.class}, this);
//.getClassLoader(), con.getClass().getInterfaces(), this);
m_originConnection = con;
}
void close() throws SQLException {
m_originConnection.close();
}
public Object invoke(Object proxy, Method m, Object[] args)
throws Throwable {
Object obj = null;
if (CLOSE_METHOD_NAME.equals(m.getName())) {
ConnectionPool.pushConnectionBackToPool(this);
} else {
obj = m.invoke(m_originConnection, args);
}
lastAccessTime = System.currentTimeMillis();
return obj;
}
}
---------------------------------------------------------------------------------
DatabaseLayer.java:
package com.dmf.db;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import com.dmf.dto.Quote;
/** database operation
* @author limx
*/
public class DataBaseLayer {
private static Logger logger = Logger.getLogger(DataBaseLayer.class);
private static DataBaseLayer db = null;
private Connection conn = null;
synchronized public static DataBaseLayer getInstance(){
if (db == null)
db = new DataBaseLayer();
return db;
}
/** connection
*/
private DataBaseLayer(){
try{
conn = ConnectionPool.getConnection();
}catch(Exception e){
logger.error("DataBaseLayer:->getConnection failed!");
}
}
// private PreparedStatement prstForSaveQuote = null;
// private PreparedStatement getPrstForSelectQuote() throws SQLException {
//
// if (prstForSaveQuote == null)
// prstForSaveQuote = conn.prepareStatement(
// "select top 10 symbol,bid,ask from quote");
// return prstForSaveQuote;
// }
public List<Quote> getQuotes(){
List<Quote> quotes = null;
PreparedStatement prst = null;
ResultSet rs;
String sql = "select top 50 symbol,bid,ask,quotetime from quote";
try {
prst = conn.prepareStatement(sql);
rs = prst.executeQuery();
Quote quote = null;
if(quotes == null)
quotes = new ArrayList<Quote>();
while(rs.next()){
quote = new Quote();
quote.setBid(rs.getBigDecimal("bid"));
quote.setAsk(rs.getBigDecimal("ask"));
quote.setSymbol(rs.getString("symbol"));
quote.setQuote_time(rs.getTimestamp("quotetime"));
quotes.add(quote);
quote = null;
}
} catch (SQLException e) {
return new ArrayList<Quote>();
}
return quotes;
}
public static void main(String[] args){
DataBaseLayer db = DataBaseLayer.getInstance();
System.out.println(db.getQuotes().size());
}
}
--------------------------------------------------------------------------------------------
Quote.java:
package com.dmf.dto;
import java.math.BigDecimal;
import java.sql.Timestamp;
/**
* @author limx
*/
public class Quote {
private String symbol;
private BigDecimal bid;
private BigDecimal ask;
//private String data_source;
private Timestamp quote_time;
public Quote(){
}
public Quote(String symbol, BigDecimal bid, BigDecimal ask, Timestamp quote_time){
this.symbol = symbol;
this.bid = bid;
this.ask = ask;
//this.data_source = data_source;
this.quote_time = quote_time;
}
public String getSymbol() {
return symbol;
}
public void setSymbol(String symbol) {
this.symbol = symbol;
}
public BigDecimal getBid() {
return bid;
}
public void setBid(BigDecimal bid) {
this.bid = bid;
}
public BigDecimal getAsk() {
return ask;
}
public void setAsk(BigDecimal ask) {
this.ask = ask;
}
// public String getData_source() {
// return data_source;
// }
// public void setData_source(String data_source) {
// this.data_source = data_source;
// }
public Timestamp getQuote_time() {
return quote_time;
}
public void setQuote_time(Timestamp quote_time) {
this.quote_time = quote_time;
}
}
-------------------------------------------------------------------------------
index.jsp:
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Welcome</title>
</head>
<body style="text-align:center;">
<br/>
<font size="6" color="blue" style="font-weight:bloder;">Export Different Format File By *.jrxml File.</font>
<hr/>
<a href="HTML.action" target="_blank">From iReport.jrxml export [HTML]</a>
<br>
<a href="PDF.action" target="_blank">From iReport.jrxml export [PDF]</a>
<br>
<a href="XML.action" target="_blank">From iReport.jrxml export [XML]</a>
<br>
<a href="CSV.action" target="_blank">From iReport.jrxml export [CSV]</a>
<br>
<a href="XLS.action" target="_blank">From iReport.jrxml export [XLS]</a>
<br>
<a href="RTF.action" target="_blank">From iReport.jrxml export [RTF]</a>
<hr/>
</body>
</html>
-----------------------------------------------------------------------------------
web.xml:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Struts2 Jasper Demo</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
-------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
KDF_Report07.jrxml:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="KDF_Report07" language="groovy" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="30" rightMargin="30" topMargin="20" bottomMargin="20">
<property name="ireport.scriptlethandling" value="0"/>
<property name="ireport.encoding" value="UTF-8"/>
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<import value="net.sf.jasperreports.engine.*"/>
<import value="java.util.*"/>
<import value="net.sf.jasperreports.engine.data.*"/>
<parameter name="rptMan" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["sterning"]]></defaultValueExpression>
</parameter>
<parameter name="rptDate" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["2008-01-12"]]></defaultValueExpression>
</parameter>
<field name="symbol" class="java.lang.String">
<fieldDescription><![CDATA[symbol]]></fieldDescription>
</field>
<field name="bid" class="java.math.BigDecimal">
<fieldDescription><![CDATA[bid]]></fieldDescription>
</field>
<field name="ask" class="java.math.BigDecimal">
<fieldDescription><![CDATA[ask]]></fieldDescription>
</field>
<field name="quote_time" class="java.sql.Timestamp">
<fieldDescription><![CDATA[quote_time]]></fieldDescription>
</field>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="62" splitType="Stretch">
<staticText>
<reportElement key="staticText-1" x="7" y="0" width="517" height="57" forecolor="#FF0033"/>
<box>
<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement textAlignment="Center">
<font size="36" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
</textElement>
<text><![CDATA[Struts2+JasperReports+MSSQL]]></text>
</staticText>
<line>
<reportElement key="line-4" x="-30" y="61" width="594" height="1"/>
</line>
</band>
</title>
<pageHeader>
<band height="13" splitType="Stretch">
<line>
<reportElement key="line-3" x="-29" y="12" width="592" height="1"/>
</line>
</band>
</pageHeader>
<columnHeader>
<band height="45" splitType="Stretch">
<staticText>
<reportElement key="staticText-2" x="13" y="5" width="95" height="33"/>
<box>
<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement>
<font size="24" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
</textElement>
<text><![CDATA[Symbol]]></text>
</staticText>
<staticText>
<reportElement key="staticText-3" x="140" y="5" width="105" height="33"/>
<box>
<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement>
<font size="24" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
</textElement>
<text><![CDATA[Bid]]></text>
</staticText>
<staticText>
<reportElement key="staticText-4" x="266" y="5" width="100" height="33"/>
<box>
<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement>
<font size="24" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
</textElement>
<text><![CDATA[Ask]]></text>
</staticText>
<staticText>
<reportElement key="staticText-5" x="393" y="10" width="124" height="33"/>
<box>
<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement>
<font size="24" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
</textElement>
<text><![CDATA[QuoteTime]]></text>
</staticText>
<line>
<reportElement key="line-2" x="-30" y="43" width="596" height="1"/>
</line>
</band>
</columnHeader>
<detail>
<band height="39" splitType="Stretch">
<textField isBlankWhenNull="false">
<reportElement key="textField-1" x="13" y="7" width="95" height="30"/>
<box>
<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement>
<font size="14" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{symbol}]]></textFieldExpression>
</textField>
<textField isBlankWhenNull="false">
<reportElement key="textField-2" x="140" y="5" width="105" height="29"/>
<box>
<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement>
<font size="14" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression class="java.math.BigDecimal"><![CDATA[$F{bid}]]></textFieldExpression>
</textField>
<textField isBlankWhenNull="false">
<reportElement key="textField-3" x="266" y="5" width="100" height="28"/>
<box>
<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement>
<font size="14" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression class="java.math.BigDecimal"><![CDATA[$F{ask}]]></textFieldExpression>
</textField>
<textField isBlankWhenNull="false">
<reportElement key="textField-4" x="393" y="5" width="124" height="30"/>
<box>
<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement>
<font size="14" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression class="java.sql.Timestamp"><![CDATA[$F{quote_time}]]></textFieldExpression>
</textField>
<line>
<reportElement key="line-1" x="-30" y="37" width="593" height="1"/>
</line>
</band>
</detail>
<columnFooter>
<band splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="50" splitType="Stretch">
<textField isBlankWhenNull="false">
<reportElement key="textField-8" x="98" y="18" width="138" height="23"/>
<box>
<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement textAlignment="Right">
<font size="12" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA["page " + String.valueOf($V{PAGE_NUMBER}) + " of"]]></textFieldExpression>
</textField>
<textField evaluationTime="Report" isBlankWhenNull="false">
<reportElement key="textField-9" x="239" y="18" width="83" height="23"/>
<box>
<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement>
<font size="12" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[" " + String.valueOf($V{PAGE_NUMBER})]]></textFieldExpression>
</textField>
</band>
</pageFooter>
<lastPageFooter>
<band height="50" splitType="Stretch"/>
</lastPageFooter>
<summary>
<band splitType="Stretch"/>
</summary>
</jasperReport>
----------------------------------------------------------------------------------------
参考网址:
http://www.blogjava.net/sterning/archive/2008/01/02/172317.html
OK 就是这些东西了,你只要按照这个区部署就可以了