⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fcgraphservlet.java

📁 一个完整的
💻 JAVA
字号:
//package dom;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import java.io.*;
import dom.fcGraph;
import java.util.Hashtable;
import java.util.Vector;
import java.util.Enumeration;
import java.awt.*;
import org.xml.sax.* ;
import org.apache.xerces.dom.TextImpl;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import dom.DOMParserWrapper;
import dom.wrappers.DOMParser;
import java.lang.Boolean;
public class fcGraphServlet extends HttpServlet {
	private  String strXml="";
   	private	Document document=null;
public void service( HttpServletRequest req, HttpServletResponse res )
          throws IOException, ServletException {
      //res.setContentType("text/html");
      res.setContentType("image/jpeg");
/*
      fcGraph sg = new fcGraph();
      try {
	 		ServletOutputStream out = null;
	  		out = res.getOutputStream();
	  		int iType=1;
*/
      String strKey = req.getParameter( "key" );
	if (strKey.equals("send"))
	{
		//送参数
		//计算前台SEND来的XML串	存入session中
		BufferedReader in = req.getReader();
		String line = null;
		strXml="";
		while ((line = in.readLine()) != null) {
		      strXml=strXml+line;
	    }
	   // strXml=encodeTrans(strXml,"8859") ;
		HttpSession session = req.getSession(true);
		session.setAttribute("graphdata", strXml);
	}
	if (strKey.equals("show"))
	{
		HttpSession session = req.getSession(true);
		strXml=session.getAttribute("graphdata").toString();
//strKey为?后的值
//String strXml=new String(req.getQueryString());		
		strXml=Trans(strXml);
//parse XML串
    try {
        DOMParserWrapper parser =(DOMParserWrapper)Class.forName("dom.wrappers.DOMParser").newInstance();
        document = parser.parseXml(strXml);
	}
	catch (Exception e) {
    }
//--------------------------------------------------------
//--------------------------------------------------------
      fcGraph sg = new fcGraph();
      try {
	 		ServletOutputStream out = null;
	  		out = res.getOutputStream();
			//图形类型1 2 3
	        String sType = req.getParameter( "type" );
			int iType=Integer.parseInt(sType,10);
	  		//行数
	  		String sRows = req.getParameter( "rows" );
	  		int iRows=Integer.parseInt(sRows,10);
	  		//列数
	   		String sCols = req.getParameter( "cols" );
	  		int iCols=Integer.parseInt(sCols,10);
			//标题
	  		String sTitle="";
	  		String sWidth="";
	  		String sHeight="";
	  		String strMargin="";
	  		String strLabeltext="";//X轴标题的内容
	  		String strLabelleft="";//标题的横坐标
	  		String strLabeltop="";//标题的纵坐标
			String strArcCenterleft="100";//圆心的横坐标
			String strArcCentertop="150";//圆心的纵坐标
			String strArcRadius="70";//圆的半径
			String strPieHigh="30";
			String strExchangeXY="";//当strExchangeXY设置为true时,报表的行,列的数据要进行调换;接收时其值为true或false
			String strWriteNumeric="";//每个柱形图上是否写上相应的数值			
			boolean bWriteNumeric=false;//将strWriteNumeric转化为boolean型值后,再传到fcGraph.class中
			String strSplit="";
			String strEffectCols="";//实际列数
			try {
	  			sTitle = req.getParameter( "title" );
	  		}
			catch( Exception e ) { }
			try {
	  			sWidth = req.getParameter( "width" );
	  			sHeight = req.getParameter( "height" );
	  			strMargin=req.getParameter( "ImgMargin" );
	  			//System.out.println("strMargin="+strMargin);
	  		}
			 catch( Exception e ) { }
			 try {
	  			strLabeltext = req.getParameter( "Label" );
	  		}
			 catch( Exception e ) { }
			 try {
	  			strLabelleft = req.getParameter( "LabelLeft" );
	  		}
			 catch( Exception e ) { }
			 try {
	  			strLabeltop = req.getParameter( "LabelTop" );
	  		}
			 catch( Exception e ) { }
			 try {
	  			strArcCenterleft = req.getParameter( "ArcLeft" );
	  		}
			 catch( Exception e ) { }
			 try {
	  			strArcCentertop = req.getParameter( "ArcTop" );
	  		}
			 catch( Exception e ) { }
			 try {
	  			strArcRadius = req.getParameter( "ArcRadius" );
	  		}
			 catch( Exception e ) { }
			 try {
	  			strPieHigh = req.getParameter( "PieHigh" );
	  		}
			 catch( Exception e ) { }
			 try {
			 	strExchangeXY=req.getParameter("ExchangeXY");
			 }
			 catch(Exception e){}
			 try {
			 	strWriteNumeric=req.getParameter("StrWriteNumeric");			 	
			 }
			 catch(Exception e){}
			 try {
			 	strSplit=req.getParameter("StrSplit");		 	
			 }
			 catch(Exception e){}
			  try {
			 	strEffectCols=req.getParameter("EffectCols");			 			 	
			 }
			 catch(Exception e){}
	  		int iWidth=Integer.parseInt(sWidth,10);
	  		int iHeight=Integer.parseInt(sHeight,10);
	  		int iMargin=Integer.parseInt(strMargin);
	  		//System.out.println("iMargin="+iMargin);
	  		int Labelleft=Integer.parseInt(strLabelleft);
	  		int Labeltop=Integer.parseInt(strLabeltop);
	  		int strlength=strLabeltext.length();
	  		int PieHigh=Integer.parseInt(strPieHigh);
	  		if (Labelleft==0){
	  			Labelleft=iWidth-(strlength*12+30);
	  		}
	  		if (Labeltop==0){
	  			Labeltop=iHeight-10;
	  		}
			int Arcleft=Integer.parseInt(strArcCenterleft);
	  		int Arctop=Integer.parseInt(strArcCentertop);
	  		int ArcRadius=Integer.parseInt(strArcRadius);
	  		if (strWriteNumeric.equals("true")){
	  		bWriteNumeric=true;
	  		}
	  		else {
	  			bWriteNumeric=false;
	  		}
	  		int iSplit=Integer.parseInt(strSplit);
	  		int effectCols=Integer.parseInt(strEffectCols);	  		
			//数据输入
	Node root = document.getChildNodes().item(0);	
 	Hashtable data= new Hashtable();
	int i=0;
	int j=0;
    	Vector V=new Vector(iRows);//行的KEY
    	Vector V2=new Vector(iCols);//列的KEY
	if (strExchangeXY.equals("true")){
	//当strExchangeXY="true"时,表示报表行和列的数据要进行对换
	if (iCols>2) {
		for (i=1;i<iCols;i++)
		{
			String s2 =root.getChildNodes().item(0).getChildNodes().item(i).getChildNodes().item(0).getNodeValue();			
			//if (iCols>2) {
		    	//多列
		    		Hashtable datas1= new Hashtable();
				for (j=1;j<iRows;j++)
				{
				String ss =root.getChildNodes().item(j).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
				String s3=root.getChildNodes().item(j).getChildNodes().item(i).getChildNodes().item(0).getNodeValue();			
				datas1.put(ss,new Double(s3));
		            if (i==1)
		            	V2.addElement(new String(ss));
				}
				data.put(s2,datas1);
				V.addElement(s2);
				}
			}
			else {
					Hashtable datas1= new Hashtable();
					String s2 =root.getChildNodes().item(0).getChildNodes().item(1).getChildNodes().item(0).getNodeValue();					
					for (j=1;j<iRows;j++)
					{
					String ss =root.getChildNodes().item(j).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
					String s3=root.getChildNodes().item(j).getChildNodes().item(1).getChildNodes().item(0).getNodeValue();			
					datas1.put(ss,new Double(s3));
			            	V2.addElement(new String(ss));
					}
					data.put(s2,datas1);
					V.addElement(s2);		
			}
        }
	else {
	//此else块是处理,strExchangeXY不等于"true"时,报表行和列的数据不进行对换,/////============================
		for (i=1;i<iRows;i++)
			{
				String s2 =root.getChildNodes().item(i).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
		    	if (iCols>2) {
			    //多列
			    	Hashtable datas1= new Hashtable();
					for (j=1;j<iCols;j++)
					{
					String ss =root.getChildNodes().item(0).getChildNodes().item(j).getChildNodes().item(0).getNodeValue();
					String s3=root.getChildNodes().item(i).getChildNodes().item(j).getChildNodes().item(0).getNodeValue();		
						datas1.put(ss,new Double(s3));
			            if (i==1)
			            	V2.addElement(new String(ss));
					}
					data.put(s2,datas1);
				}
				else
				{
				//单列
					String s4=root.getChildNodes().item(i).getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
					data.put(s2,new Double(s4));
				}
				V.addElement(s2);
			}
}
//----------------------------------------------------
/*
			Hashtable data= new Hashtable();
 		        	Hashtable datas1= new Hashtable();
		 			datas1.put("一车间",new Double(10));
		        		datas1.put("二车间",new Double(30));
		        		datas1.put("三车间",new Double(150));
		        		datas1.put("四车间",new Double(20));
		        		datas1.put("五车间",new Double(30));
			data.put("一分厂",datas1);
 		        	Hashtable datas2= new Hashtable();
		 			datas2.put("一车间",new Double(40));
		        		datas2.put("二车间",new Double(70));
		        		datas2.put("三车间",new Double(90));
		       			datas2.put("四车间",new Double(10));
		        		datas2.put("五车间",new Double(20));
			data.put("二分厂",datas2);
 		        	Hashtable datas3= new Hashtable();
		 			datas3.put("一车间",new Double(86));
		       			datas3.put("二车间",new Double(40));
		        		datas3.put("三车间",new Double(50));
		        		datas3.put("四车间",new Double(150));
		        		datas3.put("五车间",new Double(50));
			data.put("三分厂",datas3);
 		        	Hashtable datas4= new Hashtable();
		 			datas4.put("一车间",new Double(66));
		        		datas4.put("二车间",new Double(100));
		        	 	datas4.put("三车间",new Double(36));
		       		        datas4.put("四车间",new Double(26));
		        		//datas4.put("五车间",new Double(56));
			data.put("四分厂",datas4);
			Hashtable datas5= new Hashtable();
		 			datas5.put("一车间",new Double(66));
		        		datas5.put("二车间",new Double(100));
		        	 	datas5.put("三车间",new Double(36));
		       		        datas5.put("四车间",new Double(26));
		        		//datas4.put("五车间",new Double(56));
			data.put("五分厂",datas5);
			Hashtable datas6= new Hashtable();
		 			datas6.put("一车间",new Double(66));
		        		datas6.put("二车间",new Double(100));
		        	 	datas6.put("三车间",new Double(36));
		       		        datas6.put("四车间",new Double(26));
		        		//datas4.put("五车间",new Double(56));
			data.put("六分厂",datas6);
			Hashtable datas7= new Hashtable();
		 			datas7.put("一车间",new Double(66));
		        		datas7.put("二车间",new Double(100));
		        	 	datas7.put("三车间",new Double(36));
		       		        datas7.put("四车间",new Double(26));
		        		//datas4.put("五车间",new Double(56));
			data.put("七分厂",datas7);
                        Vector V=new Vector(8);
                		V.addElement(new String("一分厂"));
                                V.addElement(new String("二分厂"));
                                V.addElement(new String("三分厂"));
                                V.addElement(new String("四分厂"));
                                V.addElement(new String("五分厂"));
                                V.addElement(new String("六分厂"));
                                V.addElement(new String("七分厂"));
                                V.addElement(new String("八分厂"));
                        Vector V2=new Vector(8);
                               V2.addElement(new String("一车间"));
                               V2.addElement(new String("二车间"));
                               V2.addElement(new String("三车间"));
                               V2.addElement(new String("四车间"));
                               V2.addElement(new String("五车间"));
//----------------------------------------------------
 */
            		sg.SetHashtableKey(V);
	  	    	sg.SetDataSource(data);
			sg.SetbgColor(Color.white);//white);//底色
			sg.SetDisplayType(iType); //设置图形风格
			if (iWidth>0 && iHeight>0)
				sg.SetScreen(iWidth,iHeight,iMargin);//设置显示区域大小
			else
				sg.SetScreen(600,300,iMargin);//设置显示区域大小
			//sg.SetTitleFont(new Font("楷体_GB2312",Font.BOLD,24));//设置标题字体
			sg.SetTitle(sTitle); //设置标题
			sg.SetTitlefontcolor(Color.blue);//设置标题颜色
			sg.SetcooColor(Color.black); //坐标系(x轴y轴)颜色
			sg.SetlineColor(Color.black);//折线颜色
			//sg.SetCategoryFont(new Font("楷体_GB2312",Font.BOLD,18));//设置X轴标签字体
			sg.SetCategoryfontcolor(Color.blue);//设置X轴标签颜色
	  	        sg.SetCategory(strLabeltext,Labelleft,Labeltop); //设置X轴标签内容、位置
	  	        sg.Setxnodefontcolor(Color.black);//设置X轴节点字体的颜色
			//sg.Setxnodefont(new Font("楷体_GB2312",Font.BOLD,16));	//设置X轴节点字体
			//sg.SetValueFont(new Font("楷体_GB2312",Font.BOLD,18));//设置Y轴标题字体
			sg.SetValueFontcolor(Color.green);//设置Y轴标题颜色
	  	        //sg.Setynodefont(new Font("楷体_GB2312",Font.BOLD,16));//设置Y轴节点字体
			sg.Setynodefontcolor(Color.black);//设置Y轴节点字体、颜色
			sg.SetPieCenter(Arcleft,Arctop);//设置圆饼圆心
			sg.Setradius(ArcRadius);//半径
			sg.SetPieHeight(PieHigh);
			//boolean WriteNumeric=true;
			sg.SetWriteNumeric(bWriteNumeric);
			sg.SetSplitData(iSplit);
			sg.SetEffectCols(effectCols);
			//sg.SetPieFont(new Font("楷体_GB2312",Font.BOLD,14));//圆饼字体
	  		if (strExchangeXY.equals("true")){
		  		//if (iCols>2)
				//{
		  			sg.SetexistSeries(1);
		 			sg.SetHashtableKey2(V2);
		 		//}
		  		//else
				//{
		  			//sg.SetexistSeries(1);
					//sg.SetValue(root.getChildNodes().item(0).getChildNodes().item(1).getChildNodes().item(0).getNodeValue());//设置Y轴标题内容、位置
					//sg.SetHashtableKey2(V2);
		  		//}
			}
			else {
				if (iCols>2)
				{
		  			sg.SetexistSeries(1);
		 			sg.SetHashtableKey2(V2);
		 		}
		  		else
				{
		  			sg.SetexistSeries(0);
					sg.SetValue(root.getChildNodes().item(0).getChildNodes().item(1).getChildNodes().item(0).getNodeValue());//设置Y轴标题内容、位置
		  		}
			}
	  		sg.DrawGraph( out );//绘制输出
	 }
	 catch( Exception e ) {
	 	throw new ServletException( e );
	 }
	}
   }
   private String encodeTrans( String src, String encode ) {
      if( src == null ) return null;
      try {
         src = new String( src.getBytes( encode ), "gb2312" );
      }
      catch( Exception e ) {}
      return src;
   }
	private String Trans(String str1) {
			String sss="";
			try {
				byte [] by = str1.getBytes("8859_1");
				sss = new String(by,"UTF-8");
			}
			 catch( Exception e ) { }
			return sss;
	}
}
				 //Fontname="Dialog","SansSerif","Monospaced","Helvetica"
				 //"TimesRoman","Courier","DiagInput","ZapfDiagbats"
				 //Fonttype="Plain""Bold""Italic""BoldItalic"
				 //Fontsize="12", "14", "16", "18", "24", "36"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -