CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  企业开发 >  Lotus

【原创】实现POST方法往代理内传输大容量数据

楼主ChinaMake2008(Notes)2005-07-02 10:48:34 在 企业开发 / Lotus 提问

昨天终于在朋友以及自己的努力下完成了POST方式的中文数据传输,实在非常开心,在此我特地来发贴分享一下我的成果,呵呵~~希望大家喜欢  
  第一、介绍一下我所用的语言为javascript、java  
  第二、POST调用代理的模式,代码如下:  
  if(document.all.ACTIVITYOS.value   ==   "提案申请")  
  {  
  var   DataString   =   CaseCheckNullData();  
   
  /*----------------------------------------------------------------------------------------------------------------*/  
  /*主要用于定义ActiveX控件Microsoft.XMLHTTP进行数据上传  
  /*----------------------------------------------------------------------------------------------------------------*/  
  try  
  {  
  var   XmlHttp   =   new   ActiveXObject("Microsoft.XMLHTTP");  
  }  
  catch(E){}  
   
  if(DataString   !=   "")  
  {  
  /*----------------------------------------------------------------------------------------------------------------*/  
  /*主要用于上传数据  
            /*----------------------------------------------------------------------------------------------------------------*/  
  if(XmlHttp   ==   null)  
  {  
  alert("你未曾开启ActiveX控制,请迅速与资讯联系!");  
  }  
  else  
  {  
  /*-----------------------------------------------------------------------------------------------------------*/  
  /*主要用于数据上传  
  /*-----------------------------------------------------------------------------------------------------------*/  
  var   url   =   "http://192.168.1.10/data3/applicat.nsf/ShowMessage?OpenForm";  
   
  XmlHttp.Open('POST',"http://192.168.1.10/data5/ResCaseA.nsf/ResWrDataIn?OpenAgent",false);  
  XmlHttp.Send(escape(DataString));  
   
  window.showModalDialog(url,"","dialogWidth:300px;dialogHeight:1px;center:yes;status:no;help:no");  
   
  var   ResVal   =   XmlHttp.responseText.split("_|_");  
  document.all.CaseNum.value   =   ResVal[1];  
  }  
   
  LWFActivityComplete("",true,"","")  
  /*----------------------------------------------------------------------------------------------------------------*/  
  }  
  }  
  从上面的代码可以清晰的看到利用XmlHttp的POST方式调用代理,然后利用SEND来进行数据的传输,不过由于是中文,传输前需要用函数escape进行数据编码,然后只需要在代理当中进行解码就可以获取到相应的中文,在文档之中需要加入CGI域Request_Content,用于接受send过来的数据  
  (二楼讲解JAVA代理) 问题点数:0、回复次数:15Top

1 楼ChinaMake2008(Notes)回复于 2005-07-02 10:51:38 得分 0

