SRTUTS + ITEXT 创建日志数据的保存下载

来源:互联网 发布:淘宝网幼儿园名字贴 编辑:程序博客网 时间:2024/05/20 18:47

package com.secSrv.webApp.action.netlog;

import java.awt.Color;
import java.io.ByteArrayOutputStream;
import java.util.Date;
import java.util.List;

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

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

import com.lowagie.text.BadElementException;
import com.lowagie.text.Cell;
import com.lowagie.text.Document;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.HeaderFooter;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.Rectangle;
import com.lowagie.text.Table;
import com.lowagie.text.html.HtmlWriter;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.rtf.RtfWriter;
import com.secSrv.webApp.action.baseinfo.BaseAction;
import com.secSrv.webApp.beans.cache.Pages;
import com.secSrv.webApp.business.netlog.NetlogBusiness;
import com.secSrv.webApp.form.netlog.LogPage;
import com.secSrv.webApp.hibernate.po.TblNetlog;
import com.secSrv.webApp.hibernate.po.TdSysOperator;
import com.secSrv.webApp.status.TdSysOperatorConst;
import com.secSrv.webApp.utils.Constants;
import com.secSrv.webApp.utils.SignOnCheck;

public class DownLoadDataAction extends BaseAction{
 
//  --------------------------------------------------------- Instance


 // --------------------------------------------------------- Methods

 /**
  * Method execute
  *
  * @param mapping
  * @param form
  * @param request
  * @param response
  * @return ActionForward
  */
 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  
  ActionMessages messages = new ActionMessages();
  
