黑马程序员技术交流社区

标题: Adroid与SSH框架服务器通信方式 [打印本页]

作者: 别想太多    时间: 2015-5-23 21:47
标题: Adroid与SSH框架服务器通信方式

1、Android获取SSH框架服务器JSP文件内容

可以通过HttpClient,然后用HtmlParser去解析想要的内容。其中getCommentData(String url),url为想要抓取的页面地址。

注意:往往获取网页内容时,格式为UTF-8,直接拿数据时,往往会是“ <”格式,这时候需要通过StringEscapeUtils.unescapeHtml()处理。

  1. package support;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.IOException;  
  5. import java.io.InputStream;  
  6. import java.io.InputStreamReader;  
  7. import java.util.ArrayList;  
  8. import java.util.HashMap;  
  9. import java.util.List;  
  10. import java.util.Map;  
  11.   
  12. import logic.MainService;  
  13.   
  14. import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;  
  15. import org.apache.commons.httpclient.HttpException;  
  16. import org.apache.commons.httpclient.HttpStatus;  
  17. import org.apache.commons.httpclient.methods.PostMethod;  
  18. import org.apache.commons.httpclient.params.HttpMethodParams;  
  19. import org.apache.commons.lang.StringEscapeUtils;  
  20. import org.apache.http.HttpEntity;  
  21. import org.apache.http.HttpResponse;  
  22. import org.apache.http.client.methods.HttpGet;  
  23. import org.htmlparser.Node;  
  24. import org.htmlparser.NodeFilter;  
  25. import org.htmlparser.Parser;  
  26. import org.htmlparser.filters.AndFilter;  
  27. import org.htmlparser.filters.HasAttributeFilter;  
  28. import org.htmlparser.filters.TagNameFilter;  
  29. import org.htmlparser.util.NodeList;  
  30. import org.htmlparser.util.ParserException;  
  31. import org.htmlparser.util.SimpleNodeIterator;  
  32.   
  33. public class CommentData {  
  34.     private List<Map<String, String>> placedatalist ;  
  35.       
  36.     public List<Map<String, String>> getPlacedatalist() {  
  37.         return placedatalist;  
  38.     }  
  39.     public void setPlacedatalist(List<Map<String, String>> placedatalist) {  
  40.         this.placedatalist = placedatalist;  
  41.     }  
  42.     private String getNoAHref(String source){  
  43.         return source.substring(source.indexOf("\"", source.indexOf("href"))+1, source.lastIndexOf("\""));  
  44.     }  
  45.       
  46.     private String getAImageSrc(String source){  
  47.         return source.substring(source.indexOf("\"", source.indexOf("src"))+1, source.lastIndexOf("\""));  
  48.     }  
  49.     public List<Map<String, String>> getCommentData(String url) throws ParserException{  
  50.         placedatalist= new ArrayList<Map<String, String>>();  
  51.          
  52.         HttpGet get=new HttpGet(url);  
  53.         try{   
  54.             HttpResponse httpReponse=MainService.guiji.getHttpClient().execute(get);  
  55.               HttpEntity entity=httpReponse.getEntity();  
  56.                
  57.               BufferedReader br = new BufferedReader(new InputStreamReader(entity.getContent(),"utf-8"));  
  58.               String line = null;  
  59.               String webcontent="";  
  60.               while ((line = br.readLine()) != null)  
  61.               {  
  62.                   webcontent+=line;  
  63.               }  
  64.               br.close();  
  65.                
  66.               Parser parser=new Parser(webcontent);  
  67.               NodeFilter filter1 = new TagNameFilter("table");   
  68.               NodeFilter filter2 = new HasAttributeFilter("id","idcomment");   
  69.               NodeFilter filter = new AndFilter(filter1,filter2);   
  70.               NodeList nodes = parser.extractAllNodesThatMatch(filter);  
  71.               SimpleNodeIterator iterator = nodes.elements();  
  72.               while (iterator.hasMoreNodes()) {  
  73.                   Map<String, String> datamap = new HashMap<String, String>();  
  74.                   datamap.put("userlogo", null);  
  75.                   datamap.put("userlink", null);  
  76.                   datamap.put("idmsgcontent", null);  
  77.                   datamap.put("idmsgpic", null);  
  78.                   datamap.put("idtime", null);  
  79.                   datamap.put("idplace", null);  
  80.                   datamap.put("iddeleteReply", null);  
  81.                   datamap.put("idreply", null);  
  82.                     
  83.                     
  84.                 Node node = iterator.nextNode();  
  85.                 Parser parser01=new Parser(node.toHtml());   
  86.                   
  87.                 NodeList chilenodes2 = parser01.extractAllNodesThatMatch(new TagNameFilter("a"));  
  88.                 Node tempnode=null;  
  89.                   
  90.                 for(int i=0;i<chilenodes2.size();i++){  
  91.                     tempnode=chilenodes2.elementAt(i);  
  92.                      
  93.                     if(tempnode.getText().contains("iduserlogo")){  
  94.                         datamap.put("userlogo", getAImageSrc(tempnode.toHtml()));  
  95.                         datamap.put("userlink", getNoAHref(tempnode.getText()));  
  96.                         continue;  
  97.                     }  
  98.                     if(tempnode.getText().contains("idmsgcontent")){  
  99.                         datamap.put("idmsgcontent", StringEscapeUtils.unescapeHtml(tempnode.toPlainTextString()));  
  100.                         continue;  
  101.                     }  
  102.                     if(tempnode.getText().contains("idmsgpic")){  
  103.                         datamap.put("idmsgpic", getAImageSrc(tempnode.toHtml()));  
  104.                         continue;  
  105.                     }  
  106.                     if(tempnode.getText().contains("idtime")){  
  107.                         datamap.put("idtime", StringEscapeUtils.unescapeHtml(tempnode.toPlainTextString()));  
  108.                         continue;  
  109.                     }  
  110.                     if(tempnode.getText().contains("idplace")){  
  111.                         datamap.put("idplace", StringEscapeUtils.unescapeHtml(tempnode.toPlainTextString()));  
  112.                         continue;  
  113.                     }  
  114.                     if(tempnode.getText().contains("iddeleteReply")){  
  115.                         datamap.put("iddeleteReply", getNoAHref(tempnode.getText()));  
  116.                         continue;  
  117.                     }  
  118.                     if(tempnode.getText().contains("iddeleteReply")){  
  119.                         datamap.put("iddeleteReply", getNoAHref(tempnode.getText()));  
  120.                         continue;  
  121.                     }  
  122.                     if(tempnode.getText().contains("idreply")){  
  123.                         datamap.put("idreply", getNoAHref(tempnode.getText()));  
  124.                         continue;  
  125.                     }  
  126.                      
  127.                 }  
  128.                   
  129.                 placedatalist.add(datamap);  
  130.              }  
  131.                
  132.                
  133.         }  
  134.         catch (HttpException e)   
  135.         {  
  136.         e.printStackTrace();  
  137.              }   
  138.         catch (IOException e)  
  139.           {  
  140.              } finally {  
  141.                   
  142.                     }  
  143.              return placedatalist;  
  144.     }  
  145. }  
