以前写过的一段测试代码: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的风格呵呵。往事如烟啊
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的风格呵呵。往事如烟啊
<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="确 定" onclick="formSubmit()" class="bottom3">
<input type="button" name="commit1" value="帮 助" 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>仅供参考。上传的数据格式现在已经记不清了。