fcGraphServlet.java
上传用户:mingda
上传日期:2017-06-20
资源大小:27691k
文件大小:14k
源码类别:

OA系统

开发平台:

Java

  1. //package dom;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. import java.sql.*;
  5. import java.io.*;
  6. import dom.fcGraph;
  7. import java.util.Hashtable;
  8. import java.util.Vector;
  9. import java.util.Enumeration;
  10. import java.awt.*;
  11. import org.xml.sax.* ;
  12. import org.apache.xerces.dom.TextImpl;
  13. import org.w3c.dom.Attr;
  14. import org.w3c.dom.Document;
  15. import org.w3c.dom.NamedNodeMap;
  16. import org.w3c.dom.Node;
  17. import org.w3c.dom.NodeList;
  18. import dom.DOMParserWrapper;
  19. import dom.wrappers.DOMParser;
  20. import java.lang.Boolean;
  21. public class fcGraphServlet extends HttpServlet {
  22. private  String strXml="";
  23.     private Document document=null;
  24. public void service( HttpServletRequest req, HttpServletResponse res )
  25.           throws IOException, ServletException {
  26.       //res.setContentType("text/html");
  27.       res.setContentType("image/jpeg");
  28. /*
  29.       fcGraph sg = new fcGraph();
  30.       try {
  31.   ServletOutputStream out = null;
  32.    out = res.getOutputStream();
  33.    int iType=1;
  34. */
  35.       String strKey = req.getParameter( "key" );
  36. if (strKey.equals("send"))
  37. {
  38. //送参数
  39. //计算前台SEND来的XML串 存入session中
  40. BufferedReader in = req.getReader();
  41. String line = null;
  42. strXml="";
  43. while ((line = in.readLine()) != null) {
  44.       strXml=strXml+line;
  45.     }
  46.    // strXml=encodeTrans(strXml,"8859") ;
  47. HttpSession session = req.getSession(true);
  48. session.setAttribute("graphdata", strXml);
  49. }
  50. if (strKey.equals("show"))
  51. {
  52. HttpSession session = req.getSession(true);
  53. strXml=session.getAttribute("graphdata").toString();
  54. //strKey为?后的值
  55. //String strXml=new String(req.getQueryString());
  56. strXml=Trans(strXml);
  57. //parse XML串
  58.     try {
  59.         DOMParserWrapper parser =(DOMParserWrapper)Class.forName("dom.wrappers.DOMParser").newInstance();
  60.         document = parser.parseXml(strXml);
  61. }
  62. catch (Exception e) {
  63.     }
  64. //--------------------------------------------------------
  65. //--------------------------------------------------------
  66.       fcGraph sg = new fcGraph();
  67.       try {
  68.   ServletOutputStream out = null;
  69.    out = res.getOutputStream();
  70. //图形类型1 2 3
  71.         String sType = req.getParameter( "type" );
  72. int iType=Integer.parseInt(sType,10);
  73.    //行数
  74.    String sRows = req.getParameter( "rows" );
  75.    int iRows=Integer.parseInt(sRows,10);
  76.    //列数
  77.     String sCols = req.getParameter( "cols" );
  78.    int iCols=Integer.parseInt(sCols,10);
  79. //标题
  80.    String sTitle="";
  81.    String sWidth="";
  82.    String sHeight="";
  83.    String strMargin="";
  84.    String strLabeltext="";//X轴标题的内容
  85.    String strLabelleft="";//标题的横坐标
  86.    String strLabeltop="";//标题的纵坐标
  87. String strArcCenterleft="100";//圆心的横坐标
  88. String strArcCentertop="150";//圆心的纵坐标
  89. String strArcRadius="70";//圆的半径
  90. String strPieHigh="30";
  91. String strExchangeXY="";//当strExchangeXY设置为true时,报表的行,列的数据要进行调换;接收时其值为true或false
  92. String strWriteNumeric="";//每个柱形图上是否写上相应的数值
  93. boolean bWriteNumeric=false;//将strWriteNumeric转化为boolean型值后,再传到fcGraph.class中
  94. String strSplit="";
  95. String strEffectCols="";//实际列数
  96. try {
  97.    sTitle = req.getParameter( "title" );
  98.    }
  99. catch( Exception e ) { }
  100. try {
  101.    sWidth = req.getParameter( "width" );
  102.    sHeight = req.getParameter( "height" );
  103.    strMargin=req.getParameter( "ImgMargin" );
  104.    //System.out.println("strMargin="+strMargin);
  105.    }
  106.  catch( Exception e ) { }
  107.  try {
  108.    strLabeltext = req.getParameter( "Label" );
  109.    }
  110.  catch( Exception e ) { }
  111.  try {
  112.    strLabelleft = req.getParameter( "LabelLeft" );
  113.    }
  114.  catch( Exception e ) { }
  115.  try {
  116.    strLabeltop = req.getParameter( "LabelTop" );
  117.    }
  118.  catch( Exception e ) { }
  119.  try {
  120.    strArcCenterleft = req.getParameter( "ArcLeft" );
  121.    }
  122.  catch( Exception e ) { }
  123.  try {
  124.    strArcCentertop = req.getParameter( "ArcTop" );
  125.    }
  126.  catch( Exception e ) { }
  127.  try {
  128.    strArcRadius = req.getParameter( "ArcRadius" );
  129.    }
  130.  catch( Exception e ) { }
  131.  try {
  132.    strPieHigh = req.getParameter( "PieHigh" );
  133.    }
  134.  catch( Exception e ) { }
  135.  try {
  136.   strExchangeXY=req.getParameter("ExchangeXY");
  137.  }
  138.  catch(Exception e){}
  139.  try {
  140.   strWriteNumeric=req.getParameter("StrWriteNumeric");  
  141.  }
  142.  catch(Exception e){}
  143.  try {
  144.   strSplit=req.getParameter("StrSplit");  
  145.  }
  146.  catch(Exception e){}
  147.   try {
  148.   strEffectCols=req.getParameter("EffectCols");    
  149.  }
  150.  catch(Exception e){}
  151.    int iWidth=Integer.parseInt(sWidth,10);
  152.    int iHeight=Integer.parseInt(sHeight,10);
  153.    int iMargin=Integer.parseInt(strMargin);
  154.    //System.out.println("iMargin="+iMargin);
  155.    int Labelleft=Integer.parseInt(strLabelleft);
  156.    int Labeltop=Integer.parseInt(strLabeltop);
  157.    int strlength=strLabeltext.length();
  158.    int PieHigh=Integer.parseInt(strPieHigh);
  159.    if (Labelleft==0){
  160.    Labelleft=iWidth-(strlength*12+30);
  161.    }
  162.    if (Labeltop==0){
  163.    Labeltop=iHeight-10;
  164.    }
  165. int Arcleft=Integer.parseInt(strArcCenterleft);
  166.    int Arctop=Integer.parseInt(strArcCentertop);
  167.    int ArcRadius=Integer.parseInt(strArcRadius);
  168.    if (strWriteNumeric.equals("true")){
  169.    bWriteNumeric=true;
  170.    }
  171.    else {
  172.    bWriteNumeric=false;
  173.    }
  174.    int iSplit=Integer.parseInt(strSplit);
  175.    int effectCols=Integer.parseInt(strEffectCols);   
  176. //数据输入
  177. Node root = document.getChildNodes().item(0);
  178.   Hashtable data= new Hashtable();
  179. int i=0;
  180. int j=0;
  181.      Vector V=new Vector(iRows);//行的KEY
  182.      Vector V2=new Vector(iCols);//列的KEY
  183. if (strExchangeXY.equals("true")){
  184. //当strExchangeXY="true"时,表示报表行和列的数据要进行对换
  185. if (iCols>2) {
  186. for (i=1;i<iCols;i++)
  187. {
  188. String s2 =root.getChildNodes().item(0).getChildNodes().item(i).getChildNodes().item(0).getNodeValue();
  189. //if (iCols>2) {
  190.      //多列
  191.      Hashtable datas1= new Hashtable();
  192. for (j=1;j<iRows;j++)
  193. {
  194. String ss =root.getChildNodes().item(j).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  195. String s3=root.getChildNodes().item(j).getChildNodes().item(i).getChildNodes().item(0).getNodeValue();
  196. datas1.put(ss,new Double(s3));
  197.             if (i==1)
  198.              V2.addElement(new String(ss));
  199. }
  200. data.put(s2,datas1);
  201. V.addElement(s2);
  202. }
  203. }
  204. else {
  205. Hashtable datas1= new Hashtable();
  206. String s2 =root.getChildNodes().item(0).getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  207. for (j=1;j<iRows;j++)
  208. {
  209. String ss =root.getChildNodes().item(j).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  210. String s3=root.getChildNodes().item(j).getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  211. datas1.put(ss,new Double(s3));
  212.              V2.addElement(new String(ss));
  213. }
  214. data.put(s2,datas1);
  215. V.addElement(s2);
  216. }
  217.         }
  218. else {
  219. //此else块是处理,strExchangeXY不等于"true"时,报表行和列的数据不进行对换,/////============================
  220. for (i=1;i<iRows;i++)
  221. {
  222. String s2 =root.getChildNodes().item(i).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  223.      if (iCols>2) {
  224.     //多列
  225.      Hashtable datas1= new Hashtable();
  226. for (j=1;j<iCols;j++)
  227. {
  228. String ss =root.getChildNodes().item(0).getChildNodes().item(j).getChildNodes().item(0).getNodeValue();
  229. String s3=root.getChildNodes().item(i).getChildNodes().item(j).getChildNodes().item(0).getNodeValue();
  230. datas1.put(ss,new Double(s3));
  231.             if (i==1)
  232.              V2.addElement(new String(ss));
  233. }
  234. data.put(s2,datas1);
  235. }
  236. else
  237. {
  238. //单列
  239. String s4=root.getChildNodes().item(i).getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  240. data.put(s2,new Double(s4));
  241. }
  242. V.addElement(s2);
  243. }
  244. }
  245. //----------------------------------------------------
  246. /*
  247. Hashtable data= new Hashtable();
  248.            Hashtable datas1= new Hashtable();
  249.   datas1.put("一车间",new Double(10));
  250.          datas1.put("二车间",new Double(30));
  251.          datas1.put("三车间",new Double(150));
  252.          datas1.put("四车间",new Double(20));
  253.          datas1.put("五车间",new Double(30));
  254. data.put("一分厂",datas1);
  255.            Hashtable datas2= new Hashtable();
  256.   datas2.put("一车间",new Double(40));
  257.          datas2.put("二车间",new Double(70));
  258.          datas2.put("三车间",new Double(90));
  259.         datas2.put("四车间",new Double(10));
  260.          datas2.put("五车间",new Double(20));
  261. data.put("二分厂",datas2);
  262.            Hashtable datas3= new Hashtable();
  263.   datas3.put("一车间",new Double(86));
  264.         datas3.put("二车间",new Double(40));
  265.          datas3.put("三车间",new Double(50));
  266.          datas3.put("四车间",new Double(150));
  267.          datas3.put("五车间",new Double(50));
  268. data.put("三分厂",datas3);
  269.            Hashtable datas4= new Hashtable();
  270.   datas4.put("一车间",new Double(66));
  271.          datas4.put("二车间",new Double(100));
  272.            datas4.put("三车间",new Double(36));
  273.                 datas4.put("四车间",new Double(26));
  274.          //datas4.put("五车间",new Double(56));
  275. data.put("四分厂",datas4);
  276. Hashtable datas5= new Hashtable();
  277.   datas5.put("一车间",new Double(66));
  278.          datas5.put("二车间",new Double(100));
  279.            datas5.put("三车间",new Double(36));
  280.                 datas5.put("四车间",new Double(26));
  281.          //datas4.put("五车间",new Double(56));
  282. data.put("五分厂",datas5);
  283. Hashtable datas6= new Hashtable();
  284.   datas6.put("一车间",new Double(66));
  285.          datas6.put("二车间",new Double(100));
  286.            datas6.put("三车间",new Double(36));
  287.                 datas6.put("四车间",new Double(26));
  288.          //datas4.put("五车间",new Double(56));
  289. data.put("六分厂",datas6);
  290. Hashtable datas7= new Hashtable();
  291.   datas7.put("一车间",new Double(66));
  292.          datas7.put("二车间",new Double(100));
  293.            datas7.put("三车间",new Double(36));
  294.                 datas7.put("四车间",new Double(26));
  295.          //datas4.put("五车间",new Double(56));
  296. data.put("七分厂",datas7);
  297.                         Vector V=new Vector(8);
  298.                  V.addElement(new String("一分厂"));
  299.                                 V.addElement(new String("二分厂"));
  300.                                 V.addElement(new String("三分厂"));
  301.                                 V.addElement(new String("四分厂"));
  302.                                 V.addElement(new String("五分厂"));
  303.                                 V.addElement(new String("六分厂"));
  304.                                 V.addElement(new String("七分厂"));
  305.                                 V.addElement(new String("八分厂"));
  306.                         Vector V2=new Vector(8);
  307.                                V2.addElement(new String("一车间"));
  308.                                V2.addElement(new String("二车间"));
  309.                                V2.addElement(new String("三车间"));
  310.                                V2.addElement(new String("四车间"));
  311.                                V2.addElement(new String("五车间"));
  312. //----------------------------------------------------
  313.  */
  314.              sg.SetHashtableKey(V);
  315.         sg.SetDataSource(data);
  316. sg.SetbgColor(Color.white);//white);//底色
  317. sg.SetDisplayType(iType); //设置图形风格
  318. if (iWidth>0 && iHeight>0)
  319. sg.SetScreen(iWidth,iHeight,iMargin);//设置显示区域大小
  320. else
  321. sg.SetScreen(600,300,iMargin);//设置显示区域大小
  322. //sg.SetTitleFont(new Font("楷体_GB2312",Font.BOLD,24));//设置标题字体
  323. sg.SetTitle(sTitle); //设置标题
  324. sg.SetTitlefontcolor(Color.blue);//设置标题颜色
  325. sg.SetcooColor(Color.black); //坐标系(x轴y轴)颜色
  326. sg.SetlineColor(Color.black);//折线颜色
  327. //sg.SetCategoryFont(new Font("楷体_GB2312",Font.BOLD,18));//设置X轴标签字体
  328. sg.SetCategoryfontcolor(Color.blue);//设置X轴标签颜色
  329.            sg.SetCategory(strLabeltext,Labelleft,Labeltop); //设置X轴标签内容、位置
  330.            sg.Setxnodefontcolor(Color.black);//设置X轴节点字体的颜色
  331. //sg.Setxnodefont(new Font("楷体_GB2312",Font.BOLD,16)); //设置X轴节点字体
  332. //sg.SetValueFont(new Font("楷体_GB2312",Font.BOLD,18));//设置Y轴标题字体
  333. sg.SetValueFontcolor(Color.green);//设置Y轴标题颜色
  334.            //sg.Setynodefont(new Font("楷体_GB2312",Font.BOLD,16));//设置Y轴节点字体
  335. sg.Setynodefontcolor(Color.black);//设置Y轴节点字体、颜色
  336. sg.SetPieCenter(Arcleft,Arctop);//设置圆饼圆心
  337. sg.Setradius(ArcRadius);//半径
  338. sg.SetPieHeight(PieHigh);
  339. //boolean WriteNumeric=true;
  340. sg.SetWriteNumeric(bWriteNumeric);
  341. sg.SetSplitData(iSplit);
  342. sg.SetEffectCols(effectCols);
  343. //sg.SetPieFont(new Font("楷体_GB2312",Font.BOLD,14));//圆饼字体
  344.    if (strExchangeXY.equals("true")){
  345.    //if (iCols>2)
  346. //{
  347.    sg.SetexistSeries(1);
  348.   sg.SetHashtableKey2(V2);
  349.   //}
  350.    //else
  351. //{
  352.    //sg.SetexistSeries(1);
  353. //sg.SetValue(root.getChildNodes().item(0).getChildNodes().item(1).getChildNodes().item(0).getNodeValue());//设置Y轴标题内容、位置
  354. //sg.SetHashtableKey2(V2);
  355.    //}
  356. }
  357. else {
  358. if (iCols>2)
  359. {
  360.    sg.SetexistSeries(1);
  361.   sg.SetHashtableKey2(V2);
  362.   }
  363.    else
  364. {
  365.    sg.SetexistSeries(0);
  366. sg.SetValue(root.getChildNodes().item(0).getChildNodes().item(1).getChildNodes().item(0).getNodeValue());//设置Y轴标题内容、位置
  367.    }
  368. }
  369.    sg.DrawGraph( out );//绘制输出
  370.  }
  371.  catch( Exception e ) {
  372.   throw new ServletException( e );
  373.  }
  374. }
  375.    }
  376.    private String encodeTrans( String src, String encode ) {
  377.       if( src == null ) return null;
  378.       try {
  379.          src = new String( src.getBytes( encode ), "gb2312" );
  380.       }
  381.       catch( Exception e ) {}
  382.       return src;
  383.    }
  384. private String Trans(String str1) {
  385. String sss="";
  386. try {
  387. byte [] by = str1.getBytes("8859_1");
  388. sss = new String(by,"UTF-8");
  389. }
  390.  catch( Exception e ) { }
  391. return sss;
  392. }
  393. }
  394.  //Fontname="Dialog","SansSerif","Monospaced","Helvetica"
  395.  //"TimesRoman","Courier","DiagInput","ZapfDiagbats"
  396.  //Fonttype="Plain""Bold""Italic""BoldItalic"
  397.  //Fontsize="12", "14", "16", "18", "24", "36"