Spring + easyUI(jsp) 导出txt文本文件

之前还在纠结的问题就是,网上找到的资料太简单都不知道是什么,然后自己在公司的框架下成功跑起来一个导出txt文本文件的功能,趁着今天有点时间而且书忘记带,写下来。

当然我的方法也不过只是其中一个的方法,肯定有其他方法,而且我的也不一定通用。仅供学习之用。

首先创建两个关于导入txt文本文件的类,这两个类也是我模仿框架里写了Excel的模块写的。

首先创建类BaseTxtView注意这个类继承Spring的AbstractView


import java.io.BufferedOutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.servlet.view.AbstractView;

public abstract class BaseTxtView extends AbstractView
{
	private static Logger log = LogManager.getLogger(BaseTxtView.class);
	private static final String CONTENT_TYPE = "text/plain";
	
	private static final String EXTENSION = ".txt";
	
	private String url;
	private String txtName;
	
	public BaseTxtView(String txtName)
	{
		this.txtName = txtName;
		setContentType(CONTENT_TYPE);
	}
	
	public void setUrl(String url)
	{
		this.url = url;
	}
	
	@Override
	protected boolean generatesDownloadContent()
	{
		return true;
	}
	
	public final void renderMergedOutputModel(ArrayList<String> errorStrs,HttpServletRequest request, HttpServletResponse response) throws Exception {


		buildTxtDocument(request, response);
		
		// Set the content type.
		response.setContentType(getContentType());
		response.setHeader("Content-Disposition", "attachment; filename="  
                 + URLEncoder.encode(txtName, "UTF-8")+EXTENSION);  
		// Should we set the content length here?
		// response.setContentLength(workbook.getBytes().length);
		BufferedOutputStream buff = null;
		StringBuffer write = new StringBuffer();
		String enter = "\r\n";
		// Flush byte array to servlet output stream.
		ServletOutputStream out = response.getOutputStream();
		buff = new BufferedOutputStream(out);
		for(int i = 0;i < errorStrs.size();i++)
		{
			write.append(errorStrs.get(i));
			write.append(enter);
		}
		buff.write(write.toString().getBytes("UTF-8"));
		buff.flush();
		buff.close();
		
		out.flush();
		out.close();
	}
	
	protected abstract void buildTxtDocument(HttpServletRequest request, HttpServletResponse response)
			throws Exception;
	public void setTxtName(String txtName) {
		this.txtName = txtName;
	}
	public String getTxtName() {
		return txtName;
	}


}
再创建类ReportTxtView继承上面的类

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ReportTxtView extends BaseTxtView{

	public ReportTxtView(String txtName) {
		super(txtName);
	}

	@Override
	protected void buildTxtDocument(HttpServletRequest request, HttpServletResponse response) throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		// TODO Auto-generated method stub
		
	}

}

然后在Controller里面引用类和类中的导入方法,注意ModelAndView这个类的使用。

@Controller
@RequestMapping("/export")
public class CommonController extends {	
	
	@RequestMapping("/exportTxt")
	public ModelAndView  exportErrTxt(String[] errStr,HttpServletRequest request,HttpServletResponse response){
		ReportTxtView reportTxtView = new ReportTxtView(errStr[errStr.length-2]+errStr[errStr.length-1]);
		ArrayList<String> errLst = new ArrayList<String>();
		for(int i = 0; i < errStr.length-2; i++){
			errLst.add(errStr[i]);
		}
		try {
			reportTxtView.renderMergedOutputModel(errLst, request, response);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return new ModelAndView(reportTxtView);
	}
}

最后在jsp页面调用Controller中的方法,页面这个目录可能存在问题,总之大概是这个意思。

function export() {       
        window.location.href = PATH+"hr/common/exportErrTxt.do?errStr="+result.backParam;
     
} 
当然这里面很多地方我没有注释,因为很多Spring下面的类我也没有搞明白,总之需要继续学习。学习进度本身落后的情况下,更不能停滞不前。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值