代理里面有分为两段,第一段是代理的主体用于分析数据传输后台,代码如下:  
  /////////////////////////////////////  
  //提案系统申请数据提交代理  
  /////////////////////////////////////  
  import   lotus.domino.*;  
  import   java.io.*;  
  import   java.sql.*;  
  import   java.util.Vector;  
  import   java.lang.String;  
  import   java.lang.Integer;  
  import   java.lang.*;  
  import   java.util.*;  
   
  public   class   JavaAgent   extends   AgentBase  
  {  
   
  public   void   NotesMain()  
  {  
   
  try  
  {  
  Session   session   =   getSession();  
  AgentContext   agentContext   =   session.getAgentContext();  
   
  //-----------------------------添加自己编写的代码-----------------------------//  
  /*-------------------------------         定义文档变量         -------------------------------*/  
  PrintWriter   out   =   getAgentOutput();  
  Document   udoc   =   agentContext.getDocumentContext();  
   
  /*-------------------------------         处理传入字串         -------------------------------*/  
  //String   DataXml   =   udoc.getItemValueString("Query_String_Decoded");  
  String   DataTest   =   Escape.unescape(udoc.getItemValueString("Request_Content"));  
   
  //System.out.println(DataTest);  
  //int   index   =   DataXml.indexOf("=");  
  //DataXml   =   DataXml.substring(index   +   1,DataXml.length());  
  //System.out.println(DataXml);  
  Vector   ResStrlist   =   new   Vector();  
  ResStrlist   =   Get_Div_StrList(DataTest,"_|_");  
  //ResStrlist   =   Get_Div_StrList(DataXml,"_|_");  
   
  /*--------------------------------           连接数据库         -------------------------------*/  
                /*--------------------------------             注册驱动           -------------------------------*/  
            DriverManager.registerDriver(new   org.gjt.mm.mysql.Driver());  
             
            /*--------------------------------             URL链接             -------------------------------*/  
            String   url   =   "jdbc:mysql://127.0.0.1:3306/ghscase?useUnicode=true&characterEncoding=gb2312";  
             
            /*-------------------------------       MYSQL数据库链接     -------------------------------*/  
            java.sql.Connection   con=java.sql.DriverManager.getConnection(url,"developer","MarketNetwork");  
            java.sql.Statement   stmt=con.createStatement();  
             
            String   ResNum   =   ResStrlist.elementAt(0).toString();  
            String   ResName   =   ResStrlist.elementAt(1).toString();  
            String   ResDate   =   ResStrlist.elementAt(2).toString();  
            String   ResEmp   =   ResStrlist.elementAt(3).toString();  
            String   ResUser   =   ResStrlist.elementAt(4).toString();  
            String   Proposer   =   ResStrlist.elementAt(5).toString();  
            String   ResTel   =   ResStrlist.elementAt(6).toString();  
            String   ResDept   =   ResStrlist.elementAt(7).toString();  
            String   ResTang   =   ResStrlist.elementAt(8).toString();  
            String   ResNowThing   =   ResStrlist.elementAt(9).toString();  
             
            String   ResMendPro   =   ResStrlist.elementAt(10).toString();  
            String   ResAffix   =   ResStrlist.elementAt(11).toString();  
            String   ResDeDept   =   ResStrlist.elementAt(12).toString();  
            //String   NowDate   =   udoc.getItemValueString("NowDate");  
            System.out.println(ResNowThing);  
            System.out.println(ResMendPro);  
            String   sql   =   "select   *   from   ResDataBase   where   ResNum   =   '"   +   ResNum   +   "'";  
          java.sql.ResultSet   rs=stmt.executeQuery(sql);  
           
          String   CycNum   =   "";  
  int   CycLen   =   0;  
   
          if(rs.next()   ==   true)  
          {  
          sql   =   "";  
          int   ret   =   stmt.executeUpdate(sql);  
          }  
          else  
          {  
          /*如果数据重没有进行过提交则进行数据提交*/  
          /*获取提案编号*/  
          sql   =   "select   *   from   CaseCycNum";  
          rs=stmt.executeQuery(sql);  
           
          while(rs.next())  
          {  
          ResNum   =   ResDate.substring(0,4)+ResDate.substring(5,7)+rs.getString("CycNum");  
          CycNum   =   rs.getString("CycNum");  
          CycNum   =   Integer.toString((Integer.parseInt(CycNum)+1));  
          }  
          //udoc.replaceItemValue("CaseNum",ResNum);  
           
          /*更新数据库中的参数变量*/  
          CycLen   =   CycNum.length();  
           
          switch   (CycLen)  
                                          {  
  case   1:  
  CycNum   =   "000"   +   CycNum;  
  break;  
   
  case   2:  
  CycNum   =   "00"   +   CycNum;  
  break;  
   
                                                    case   3:  
  CycNum   =   "0"   +   CycNum;  
                                                              break;  
                                          }  
   
  sql   =   "update   CaseCycNum   set   CycNum   =   '"   +   CycNum   +   "'";  
  int   ret   =   stmt.executeUpdate(sql);  
   
  /*导入单据中的数据*/  
  sql   =   "insert   into   ResDataBase(ResNum,ResName,ResDate,ResEmp,ResUser,Proposer,ResTel,ResDept,ResTang,ResNowThing,ResMendPro,ResAffix,ResDeDept)   values   ('"+ResNum+"','"+ResName+"','"+ResDate+"','"+ResEmp+"','"+ResUser+"','"+Proposer+"','"+ResTel+"','"+ResDept+"','"+ResTang+"','"+ResNowThing+"','"+ResMendPro+"','"+ResAffix+"','"+ResDeDept+"')";  
  ret   =   stmt.executeUpdate(sql);  
   
  out.println("_|_"+ResNum+"_|_");  
          }  
  }  
  catch(Exception   e)  
  {  
  e.printStackTrace();  
  }  
  }  
   
  /*---------------------------------------------------------------------------------------------------------*/  
  /*代理子函数列表*/  
  /*---------------------------------------------------------------------------------------------------------*/  
  /*函数名:   Get_Div_StrList----------------------------------------------------------------------------------*/  
  /*用于获取分割后的数组-------------------------------------------------------------------------------------*/  
  /*---------------------------------------------------------------------------------------------------------*/  
            public   Vector   Get_Div_StrList(String   StrList,String   Mark)  
  {  
  //用于存放返回值的字符串数组  
  Vector   ResStrlist   =   new   Vector();  
   
  //备用字符串  
  String   curstr   =   "";  
   
  //状态位(起始位置)  
  int   index   =   0;  
   
  StrList   =   StrList.trim();  
   
  //获取"="位置  
  index   =   StrList.indexOf(Mark);  
   
  //循环取得"="前的数据  
  while(index   >=   0)  
  {  
  curstr   =   StrList.substring(0,index);  
                            StrList   =   StrList.substring(index   +   3,StrList.length());  
  ResStrlist.addElement(curstr);  
  index   =   StrList.indexOf(Mark);  
  }  
  ResStrlist.addElement(StrList);  
   
  return   ResStrlist;  
  }  
  }Top

2 楼ChinaMake2008(Notes)回复于 2005-07-02 10:51:52 得分 0

第二段代码是进行中文数据编码解码,代码如下:  
  public   class   Escape   {  
          private   final   static   String[]   hex   =   {  
                  "00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F",  
                  "10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F",  
                  "20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F",  
                  "30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F",  
                  "40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F",  
                  "50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F",  
                  "60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F",  
                  "70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F",  
                  "80","81","82","83","84","85","86","87","88","89","8A","8B","8C","8D","8E","8F",  
                  "90","91","92","93","94","95","96","97","98","99","9A","9B","9C","9D","9E","9F",  
                  "A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","AA","AB","AC","AD","AE","AF",  
                  "B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","BA","BB","BC","BD","BE","BF",  
                  "C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","CA","CB","CC","CD","CE","CF",  
                  "D0","D1","D2","D3","D4","D5","D6","D7","D8","D9","DA","DB","DC","DD","DE","DF",  
                  "E0","E1","E2","E3","E4","E5","E6","E7","E8","E9","EA","EB","EC","ED","EE","EF",  
                  "F0","F1","F2","F3","F4","F5","F6","F7","F8","F9","FA","FB","FC","FD","FE","FF"  
          };  
          private   final   static   byte[]   val   =   {  
                  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,  
                  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,  
                  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,  
                  0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,  
                  0x3F,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,  
                  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,  
                  0x3F,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,  
                  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,  
                  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,  
                  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,  
                  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,  
                  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,  
                  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,  
                  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,  
                  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,  
                  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F  
          };  
          public   static   String   escape(String   s)   {  
                  StringBuffer   sbuf   =   new   StringBuffer();  
                  int   len   =   s.length();  
                  for   (int   i   =   0;   i   <   len;   i++)   {  
                          int   ch   =   s.charAt(i);  
                          if   (ch   ==   '   ')   {                                                 //   space   :   map   to   '+'    
                                  sbuf.append('+');  
                          }   else   if   ('A'   <=   ch   &&   ch   <=   'Z')   {         //   'A'..'Z'   :   as   it   was  
                                  sbuf.append((char)ch);  
                          }   else   if   ('a'   <=   ch   &&   ch   <=   'z')   {         //   'a'..'z'   :   as   it   was  
                                  sbuf.append((char)ch);  
                          }   else   if   ('0'   <=   ch   &&   ch   <=   '9')   {         //   '0'..'9'   :   as   it   was  
                                  sbuf.append((char)ch);  
                          }   else   if   (ch   ==   '-'   ||   ch   ==   '_'               //   unreserved   :   as   it   was  
                                  ||   ch   ==   '.'   ||   ch   ==   '!'  
                                  ||   ch   ==   '~'   ||   ch   ==   '*'  
                                  ||   ch   ==   '\''   ||   ch   ==   '('  
                                  ||   ch   ==   ')')   {  
                                  sbuf.append((char)ch);  
                          }   else   if   (ch   <=   0x007F)   {                             //   other   ASCII   :   map   to   %XX  
                                  sbuf.append('%');  
                                  sbuf.append(hex[ch]);  
                          }   else   {                                                                 //   unicode   :   map   to   %uXXXX  
                                  sbuf.append('%');  
                                  sbuf.append('u');  
                                  sbuf.append(hex[(ch   >>>   8)]);  
                                  sbuf.append(hex[(0x00FF   &   ch)]);  
                          }  
                  }  
                  return   sbuf.toString();  
          }  
          public   static   String   unescape(String   s)   {  
                  StringBuffer   sbuf   =   new   StringBuffer();  
                  int   i   =   0;  
                  int   len   =   s.length();  
                  while   (i   <   len)   {  
                          int   ch   =   s.charAt(i);  
                          if   (ch   ==   '+')   {                                                 //   +   :   map   to   '   '    
                                  sbuf.append('   ');  
                          }   else   if   ('A'   <=   ch   &&   ch   <=   'Z')   {         //   'A'..'Z'   :   as   it   was  
                                  sbuf.append((char)ch);  
                          }   else   if   ('a'   <=   ch   &&   ch   <=   'z')   {         //   'a'..'z'   :   as   it   was  
                                  sbuf.append((char)ch);  
                          }   else   if   ('0'   <=   ch   &&   ch   <=   '9')   {         //   '0'..'9'   :   as   it   was  
                                  sbuf.append((char)ch);  
                          }   else   if   (ch   ==   '-'   ||   ch   ==   '_'               //   unreserved   :   as   it   was  
                                  ||   ch   ==   '.'   ||   ch   ==   '!'  
                                  ||   ch   ==   '~'   ||   ch   ==   '*'  
                                  ||   ch   ==   '\''   ||   ch   ==   '('  
                                  ||   ch   ==   ')')   {  
                                  sbuf.append((char)ch);  
                          }   else   if   (ch   ==   '%')   {  
                                  int   cint   =   0;  
                                  if   ('u'   !=   s.charAt(i+1))   {                   //   %XX   :   map   to   ascii(XX)  
                                          cint   =   (cint   <<   4)   |   val[s.charAt(i+1)];  
                                          cint   =   (cint   <<   4)   |   val[s.charAt(i+2)];  
                                          i+=2;  
                                  }   else   {                                                         //   %uXXXX   :   map   to   unicode(XXXX)  
                                          cint   =   (cint   <<   4)   |   val[s.charAt(i+2)];  
                                          cint   =   (cint   <<   4)   |   val[s.charAt(i+3)];  
                                          cint   =   (cint   <<   4)   |   val[s.charAt(i+4)];  
                                          cint   =   (cint   <<   4)   |   val[s.charAt(i+5)];  
                                          i+=5;  
                                  }  
                                  sbuf.append((char)cint);  
                          }  
                          i++;  
                  }  
                  return   sbuf.toString();  
          }  
          public   static   void   main(String[]   args)   {  
                  String   stest   =   "中文1234   abcd[]()<+>,.~\\";  
                  System.out.println(stest);  
                  System.out.println(escape(stest));  
                  System.out.println(unescape(escape(stest)));  
          }  
  }Top

3 楼ChinaMake2008(Notes)回复于 2005-07-02 10:56:12 得分 0

最后说明一下   如何你想数据量传输的很大   需要在服务器端配置一下POST的容量大小   呵呵~~    
  全文到此结束   希望大家喜欢   如果有什么不理解   可以来我的QQ群   群号:3481206Top

4 楼zengxianfeng(冲星中......)回复于 2005-07-04 09:05:36 得分 0

顶Top

5 楼kingchang2000(骠骑大将)回复于 2005-07-04 11:25:58 得分 0

喜欢,很不错。学习学习。Top

6 楼chenzb(long long ago)回复于 2005-07-04 14:44:55 得分 0

解码好像可以这样吧:  
  在web上,通过js函数,对中文的内容进行编码  
  在服务器中,直接使用公式@urldecode(.......)进行解码Top

7 楼simware(菜包子)回复于 2005-07-05 14:05:02 得分 0

哦Top

8 楼firewangcool(fire)回复于 2005-07-05 15:58:55 得分 0

学习,顶!Top

9 楼fanyufanyu(反语)回复于 2005-07-06 13:16:35 得分 0

学习,此贴我收藏了。Top

10 楼kcw(黑黑)回复于 2005-07-06 13:16:40 得分 0

台湾同胞吧。Top

