jsp或struts2将数据库内容通过另存为方式导出到一个txt文件里,要如何实现

jsp或struts2将数据库内容通过另存为方式导出到一个txt文件里,要怎么实现
将文件内容导出,并存储在数据库,要怎么实现??
我已经可以将数据库记录提取到action层了,接下来要怎么做?有没有相关js的例子?
------解决思路----------------------
这还不容易么,在界面 设置一个 另存为按钮,然后用户点击这个按钮,就触发下载行为(下载逻辑就去数据库那数据,返回一个text)然后用户 自己下载就完成了!
------解决思路----------------------
java  写txt
------解决思路----------------------

package com.dtbridge.loan.util;  
  
import java.io.*;  
import java.sql.Connection;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.sql.Statement;  
  
import org.apache.log4j.Logger;  
  
import com.dtbridge.core.util.Connect;  
import com.dtbridge.loan.dayend.sqlmapdao.DayLoanBaseSqlMapDaoNew;  
  
public class 信贷导文本 {  
    private static final Logger log = Logger.getLogger(DayLoanBaseSqlMapDaoNew.class.getName());  
    public Connect connect = new Connect("jdbc.properties");  
    private static 信贷导文本 instance = null;  
    private FileWriter fileWriter = null;  
    private boolean isWriteFirstLine;  
    private long startTime = 0;  
    private long endTime = 0;  
    private int resultFieldsLength = 0;  
    private int errFieldIndex=0;  
    private int loopStep = 0;  
    private StringBuffer lineStr = null;  
      
    public static synchronized 信贷导文本 getInstance() {  
        if (instance == null)  
            instance = new 信贷导文本();  
        return instance;  
    }  
      
    private Connection conn = connect.getConnection();  
    public Statement stmt = null;  
      
    public 信贷导文本(){}  
      
      
    public void 导出信贷公司客户信息表(){  
        log.info("(2): 导出信贷公司客户信息表开始: 导出文件名称为 D://信贷公司客户信息表.txt");  
        startTime = System.currentTimeMillis();  
        isWriteFirstLine = true;  
        String[] resultFields = {"cus_id","loan_id","cn_com_name","com_kind","cus_field","cus_kind","org_id","rep_name","rep_person_id","com_reg_id","Nat_Tax_Id","Loc_Tax_Id","Reg_Capital","Acc_Permit","current_address","Com_Phone","class_1","class_2","class_gb","opt_capital","in_credit_class","reg_org_id","reg_by_id","reg_date"};  
        String[] resultFieldsName = {"客户号","贷款卡号","客户名称","企业性质","客户所属领域","客户种类","组织机构代码","法定代表人","法定代表人身份证号码","营业执照号码","国税登记证号","地税登记证号","注册资本","开户许可证","办公地址","联系电话","行业大类","行业中类","行业分(小)类","企业规模","内部信用等级","登记机构","登记人","登记日期"};  
        String sql = "select cus_id,loan_id,cn_com_name,com_kind,cus_field,cus_kind,org_id,rep_name,rep_person_id,com_reg_id,Nat_Tax_Id,Loc_Tax_Id,Reg_Capital,Acc_Permit,current_address,Com_Phone,class_1,class_2,class_gb,opt_capital,in_credit_class,reg_org_id,reg_by_id,reg_date from cus_com";  
        ResultSet rs = null;  
        int totalRows = 0;  
        try {  
            stmt = conn.createStatement();  
            fileWriter = new FileWriter(new File("D://信贷公司客户信息表.txt"));  
            rs = stmt.executeQuery(sql);  
            while(rs.next()){  
                fileWriter.write(getLinedString(rs,resultFields,resultFieldsName,","));  
            }  
            if(fileWriter !=null)  
                fileWriter.close();  
            totalRows = rs.getRow();  
            if(rs != null)  
                rs.close();  
        } catch (SQLException e) {  
        } catch (FileNotFoundException e) {  
        } catch (IOException e) {  
        } catch (Exception e) {  
        }   
        endTime = System.currentTimeMillis();  
        log.info("导出信贷公司客户信息表结束: 共导出 '" + totalRows + "' 条! 共耗时: " + Math.round((endTime - startTime)/60000.0) + "分钟!");  
    }  
  
      
      
    private String getLinedString(ResultSet rs,String[] resultFields,String[] resultFieldsName,String decifer) throws Exception{  
        if(resultFields.length!=resultFieldsName.length)  
            throw new Exception("要导出的字段名称与字段名称说明的长度不一致!");  
        if(lineStr == null)  
            lineStr = new StringBuffer(800);  
        else  
            lineStr.delete(0,lineStr.length());  
        resultFieldsLength = resultFields.length;  
        try {  
            if(isWriteFirstLine){  
                for(loopStep=0; loopStep<resultFieldsName.length; loopStep++){  
                    lineStr.append(resultFieldsName[loopStep])  
                    .append(decifer);  
                }  
                lineStr.append("\r\n");  
            }  
            isWriteFirstLine = false;  
            for(loopStep=0; loopStep<resultFieldsLength; loopStep++){  
                errFieldIndex = loopStep;  
                if(rs.getString(resultFields[loopStep]) != null)  
                    lineStr.append(rs.getString(resultFields[loopStep]).trim())  
                        .append(decifer);  
                else  
                    lineStr.append("")  
                        .append(decifer);  
            }  
            lineStr.deleteCharAt(lineStr.lastIndexOf(decifer)).append("\r\n");  
        } catch (SQLException e) {  
            log.info("要导出的表数据中没有这个字段: '" + resultFields[errFieldIndex] + "'");  
            e.printStackTrace();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return lineStr.toString();  
    }  
      
    public void dataExport(){  
        log.info("信贷导数程序开始:");  
        long start = System.currentTimeMillis();  
        导出信贷公司客户信息表();  
  
        try {  
            if(stmt != null)  
                stmt.close();  
            if(conn != null)  
                conn.close();  
        } catch (SQLException e) {  
            e.printStackTrace();  
        }  
        long end = System.currentTimeMillis();  
        log.info("信贷导数程序结束: 共耗时: " + Math.round((end - start)/60000.0) + "分钟!");  
    }  
      
    public static void main(String []a){  
        信贷导文本.getInstance().dataExport();  
    }  
}