论坛首页 Web前端技术论坛

请教一个关于XMLHTTP 与 Servlet 结合使用中 中文编码的问蘚\0...

浏览 12010 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-06-15  
请教各位DX一个关于xmlhttp 与 servlet 使用的问题~
事情是这样的:

偶最近在一个项目中,

UI层用XMLHTTP与后台通讯,用post方法
Content-Type 为 application/x-www-form-urlencoded
传送的数据是传统的webform数据,也就是&格开的名值对

Server端用的是Struts的DispatchAction,为xmlhttp发来的每一个请求做处理,返回为一XML字符串。

可是测试时发现,Server端无法解析xmlhttp发送过来的中文数据。
我在WEB页面中试过把 charset 改为 UTF-8 GB2312
Server端尝试设过request.setCharacterEncoding 为UTF-8 GB2312 GBK
也试过对getParameter取得得值用String.getByte 然后重编码

可是得到得总是 “???”

对于同一个Servlet,我写了一个测试页面,用form来提交数据,这时,只要设定相应得setCharacterEncoding,就可以顺利取到数据~~
之后又在xmlhttp里尝试设 request 得charset 还是不行

最后,总算发现,在web页面为GB2312时,在server端直接获取request.getInputStream() ,转为byte[] 后再用UTF-8,编码为String可以顺利得到传入得中文~~

科室,究竟应该如何通过getparameter 取得xmlhttp发送得中文参数呢?真的研究了很久,实在没办法了,呵呵,只要请教各位拉~~^_^

谢谢先了~~~
   发表时间:2004-06-15  
ieko 写道
科室,究竟应该如何通过getparameter 取得xmlhttp发送得中文参数呢?真的研究了很久,实在没办法了,呵呵,只要请教各位拉~~^_^

还是 form 提交的老思路。把参数都封装在 XML 中,后台得到 InputStream 后扔给 dom4j 处理就可以了。
SAXReader reader = new SAXReader();;
Document document = reader.read(is);;
......
//document 得到了,可以做你想做的任何事情了。不要告诉我你不知道什么叫 dom4j。
//例如:把 document 写入 XML 文件。
OutputFormat format = OutputFormat.createPrettyPrint();;
XMLWriter writer = new XMLWriter(new FileWriter("output.xml");, format);;
writer.write(document);;
writer.close();;
0 请登录后投票
   发表时间:2004-06-15  
呵呵DLEE 说得办法我当然知道:)

可是我们的后台业务层是用值对象而不是XML 来传递数据的~~

这样的话,我可能要把一些本就很简单的数据,包装成XML 传给 servlet
servlet 再拆开XML ,对数据处理后填充值对象,比起直接传名值对,似乎显得有点多此一举?呵呵,也可能是我的想法比较肤浅拉~~:)

其实,我也准备实在不行就改用XML来传数据的了~~

只是对xmlhttp传入的中文,到底是怎样编码,为什么和用form提交的会不同感到疑惑?~:(

请DLEE多多指教:)
0 请登录后投票
   发表时间:2004-06-15  
编码全部用 utf-8 就可以了。XML 头为:
<?xml version="1.0" encoding="utf-8"?>
还要调用一下:
xmlhttp.setRequestHeader("Content-Type","text/xml;charset=utf-8")
同样,后台 Servlet 的 service/doGet/doPost 方法中也要设置一下:
resp.setContentType("text/xml;charset=utf-8");

JS 和 Servlet 文件都保存为 utf-8 格式,编译也用 utf-8 编码。

别偷懒,就算都封装在 XML 中,写一个通用的封装函数也不过是举手之劳。
0 请登录后投票
   发表时间:2004-06-16  
