精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2004-06-15
事情是这样的: 偶最近在一个项目中, 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发送得中文参数呢?真的研究了很久,实在没办法了,呵呵,只要请教各位拉~~^_^ 谢谢先了~~~ 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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();; |
|
返回顶楼 | |
发表时间:2004-06-15
呵呵DLEE 说得办法我当然知道:)
可是我们的后台业务层是用值对象而不是XML 来传递数据的~~ 这样的话,我可能要把一些本就很简单的数据,包装成XML 传给 servlet servlet 再拆开XML ,对数据处理后填充值对象,比起直接传名值对,似乎显得有点多此一举?呵呵,也可能是我的想法比较肤浅拉~~:) 其实,我也准备实在不行就改用XML来传数据的了~~ 只是对xmlhttp传入的中文,到底是怎样编码,为什么和用form提交的会不同感到疑惑?~:( 请DLEE多多指教:) |
|
返回顶楼 | |
发表时间: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 中,写一个通用的封装函数也不过是举手之劳。 |
|
返回顶楼 | |
发表时间: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);; } } |
|
返回顶楼 | |
发表时间:2004-06-17
谢谢Dlee 和 andiyang :)
其实传XML返回server 得方法我也做过测试,调通过的:) 虽然大家用的XML类库都不同,但是殊途同归,呵呵~~ 正如Dlee 所说,我以前是偷了一下懒,没有用XML,不过现在已经决定改回XML了,规范一些于人于己都有好处:) 不过还是小小的偷了一个懒,依旧用的是struts 的DispatchAction,传入的参数分两部分,指定调用action中方法的部分,用get 方法带过去,真正需要处理的业务数据则是用post方法传XML 这样XML显得单纯些,DispatchAction 依然可以继续使用,呵呵,我还是比较懒的,可能又要挨Dlee批评了:) |
|
返回顶楼 | |
发表时间:2004-06-19
ieko 写道 这样XML显得单纯些,DispatchAction 依然可以继续使用,呵呵,我还是比较懒的,可能又要挨Dlee批评了:)
呵呵 ,take it easy,最适合你们的方法只有你自己才能找到。我没用过 Struts,所以不了解 DispatchAction。其实很多据说极为牛 x 的框架,包括 Hibernate、Struts、Spring、Tapestry、Webwork 等等我都没用过,我只会一些非常基础的东西。 |
|
返回顶楼 | |
发表时间:2004-06-20
^_^
其实我觉得所谓框架其实其核心也就是一种思想,或者说是一种开发模式,有些是你没想到的,有些是你也想到的,但是正好它把你的思想给实现了~ 大家都是靠脑吃饭的,大家也一定多少有些自己的开发理念,因此,我觉得,或者同样的框架,你觉得好,我未必觉得好,因人而异拉~~ 偶可能比较愚钝,没法按步照班的按照这些框架的“指引”来开发,我只想选一些自己能理解,自己愿意接受,让我感到“亲切”的^_^ 呵呵,比较白痴耶~~ 对与Struts 我一开始就觉得 Taglib 和 ActionBean 很别扭~ 所以,只用了和request dispacthing相关的咚咚 呵呵,只是看了dlee的话,胡乱说点感想,我还是没什么经验的 初哥, 哪儿说得不对,大家多包涵拉 |
|
返回顶楼 | |
发表时间:2004-06-21
dlee 写道 其实很多据说极为牛 x 的框架,包括 Hibernate、Struts、Spring、Tapestry、Webwork 等等我都没用过,我只会一些非常基础的东西。
:-) 唉,我總算看到與我想法相同的人了 我也是不想搞那些東東 前段時間試了一下Struts, 總是不怎么喜歡用這些東東 還是覺得搞java基礎的東東比較好玩,比較純粹 可是市場和職場又需要啊, 所以有時還得搞 ... |
|
返回顶楼 | |
发表时间: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就没了。。。 |
|
返回顶楼 | |