Android与SSH框架服务器通信方式

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

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

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

package support;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import logic.MainService;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.AndFilter;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import org.htmlparser.util.SimpleNodeIterator;

public class CommentData {
	private List<Map<String, String>> placedatalist ;
	
	public List<Map<String, String>> getPlacedatalist() {
		return placedatalist;
	}
	public void setPlacedatalist(List<Map<String, String>> placedatalist) {
		this.placedatalist = placedatalist;
	}
	private String getNoAHref(String source){
		return source.substring(source.indexOf("\"", source.indexOf("href"))+1, source.lastIndexOf("\""));
	}
	
	private String getAImageSrc(String source){
		return source.substring(source.indexOf("\"", source.indexOf("src"))+1, source.lastIndexOf("\""));
	}
	public List<Map<String, String>> getCommentData(String url) throws ParserException{
		placedatalist= new ArrayList<Map<String, String>>();
		
		HttpGet get=new HttpGet(url);
		try{ 
			HttpResponse httpReponse=MainService.guiji.getHttpClient().execute(get);
			  HttpEntity entity=httpReponse.getEntity();
		      
			  BufferedReader br = new BufferedReader(new InputStreamReader(entity.getContent(),"utf-8"));
		      String line = null;
		      String webcontent="";
		      while ((line = br.readLine()) != null)
		      {
		    	  webcontent+=line;
		      }
		      br.close();
		      
		      Parser parser=new Parser(webcontent);
		      NodeFilter filter1 = new TagNameFilter("table");  
		      NodeFilter filter2 = new HasAttributeFilter("id","idcomment");  
		      NodeFilter filter = new AndFilter(filter1,filter2); 
		      NodeList nodes = parser.extractAllNodesThatMatch(filter);
		      SimpleNodeIterator iterator = nodes.elements();
		      while (iterator.hasMoreNodes()) {
		    	  Map<String, String> datamap = new HashMap<String, String>();
		    	  datamap.put("userlogo", null);
		    	  datamap.put("userlink", null);
		    	  datamap.put("idmsgcontent", null);
		    	  datamap.put("idmsgpic", null);
		    	  datamap.put("idtime", null);
		    	  datamap.put("idplace", null);
		    	  datamap.put("iddeleteReply", null);
		    	  datamap.put("idreply", null);
		    	  
		    	  
		     	Node node = iterator.nextNode();
		     	Parser parser01=new Parser(node.toHtml()); 
		     	
		     	NodeList chilenodes2 = parser01.extractAllNodesThatMatch(new TagNameFilter("a"));
		     	Node tempnode=null;
		     	
		        for(int i=0;i<chilenodes2.size();i++){
		        	tempnode=chilenodes2.elementAt(i);
		        	
		        	if(tempnode.getText().contains("iduserlogo")){
		        		datamap.put("userlogo", getAImageSrc(tempnode.toHtml()));
		        		datamap.put("userlink", getNoAHref(tempnode.getText()));
		        		continue;
		        	}
		        	if(tempnode.getText().contains("idmsgcontent")){
		        		datamap.put("idmsgcontent", StringEscapeUtils.unescapeHtml(tempnode.toPlainTextString()));
		        		continue;
		        	}
		        	if(tempnode.getText().contains("idmsgpic")){
		        		datamap.put("idmsgpic", getAImageSrc(tempnode.toHtml()));
		        		continue;
		        	}
		        	if(tempnode.getText().contains("idtime")){
		        		datamap.put("idtime", StringEscapeUtils.unescapeHtml(tempnode.toPlainTextString()));
		        		continue;
		        	}
		        	if(tempnode.getText().contains("idplace")){
		        		datamap.put("idplace", StringEscapeUtils.unescapeHtml(tempnode.toPlainTextString()));
		        		continue;
		        	}
		        	if(tempnode.getText().contains("iddeleteReply")){
		        		datamap.put("iddeleteReply", getNoAHref(tempnode.getText()));
		        		continue;
		        	}
		        	if(tempnode.getText().contains("iddeleteReply")){
		        		datamap.put("iddeleteReply", getNoAHref(tempnode.getText()));
		        		continue;
		        	}
		        	if(tempnode.getText().contains("idreply")){
		        		datamap.put("idreply", getNoAHref(tempnode.getText()));
		        		continue;
		        	}
		        	
		        }
		        
		        placedatalist.add(datamap);
		     }
		      
		      
		}
		catch (HttpException e) 
		{
		e.printStackTrace();
			 } 
		catch (IOException e)
		  {
			 } finally {
				 
				    }
			 return placedatalist;
	}
}

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名称。