  //检验该客户是否有权限
  ActionForward returnForward = SignOnCheck.checkPrivilege(request,response);
  if(returnForward != null){
   return returnForward;
  }
  HttpSession session = request.getSession();
  //取得用户信息
     TdSysOperator tdUser = (TdSysOperator) session.getAttribute(Constants.SysOperator);
     if (tdUser == null){
            messages.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage("sys.login.sessionerror", "session失效,"+
                    "请重新登陆"));
            saveMessages(request, messages);
            return new ActionForward("/sessionerror.do");
     }
  String hqlSearch = (String)request.getSession().getAttribute("netloghql");
  String hqlCount = (String)request.getSession().getAttribute("netlogcount");
  String queryType = request.getParameter("type");
     try {
   String usertype = "";
   if (tdUser.getPriority().equals(
     TdSysOperatorConst.LANGCHAO_ADMIN_USER)) {
    usertype = TdSysOperatorConst.COMPANY_ADMIN_USER;
   } else {
    usertype = TdSysOperatorConst.COMMON_USER;
   }
   Document document = new Document();
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
   if(queryType.equals("html"))
   {
    response.setContentType("text/html");
    //其中attachment是保存, inline是在网页中打开
                response.setHeader( "Content-disposition", "attachment; filename=foobar.htm" );
                HtmlWriter.getInstance(document, baos);
   }
   //用PdfWriter来监听,输出流为response.getOutputStream,
   else if(queryType.equals("pdf"))
   {
    response.setContentType("application/pdf");//可以在网页中用pdf reader打开
                PdfWriter.getInstance(document, baos);
                //其中attachment是保存, inline是在网页中打开
                response.setHeader( "Content-disposition", "attachment; filename=foobar.pdf" );
   }
   else if(queryType.equals("rtf"))
   {
     response.setContentType("application/msword");
              response.setHeader( "Content-disposition", "attachment; filename=foobar.rtf" );
              RtfWriter.getInstance(document, baos);
   }
   //下面是添写数据
   // 如果变量多不等于上面3个,则用reponse。sedredircet
            document.open();
         BaseFont bfChinese = BaseFont.createFont("STSong-Light",
                     "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
         Font FontChineseTitle = new Font(bfChinese, 24, Font.BOLD);
         Font fontContent = new Font(bfChinese, 9, Font.NORMAL);
         Font fontHeader = new Font(bfChinese, 9, Font.BOLD);
         //标题
         Paragraph paraTitle = new Paragraph("网 络 日 志 表", FontChineseTitle);
         paraTitle.setAlignment(Element.ALIGN_CENTER);
         document.add(paraTitle);
         //header 和 footer
         HeaderFooter footer = new HeaderFooter(new Phrase("页号: ",fontContent), true);
            document.setFooter(footer);
//          we add a Header that will show up on PAGE 1
            HeaderFooter header = new HeaderFooter(new Phrase("版权:浪潮",fontContent),false);
            document.setHeader(header);
            // step 4
            Table datatable = new Table(13);
            datatable.setPadding(4);
            datatable.setSpacing(0);
            //datatable.setBorder(Rectangle.NO_BORDER);
            int headerwidths[] = {5, 5, 9, 8, 8, 8, 12, 6, 12, 6, 5, 4, 11};
            datatable.setWidths(headerwidths);
            datatable.setWidth(100);
            // the first cell spans 10 columns
       /*    Cell cell = new Cell(new Phrase("网 络 日 志 表", FontChineseTitle));
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            cell.setLeading(30);
            cell.setColspan(13);
            cell.setBorder(Rectangle.NO_BORDER);
            cell.setBackgroundColor(new Color(0xC0, 0xC0, 0xC0));
            datatable.addCell(cell);
            */
   datatable.setDefaultHorizontalAlignment(Element.ALIGN_CENTER);
            Color color = new Color(0xC0, 0xC0, 0xC0);
            datatable.addCell(this.createCell(new Phrase("序号",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
            datatable.addCell(this.createCell(new Phrase("设备编号",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
            datatable.addCell(this.createCell(new Phrase("时间",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
            datatable.addCell(this.createCell(new Phrase("日志类型",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
            datatable.addCell(this.createCell(new Phrase("日志级别",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
            datatable.addCell(this.createCell(new Phrase("引发事件",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
            datatable.addCell(this.createCell(new Phrase("源IP地址",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
            datatable.addCell(this.createCell(new Phrase("源端口",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
            datatable.addCell(this.createCell(new Phrase("目的IP地址",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
            datatable.addCell(this.createCell(new Phrase("目的端口",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
            datatable.addCell(this.createCell(new Phrase("协议类型",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
            datatable.addCell(this.createCell(new Phrase("次数",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
            datatable.addCell(this.createCell(new Phrase("日志内容",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
            datatable.endHeaders();
            List netlogList = null;
            TblNetlog netlog = null;
   NetlogBusiness netlogBusiness = new NetlogBusiness();
   int count = netlogBusiness.getNetlogCount(hqlCount);
   netlogList = netlogBusiness.getAllNetlog(0,count,hqlSearch);
            for(int i=0;i<netlogList.size();i++)
            {
             netlog = (TblNetlog)netlogList.get(i);
             datatable.addCell(new Phrase(String.valueOf(i+1),fontContent));
                datatable.addCell(new Phrase(netlog.getDeviceId().toString(),fontContent));
                datatable.addCell(new Phrase(netlog.getTime().toLocaleString(),fontContent));
                datatable.addCell(new Phrase(netlog.getCategory(),fontContent));
                datatable.addCell(new Phrase(netlog.getSeverity(),fontContent));
                datatable.addCell(new Phrase(netlog.getEvent(),fontContent));
                datatable.addCell(new Phrase(netlog.getSrcIp(),fontContent));
                datatable.addCell(new Phrase(netlog.getSrcPort(),fontContent));
                datatable.addCell(new Phrase(netlog.getDstIp(),fontContent));
                datatable.addCell(new Phrase(netlog.getDstPort(),fontContent));
                datatable.addCell(new Phrase(netlog.getProtocol(),fontContent));
                datatable.addCell(new Phrase(netlog.getOccurrence().toString(),fontContent));
                datatable.addCell(new Phrase(netlog.getContent(),fontContent));
            }
            document.add(datatable);
            //统计信息
            Paragraph paraTotol = new Paragraph("纪录条数:"+count, fontHeader);
            paraTotol.setAlignment(Element.ALIGN_CENTER);
            document.add(paraTotol);
            Paragraph paraTime = new Paragraph("创建时间:"+new Date().toLocaleString(), fontContent);
            paraTime.setAlignment(Element.ALIGN_LEFT);
            document.add(paraTime);
            // step 5: we close the document (the outputstream is also closed internally)
         document.close();
         // 设置 response headers
         response.setHeader("Expires", "0");
         response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
         response.setHeader("Pragma", "public");
        
         response.setContentLength(baos.size());
         //创建servletoutputstream流对象,即为response。getoutputstream
         ServletOutputStream out = response.getOutputStream();
         baos.writeTo(out);//将字节输出流写入到servletoutputstream
         out.flush();//out。flush输出内容
  } catch (Exception e) {
   messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
     "sys.common.error", e.toString()));
   saveMessages(request, messages);
   return mapping.findForward("failure");
  }
  return null;
 }
 public Cell createCell(Phrase phrase,Color color,int halign,int valign,int colspan ) throws BadElementException
 {
  Cell cell = new Cell(phrase);
        cell.setHorizontalAlignment(halign);
        cell.setVerticalAlignment(valign);
        cell.setColspan(colspan);
        cell.setBackgroundColor(color);
        return cell;
 }
}

原创粉丝点击