复制代码
2、Android客户端数据提交给SSH框架服务器


通过使用将数据存入MultipartEntity中,这种方式可以上传文件、字符串;在提交包含中文的字符串时,需要在addPart后面加入Charset.forName(HTTP.UTF_8),这样不会导致服务器接收乱码。

HttpPost post=new HttpPost(SystemConstant.baseURL+"actionname"); 其中SystemConstant.baseURL为网站的域名,类似http://172.22.192.37:8888/XXX/,actionname为提交数据到指定的Action名称。


当然JSESSIONID为SSH框架服务器cookie名称,根据不同框架修改这个名称。

  1. public boolean publishMood(Map<String,String> data){  
  2.         HttpClient httpClient=new DefaultHttpClient();  
  3.         HttpPost post=new HttpPost(SystemConstant.baseURL+"publishMood");  
  4.         //如果有数据的话就直接发过去,没有的就不用发了,服务器那边自动会生成数据  
  5.         try{  
  6.             MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE,null,Charset.forName(HTTP.UTF_8));  
  7.             if(data.get("avator")!=null){  
  8.                 compressImage((String) data.get("avator"));  
  9.                 File file=new File((String) data.get("avator"));  
  10.                 multipartEntity.addPart("moodPic",new FileBody(file));  
  11.             }  
  12.               
  13.             multipartEntity.addPart("messageInfo.msg_content",new StringBody(data.get("msgcontent"),Charset.forName(HTTP.UTF_8)));  
  14.               
  15.             if(data.get("moodvalue")!=null)  
  16.                 multipartEntity.addPart("mood",new StringBody( data.get("moodvalue")));  
  17.               
  18.             multipartEntity.addPart("messageInfo.coordinate",new StringBody(MainService.guiji.getCoordinate()));  
  19.               
  20.             post.getParams().setParameter("http.protocol.cookie-policy",CookiePolicy.BROWSER_COMPATIBILITY);  
  21.             post.setEntity(multipartEntity);  
  22.             if(JSESSIONID!=null){  
  23.                 post.setHeader("Cookie","JSESSIONID=" + JSESSIONID);  
  24.             }  
  25.             HttpResponse response=httpClient.execute(post);  
  26.             if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){  
  27.                 CookieStore mCookieStore = ((AbstractHttpClient) httpClient).getCookieStore();  
  28.                 List<Cookie> cookies = mCookieStore.getCookies();  
  29.                 for (int i = 0; i < cookies.size();i++)   
  30.                 {  
  31.                      if ("JSESSIONID".equals(cookies.get(i).getName())) {  
  32.                          JSESSIONID = cookies.get(i).getValue();  
  33.                         break;  
  34.                     }  
  35.                   
  36.                 }  
  37.                 return true;  
  38.             }  
  39.         }catch (Exception e) {  
  40.               
  41.         }  
  42.         return false;  
  43.             
  44.     }  
复制代码







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2