以前写过的一段测试代码:test.java
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
import java.util.*;
public class  test extends HttpServlet
{
public String readData(HttpServletRequest req)     throws IOException
{
StringBuffer xml = new StringBuffer("");
try
{
BufferedReader tmpbr = req.getReader();
if (req.getContentLength()>0)
{
int tmp = ' ';char ch=0;
while (tmp !=-1)
{
tmp = tmpbr.read();
if (tmp==-1)
break;
ch = (char)tmp;
xml.append(ch);
}
}
else
xml = new StringBuffer("");
}
catch (Exception e)
{
e.printStackTrace();
xml = new StringBuffer("<tag>0</tag><msg>服务器端接收数据出错</msg>");
}
return xml.toString();
}
public static String  escape (String src)
{
int i;
char j;
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length()*6);
for (i=0;i<src.length() ;i++ )
{
j = src.charAt(i);
if (Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j))
tmp.append(j);
else if (j<256)
{
tmp.append( "%" );
if (j<16)
tmp.append( "0" );
tmp.append( Integer.toString(j,16) );
}
else
{
tmp.append( "%u" );
tmp.append( Integer.toString(j,16) );
}
}
return tmp.toString();
} public static String  unescape (String src)
{
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length());
int  lastPos=0,pos=0;
char ch;
while (lastPos<src.length())
{
pos = src.indexOf("%",lastPos);
if (pos == lastPos)
{
if (src.charAt(pos+1)=='u')
{
ch = (char)Integer.parseInt(src.substring(pos+2,pos+6),16);
tmp.append(ch);
lastPos = pos+6;
}
else
{
ch = (char)Integer.parseInt(src.substring(pos+1,pos+3),16);
tmp.append(ch);
lastPos = pos+3;
}
}
else
{
if (pos == -1)
{
tmp.append(src.substring(lastPos));
lastPos=src.length();
}
else
{
tmp.append(src.substring(lastPos,pos));
lastPos=pos;
}
}
}
return tmp.toString();
} public void service(HttpServletRequest request, HttpServletResponse respond) throws ServletException,IOException
{
String srcData = unescape(readData(request));
System.out.println("接收到如下数据:"+srcData);
String[] t = srcData.split(";");
String[][] tt = new String[t.length][];
for (int i=0;i<t.length;i++)
{
System.out.println(t[i]);
tt[i] = t[i].split(",");
}
for (int i=0;i<tt.length;i++)
{
System.out.println();
for (int j=0;j<tt[i].length;j++)
System.out.print(tt[i][j]+"\t");
}
respond.getWriter().println(escape("<tag>1</tag><msg>接收成功</msg>"));
}
}
注意,为了解决汉字编码问题,在发送前都做了escape:respond.getWriter().println(escape("<tag>1</tag><msg>接收成功</msg>"));而接受到数据之后则首先做unescape:String srcData = unescape(readData(request));接受数据主要是这段:BufferedReader tmpbr = req.getReader();
if (req.getContentLength()>0)
{
int tmp = ' ';char ch=0;
while (tmp !=-1)
{
tmp = tmpbr.read();
if (tmp==-1)
break;
ch = (char)tmp;
xml.append(ch);
}
}
当时从vb转java不久,用的缩进对齐还是vb的风格呵呵。往事如烟啊

解决方案 »

  1.   

    和上面代码对应的b端代码如下:<html>
    <head><link rel="stylesheet" href="/jsp/css/td.css" type="text/css">
    <title>资料导入向导</title>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function XMLHTTP(URL,srcString)
    {
    var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    var strUrl = URL.replace(/%/g,"%25");
    xmlhttp.Open("POST",strUrl, false);
    var result = "";
    try
    {
    xmlhttp.Send(escape(srcString));
    result = unescape(xmlhttp.responseText)
    }
    catch (e)
    {
    alert ("无法找到服务器!");
    }
    return result;
    }
    function String.prototype.searchXMLstring(searchfor,index)
    {
    if (index == null || index ==0) index =1;
    // index从1开始
    var start="<"+searchfor+">";
    var end="</"+searchfor+">";
    var a=0;
    var b=0;
    for (var i=0;(i<index && a>-1 && b>-1) ;i++ )
    {
    a=this.indexOf(start,b);
    b=this.indexOf(end,a);
    }
    if (a<0 || b<0) 
    {
    return "notfound";
    }
    a+=start.length;
    return this.substring(a,b);
    }function formSubmit()
    {
    var s = unescape("%0D%0A");
    var r = new RegExp(s,"g")
    var str =  datas.value.replace(r,";").replace(/\t/g,",")
    var src=XMLHTTP("http://localhost:8080/servlet/test",str);
    var tag=src.searchXMLstring('tag')
    var msg=src.searchXMLstring('msg')
    alert(msg);
    }//-->
    </SCRIPT>
    </head><body bgcolor="#FFFFFF" text="#000000">
    <p class="function" align="center">资料导入向导</p>
      <table bgColor=#FFFFFF border=0 cellPadding=3 cellSpacing=1 align="center">
      <tbody bgcolor="efefef">
        <tr>
          <td>
    <textarea cols=90 rows=10 id="datas">lkjh lkjh lkjh kljh ljkh lkjh
    423 654 564 654 564 654
    423 654 564 654 564 654
    423 654 564 654 564 654
    </textarea>
          </td>
        </tr>
      </tbody>
      <tbody bgcolor="f5915a" align=center>
        <tr>
          <td>
                <input type="button" name="commit" value="确&nbsp;定"  onclick="formSubmit()" class="bottom3"> &nbsp; &nbsp; &nbsp;
                <input type="button" name="commit1" value="帮&nbsp;助"  class="bottom3" onclick="window.open('/jsp/help/h_file.html')">
          </td>
        </tr>
    </tbody>
      <tbody bgcolor="efefef">
        <tr>
          <td>错误信息:<BR>
    <textarea cols=90 rows=10 id=error></textarea>
          </td>
        </tr>
      </tbody>
      </table>
    </body>
    </html>仅供参考。上传的数据格式现在已经记不清了。