今天需要给系统添加一个解析硬件上送XML的功能,看了些相关的资料。有些帖子则说Struts没办法进行MXL交互。因此自己先做了测试,编写一个servlet:

protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException...{
charbuff[]=newchar[2048];
//System.out.println("xmlis:"+request.getParameter("xmlText"));
//System.out.println("xmlis:"+request.getAttribute("xmlText"));
BufferedReaderbufferedReader=request.getReader();
bufferedReader.reset();
bufferedReader.read(buff);
System.out.println("Datais: "+newString(buff));
}
如果去掉注释的两行的话,则读取的XML就行,反之不成。因此结论是如果取得了request的数据,那么就无法读取到请求的XML串。因此解决方式,将struts与form相关的配置省略,让struts不填充fromBean。例如:
<!--数据上送接口-->
<actionpath="/centigrade/saveRealTimeSensorData"
type="com.aherp.wtrs.app.action.BusinessAction"
scope="request">
<forwardname="success"path="/pages/common/blank.jsp"/>
</action>
此处action没有写name属性。那么struts也就不用去生成form填充了,那么也就不会去request.getParameter了。因此,在对应的action里:
BufferedReaderbufferedReader=request.getReader();
StringBufferstringBuffer=newStringBuffer("");
StringlineDatas=bufferedReader.readLine();
while(lineDatas!=null)...{
stringBuffer.append(lineDatas);
lineDatas=bufferedReader.readLine();
}
Documentdocument=DocumentHelper.parseText(stringBuffer.toString());
System.out.println(document.getRootElement().element("imei").getText());
System.out.println(document.getRootElement().element("temperature").getText());
也就拿到了对应的数据。也能够正常处理了。
更多思考:
如果要使用request.getReader话,那么request.getParameter也便无法读取数据。因此如果是页面要post表单对象和XML数据,那么就必须把XML数据放到表单对象里发送再进行处理。
本文探讨了如何在Struts框架中实现XML数据的接收与解析。通过调整配置避免Struts自动填充表单数据,利用servlet直接读取请求中的XML内容,并使用DOM4J进行解析。
864

被折叠的 条评论
为什么被折叠?



