转贴地址:http://blog.csdn.net/dxmdxs/archive/2006/03/23/636170.aspx
http://blog.csdn.net/crackcell/archive/2007/09/03/1769654.aspx
解决JavaScript 与Servlet之间的通讯.通过测试,得出如下代码不会出现中文问题,当然这断代码有很多不足之处,或许是巧合.由此,系统可以通过JavaScript直接访问JavaBeans 读取数据库的记录并进行操作.
JavaScript代码如下:
URL=
"http://localhost:8080/xml/servlet/xml"
function
SendXML()
{
xmlhttp=
new
ActiveXObject(
"Microsoft.XMLHTTP"
);
xmlhttp.Open(
"GET"
,URL,
false
);
xmlhttp.setRequestHeader(
"Charset"
,
"gb2312"
);
xmlhttp.send(
"
唯思
"
);
//
测试发送是否成功
?
if
( xmlhttp.status == 200 )
{
alert(xmlhttp.responseText);
} else{
alert(
"
服务器错误
,
状态代码
:"
+xmlhttp.status+
",
原因
:"
+xmlhttp.reason);
}
}
Servlet
代码如下:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class xml extends HttpServlet {
public xml() {
super();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.print(request.getReader().readLine());
out.flush();
out.close();
}
}
解决
JavaScript
通过
XML
与
Servlet
之间的通讯
.
即可以传递一个
XMLDOM
交给
Servlet
进行处理
.
JavaScript
源代码如下
:
<
script
>
URL=
"http://localhost:8080/xml/servlet/xml"
var
xml=
"<?xml version='1.0' encoding='utf-8'?><root>
唯思
</root>"
function
SendXML()
{
xmlhttp=
new
ActiveXObject(
"Microsoft.XMLHTTP"
);
xmlhttp.Open(
"POST"
,URL,
false
);
xmlhttp.setRequestHeader(
"charset"
,
"utf-8"
);
xmlDoc =
new
ActiveXObject(
"Microsoft.XMLDOM"
);
xmlDoc.async=
"false"
;
xmlDoc.loadXML(xml);
xmlhttp.send(xmlDoc);
//
测试发送是否成功
?
if
( xmlhttp.status == 200 )
{
//alert(SendMessage);
xmlDoc.loadXML(xmlhttp.responseText); document.getElementById(
"ws"
).innerHTML=xmlDoc.selectSingleNode(
"/root"
).text;
} else
{
alert(
"
服务器错误
,
状态代码
:"
+xmlhttp.status+
",
原因
:"
+xmlhttp.reason);
}
}
</
script
>
Servlet
代码如下
:
public class xml extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
Document doc;
try {
doc = factory.newDocumentBuilder().parse(request.getInputStream());
DOMSource source = new DOMSource(doc);
Result result = new StreamResult(out);
Transformer xformer = TransformerFactory.newInstance()
.newTransformer();
xformer.transform(source, result);
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
} catch (TransformerFactoryConfigurationError e) {
e.printStackTrace();
}
out.flush();
out.close();
}
}
测试结果
:
唯思
.
由此
,
我们可以通过
javax.xml.parsers
和
org.w3c.dom
在
Servlet
内部解析
XML
并将所要求的请求发送到
Hibernate
操作
MySQL
实现更方便快速的进行查询及更改
.
注意
: 1.
在写
JavaScript
验证的时候
,
并不能完全代替后台的数据验证
,
这是因为攻击者完全可以伪造浏览进行非法递交
.
对于安全非常重要的环节
,
绝对不可以忽略这一点
. 2.
在写
JavaScript
生成
XML
于
Servlet
进行通讯的时候
,
当递交和返回都含有整个数据库的内容时
,
此方法并不可取
.
这是因为
,
当需求发生更改时
,
将导致大理代码的修改
.
所以
,
此方法只比较合适用于简单操作上
,
如用户名是否重复
,
删除某一用户等
,
只需要简单数据
,
并且这些数据的变更非常小
.