为了保持持久的Session会话,需要进行下面的处理:

CookieStore mCookieStore = ((AbstractHttpClient) httpClient).getCookieStore();
                List<Cookie> cookies = mCookieStore.getCookies();
                for (int i = 0; i < cookies.size();i++) 
                {
                     if ("JSESSIONID".equals(cookies.get(i).getName())) {
                    JSESSIONID = cookies.get(i).getValue();
                        break;
                    }

                }

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

public boolean publishMood(Map<String,String> data){
		HttpClient httpClient=new DefaultHttpClient();
		HttpPost post=new HttpPost(SystemConstant.baseURL+"publishMood");
		//如果有数据的话就直接发过去,没有的就不用发了,服务器那边自动会生成数据
		try{
			MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE,null,Charset.forName(HTTP.UTF_8));
			if(data.get("avator")!=null){
				compressImage((String) data.get("avator"));
				File file=new File((String) data.get("avator"));
				multipartEntity.addPart("moodPic",new FileBody(file));
			}
			
			multipartEntity.addPart("messageInfo.msg_content",new StringBody(data.get("msgcontent"),Charset.forName(HTTP.UTF_8)));
			
			if(data.get("moodvalue")!=null)
				multipartEntity.addPart("mood",new StringBody( data.get("moodvalue")));
			
			multipartEntity.addPart("messageInfo.coordinate",new StringBody(MainService.guiji.getCoordinate()));
			
			post.getParams().setParameter("http.protocol.cookie-policy",CookiePolicy.BROWSER_COMPATIBILITY);
			post.setEntity(multipartEntity);
			if(JSESSIONID!=null){
				post.setHeader("Cookie","JSESSIONID=" + JSESSIONID);
			}
			HttpResponse response=httpClient.execute(post);
			if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
				CookieStore mCookieStore = ((AbstractHttpClient) httpClient).getCookieStore();
                List<Cookie> cookies = mCookieStore.getCookies();
                for (int i = 0; i < cookies.size();i++) 
                {
                     if ("JSESSIONID".equals(cookies.get(i).getName())) {
                    	 JSESSIONID = cookies.get(i).getValue();
                        break;
                    }
				
                }
                return true;
			}
		}catch (Exception e) {
			
		}
		return false;
		  
	}

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
SSH框架是指Struts+Spring+Hibernate的集成框架,主要用于快速搭建Web应用程序。它将应用程序分为表示层、业务逻辑层、数据持久层和域模块层,以实现结构清晰、可复用、易于维护的Web应用程序。其中,Struts负责MVC分离,控制业务跳转;Hibernate提供持久层支持;Spring作为管理框架,管理Struts和Hibernate之间的关系。 而SSM框架指的是Spring+SpringMVC+MyBatis的集成框架。它是由Spring和MyBatis两个开源框架整合而成,通常用于数据源较简单的Web项目。在SSM框架中,SpringMVC是Spring的一部分,负责处理MVC的分离,而MyBatis则是用于提供持久层支持的框架。 另外还有Struts框架,它与SSH框架类似也是一种开源框架。它使用Servlet和JSP实现,并且基于MVC模型。Struts框架的核心组件包括Action、ActionServlet以及视图部分由多个相互关联的JSP文件组成。它可以有效地减少基于MVC模型的Web应用系统的开发时间,从而控制系统开发成本。 所以,SSH框架和SSM框架都是用于快速开发Web应用程序的集成框架,而SSH框架使用的是Struts+Spring+Hibernate,而SSM框架使用的是Spring+SpringMVC+MyBatis。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [简述SSM框架SSH框架](https://blog.csdn.net/m0_37876935/article/details/93891639)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值