`
axiang_2898
  • 浏览: 88966 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jasperreport报表模板预览 applet与servlet通信

阅读更多

本在经过一些时间,终于搞定了在applet上预览报表模板的功能,现帖出以供交流:

 

首先是解决的applet与servlet的相互通信,在servlet中把文件作为流的形式输出,applet中就可以调用了,servlet如下所示:

 

java 代码
  1. package servlets;   
  2.   
  3. import java.io.File;   
  4. import java.io.IOException;   
  5. import java.io.InputStream;   
  6. import java.io.ObjectOutputStream;   
  7. import java.io.PrintWriter;   
  8.   
  9. import javax.servlet.ServletContext;   
  10. import javax.servlet.ServletException;   
  11. import javax.servlet.ServletOutputStream;   
  12. import javax.servlet.http.HttpServlet;   
  13. import javax.servlet.http.HttpServletRequest;   
  14. import javax.servlet.http.HttpServletResponse;   
  15.   
  16. import net.sf.jasperreports.engine.JRException;   
  17. import net.sf.jasperreports.engine.JRReport;   
  18. import net.sf.jasperreports.engine.JRRuntimeException;   
  19. import net.sf.jasperreports.engine.util.JRLoader;   
  20.   
  21.   
  22. public class DesignViewServlet extends HttpServlet {   
  23.   
  24.     /**  
  25.      * 说明:  
  26.      * @param  
  27.      * @return  
  28.      */  
  29.     private static final long serialVersionUID = 2006;   
  30.   
  31.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {              
  32.         ServletContext context = this.getServletConfig().getServletContext();   
  33.            
  34.         File reportFile = new File(context.getRealPath("/reports/WebappReport.jasper"));   
  35.            
  36.            
  37.         if (!reportFile.exists()){   
  38.             throw new JRRuntimeException("File WebappReport.jasper 没有找到!");   
  39.         }else{   
  40.             response.setContentType("application/octet-stream");   
  41.                
  42.             ServletOutputStream out=response.getOutputStream();   
  43.                
  44.             ObjectOutputStream os=new ObjectOutputStream(out);   
  45.                
  46.             os.writeObject(reportFile);   
  47.             os.flush();   
  48.             os.close();   
  49.         }   
  50.            
  51.     }   
  52.        
  53. }   

 

第二步则要写applet啦,applet如下所示:

java 代码
  1. import java.awt.BorderLayout;   
  2. import java.io.DataInputStream;   
  3. import java.io.File;   
  4. import java.io.InputStream;   
  5. import java.io.PrintWriter;   
  6. import java.io.StringWriter;   
  7. import java.net.URL;   
  8. import java.net.URLConnection;   
  9.   
  10. import javax.swing.JApplet;   
  11. import javax.swing.JOptionPane;   
  12.   
  13. import net.sf.jasperreports.engine.JRReport;   
  14. import net.sf.jasperreports.engine.util.JRLoader;   
  15.   
  16.   
  17.   
  18. public class DesignViewApplet extends JApplet {   
  19.        
  20.        
  21.     public DesignViewApplet()   
  22.     {   
  23.         initComponents();   
  24.     }   
  25.   
  26.   
  27.        
  28.     public void init()   
  29.     {      
  30.             try  
  31.             {                  
  32.                 URL url = new URL(getCodeBase(),"../servlets/designview");     
  33.                 if(url!=null){   
  34.                     try{   
  35.                         File file = (File)JRLoader.loadObject(url);   
  36.                         JRDesignViewSimple view=new JRDesignViewSimple(file.getPath(),false);   
  37.                         this.pnlMain.add(view, BorderLayout.CENTER);   
  38.                     }catch(Exception e){   
  39.                         e.printStackTrace();   
  40.                     }   
  41.                 }                  
  42.             }   
  43.             catch (Exception e)   
  44.             {   
  45.                 StringWriter swriter = new StringWriter();   
  46.                 PrintWriter pwriter = new PrintWriter(swriter);   
  47.                 e.printStackTrace(pwriter);   
  48.                 JOptionPane.showMessageDialog(this, swriter.toString());   
  49.             }   
  50.     }   
  51.   
  52.   
  53.        
  54.     private void initComponents() {//GEN-BEGIN:initComponents   
  55.         pnlMain = new javax.swing.JPanel();   
  56.   
  57.         pnlMain.setLayout(new java.awt.BorderLayout());   
  58.   
  59.         getContentPane().add(pnlMain, java.awt.BorderLayout.CENTER);   
  60.   
  61.     }   
  62.        
  63.     private javax.swing.JPanel pnlMain;   
  64.        
  65. }   

 

上面用到一个方法JRDesignViewSimple view如下:

java 代码
  1. import java.io.InputStream;   
  2.   
  3. import net.sf.jasperreports.engine.JRException;   
  4. import net.sf.jasperreports.engine.JRReport;   
  5. import net.sf.jasperreports.view.JRDesignViewer;   
  6.   
  7.   
  8. public class JRDesignViewSimple extends JRDesignViewer {   
  9.   
  10.     public JRDesignViewSimple(String fileName, boolean isXML) throws JRException {   
  11.         super(fileName, isXML);   
  12.     }   
  13.     public JRDesignViewSimple(JRReport report) throws JRException {   
  14.         super(report);   
  15.     }   
  16.     public JRDesignViewSimple(InputStream is,boolean isXML) throws JRException {   
  17.         super(is,isXML);   
  18.     }      
  19. }   

 

这样java的代码就完成啦,下一步是写html来引用他!html的页面如下:

 由于applet的代码帖不上,我作为附件形式上传。

这样只要打开页面引用就可以啦!其中对applet的安全会有要求,要在java的安装目录上加上其相应的代码,以上的例子和大家一起讨论!谢谢发言。

分享到:
评论
5 楼 landong___ 2012-08-22  
jasper的填充数据没有啊,但是谢谢依然!
4 楼 guzhiwxb 2011-10-24  
请问一下怎么做到List<JasperRrint>的打印预览
3 楼 itlangqun 2008-12-15  
/reports/WebappReport.jasper
这个文件没有啊!!!不够详细啊,资料我感觉还不全!!比较失望...但还是学习啦.
2 楼 itlangqun 2008-12-15  
/reports/WebappReport.jasper
这个文件没有啊!!!不够详细啊,资料我感觉还不全!!比较失望...但还是学习啦.
1 楼 pdw2009 2007-10-31  
写得很好,我明天试一下

相关推荐

Global site tag (gtag.js) - Google Analytics