解决JavaScript 与Servlet之间的通讯

转贴地址: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 进行通讯的时候 , 当递交和返回都含有整个数据库的内容时 , 此方法并不可取 . 这是因为 , 当需求发生更改时 , 将导致大理代码的修改 . 所以 , 此方法只比较合适用于简单操作上 , 如用户名是否重复 , 删除某一用户等 , 只需要简单数据 , 并且这些数据的变更非常小 .
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值