使用XMLHTTP | ||||||
|
我想利用xmlhttp实现 以下功能:
客户端通过xmlhttp向servlet或jsp发送请求,并发送一个sql语句,然后由servlet接收并执行该sql语句,并产生一个结果集(resultset),并将该结果集转换成XML ( 一定要是XML的形式 )然后返回给客户端,由客户端的javascript进行解析,将数据显示在网页上。整个过程中,客户端的页面是不刷新的。
我对xmlhttp和xml不熟悉,所以麻烦能给出详细的代码,谢谢!!!!!
如果问题解决了,分不够再加啊
给你个例子,我刚测试通过:
客户端:
<html>
<head>
<script>
function Query()
{
var xmlDoc, OrderNode, poster, responseRoot;
xmlDoc=new ActiveXObject("Msxml.DOMDocument");
xmlDoc.loadXML("<?xml version=/"1.0/"?>"+
"<test>"+
"<sql>select name from test</sql>"+
"</test>");
poster=new ActiveXObject("Microsoft.XMLHTTP");
poster.open("POST","http://localhost:8088/XMLHTTPDemo/XMLServlet",false);
poster.send(xmlDoc);
if(poster.responseXML!=null)
{
for(var i=0;i<poster.responseXML.documentElement.childNodes.length;i++)
{
document.writeln(poster.responseXML.documentElement.childNodes(i).text);
}
}
else
alert("error!");
}
</script>
</head>
<body>
<input type="Button" value="Test" οnclick="Query();">
</body>
</html>
服务端(servelet)
package tt.com;
import java.io.*;
import java.sql.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
public class XMLServlet extends HttpServlet
{
@Override
protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException
{
try
{
InputStream is=arg0.getInputStream();
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document doc=builder.parse(is);
Element root=doc.getDocumentElement();
String sql=root.getFirstChild().getTextContent();
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://XIAOHUASZ//XIAOHUASZ;DatabaseName=XHBookShop";
String user="xiaohua";
String password="";
Connection conn=DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(sql);
arg1.setContentType("text/xml");
PrintWriter out=arg1.getWriter();
out.println("<?xml version=/"1.0/"?><test>");
while(rs.next())
{
String s1=rs.getString(1);
out.println("<name>"+s1+"</name>");
}
out.println("</test>");
rs.close();
stmt.close();
conn.close();
out.close();
}
catch(Exception e){e.printStackTrace();}
}
}