11 楼tottilou(阿飞)回复于 2005-07-22 13:16:22 得分 0

@urldecode(.......)这个公式有字符限制,好像不能超过512个字节,这个公式里面的限制!!Top

12 楼tnda(虎头)回复于 2005-07-22 13:50:11 得分 0

楼主,为啥不用java.net.URLDecoder,这个类,而要自己写?Top

13 楼tnda(虎头)回复于 2005-07-22 14:20:10 得分 0

哦,我测试了下,发现楼主是用js的UNCODE编码   加密算法,和java.net.URLEncoder不一样  
  所以不能使用java.net.URLDecoder解密  
   
  不过楼主的解密方法有问题,  
  如果源码里面包括“/”字符,则无法解密  
   
  ss   =   "中文1234   abcd[]()<+>,.~\\aaa/";  
  ss1   =   escape(ss)  
  document.forms[0].aaaa.value   =   ss1;  
   
  这个是JS加密后的字符:%u4E2D%u65871234%20abcd%5B%5D%28%29%3C+%3E%2C.%7E%5Caaa/  
  说明JS加密时,“/”是不加密的,  
   
  而使用楼主的类解密时:会丢失“/”这个字符,  
  解码后的字符为:中文1234   abcd[]()<   >,.~\aaa  
   
  如果用楼主自己的加密算法加密,再解密,则没有问题,  
   
  Top

14 楼tnda(虎头)回复于 2005-07-22 14:31:54 得分 0

我发现你使用  
  //String   DataXml   =   udoc.getItemValueString("Query_String_Decoded");  
  也完全可以自动解码,而没有任何错误,不需要自己写解码算法,  
   
  不知道你为啥不用,也许你认为URL的长度有限制而不好用吧  
   
  Top

15 楼chenyg2000(从心开始)回复于 2005-07-23 00:53:26 得分 0

支持一下Top

相关问题

  • 寻求http的post传输封装类,用于XML的传输
  • 代理传输中文字符出现乱码问题!我出100分,在线等候...
  • 各位老大,关于POST/GET数据传输问题?
  • 谁了解post传输方式,进来帮我一下
  • 如何用Post方式传输 Xml文件
  • 传输文件
  • socket传输
  • 文件传输
  • 串口传输?
  • 传输文件???

关键词

  • .net
  • 数据
  • post
  • xmlhttp

得分解答快速导航

  • 帖主:ChinaMake2008

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo