Struts实现XML交互

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

  protected   void  doPost(HttpServletRequest request, HttpServletResponse response)  throws  ServletException, IOException  {
  
char buff[] = new char[2048];

//  System.out.println("xml is:"+ request.getParameter("xmlText"));
//  System.out.println("xml is:"+ request.getAttribute("xmlText"));
  
  BufferedReader bufferedReader 
= request.getReader();
  bufferedReader.reset();
  bufferedReader.read(buff);
  System.out.println(
"Data is: " + new String(buff));
 }



如果去掉注释的两行的话,则读取的XML就行,反之不成。因此结论是如果取得了request的数据,那么就无法读取到请求的XML串。因此解决方式,将struts与form相关的配置省略,让struts不填充fromBean。例如:

   <!--  数据上送接口  -->
  
< action  path ="/centigrade/saveRealTimeSensorData"
   type
="com.aherp.wtrs.app.action.BusinessAction"
   scope
="request" >
   
< forward  name ="success"  path ="/pages/common/blank.jsp"   />
  
</ action >


此处action没有写name属性。那么struts也就不用去生成form填充了,那么也就不会去request.getParameter了。因此,在对应的action里:

  BufferedReader bufferedReader  =  request.getReader();
  StringBuffer stringBuffer 
=   new  StringBuffer( "" );

  String lineDatas 
=  bufferedReader.readLine();
  
while (lineDatas  !=   null ) {
   stringBuffer.append(lineDatas);
   lineDatas 
= bufferedReader.readLine();
  }


  Document document 
=  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数据放到表单对象里发送再进行处理。

你可能感兴趣的:(xml,struts,servlet,String,action,Path)