/////////////////////////////
// XML Http Function      //
////////////////////////////
function postXmlDocument(sUri, xmlDoc); {
   var xmlHttp = XmlHttp.create();;
   var async = true;
   xmlHttp.open("POST", sUri, async);;
   xmlHttp.setRequestHeader("Content-Type","text/xml");;
   xmlHttp.setRequestHeader("charset","UTF-8");;
   xmlHttp.onreadystatechange = function (); {
      if (xmlHttp.readyState == 4);
         postHandleCallback(xmlHttp.responseText);; // responseXML : XmlDocument
   }
   xmlHttp.send(xmlDoc);;
}
Servlet端代码,只需要把xml流读进来,然后直接进行解析处理就可以了

  SAXReader xmlReader = new SAXReader();;
  InputStream in = ServletActionContext.getRequest();.getInputStream();;
  document = xmlReader.read(in);;

下面是对xml文档的遍历

for (Iterator i = root.elementIterator(modelName);; i.hasNext();;); {
    Element element = (Element); i.next();;
    Object entityIns = instanceModel(modelName);;
    Iterator subnodes = element.elementIterator();;
    while (subnodes.hasNext();); {
     Element subnode = (Element); subnodes.next();;
     dynamicPopulate(subnode.getName();, subnode.getText();, entityIns);;
    }

}
0 请登录后投票
   发表时间:2004-06-17  
谢谢Dlee 和 andiyang :)

其实传XML返回server 得方法我也做过测试,调通过的:)

虽然大家用的XML类库都不同,但是殊途同归,呵呵~~

正如Dlee 所说,我以前是偷了一下懒,没有用XML,不过现在已经决定改回XML了,规范一些于人于己都有好处:)

不过还是小小的偷了一个懒,依旧用的是struts 的DispatchAction,传入的参数分两部分,指定调用action中方法的部分,用get 方法带过去,真正需要处理的业务数据则是用post方法传XML

这样XML显得单纯些,DispatchAction 依然可以继续使用,呵呵,我还是比较懒的,可能又要挨Dlee批评了:)
0 请登录后投票
   发表时间:2004-06-19  
ieko 写道
这样XML显得单纯些,DispatchAction 依然可以继续使用,呵呵,我还是比较懒的,可能又要挨Dlee批评了:)

呵呵 ,take it easy,最适合你们的方法只有你自己才能找到。我没用过 Struts,所以不了解 DispatchAction。其实很多据说极为牛 x 的框架,包括 Hibernate、Struts、Spring、Tapestry、Webwork 等等我都没用过,我只会一些非常基础的东西。
0 请登录后投票
   发表时间:2004-06-20  
^_^
其实我觉得所谓框架其实其核心也就是一种思想,或者说是一种开发模式,有些是你没想到的,有些是你也想到的,但是正好它把你的思想给实现了~

大家都是靠脑吃饭的,大家也一定多少有些自己的开发理念,因此,我觉得,或者同样的框架,你觉得好,我未必觉得好,因人而异拉~~

偶可能比较愚钝,没法按步照班的按照这些框架的“指引”来开发,我只想选一些自己能理解,自己愿意接受,让我感到“亲切”的^_^ 呵呵,比较白痴耶~~

对与Struts 我一开始就觉得 Taglib 和 ActionBean 很别扭~ 所以,只用了和request dispacthing相关的咚咚

呵呵,只是看了dlee的话,胡乱说点感想,我还是没什么经验的 初哥, 哪儿说得不对,大家多包涵拉
0 请登录后投票
   发表时间:2004-06-21  
dlee 写道
其实很多据说极为牛 x 的框架,包括 Hibernate、Struts、Spring、Tapestry、Webwork 等等我都没用过,我只会一些非常基础的东西。


:-) 唉,我總算看到與我想法相同的人了
我也是不想搞那些東東
前段時間試了一下Struts, 總是不怎么喜歡用這些東東
還是覺得搞java基礎的東東比較好玩,比較純粹
可是市場和職場又需要啊, 所以有時還得搞
...
0 请登录后投票
   发表时间:2004-12-22  
dlee 写道
编码全部用 utf-8 就可以了。XML 头为:
<?xml version="1.0" encoding="utf-8"?>

请问,我用这个方法,为什么不行呢?
var node = doc.createProcessingInstruction("xml","version='1.0' encoding='UTF-8'"); 
alert一下doc.xml,只有version,后面的encoding就没了。。。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics