AndroidとSSHフレームワークサーバの通信方式
8664 ワード
1、AndroidはSSHフレームワークサーバーJSPファイルの内容を取得する
HttpClientを使って、それからHtmlParserで目的の内容を解析することができます.ここでgetCommentData(String url)、urlはキャプチャしたいページアドレスです.
注意:よくウェブページの内容を取得する時、フォーマットはUTF-8で、直接データを持つ時、よく“<”ですフォーマット、この場合StringEscapeUtilsを通過する必要がある.unescapeHtml()処理.
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名にデータをコミットします.
セッションを永続的に維持するには、次の処理が必要です.
CookieStore mCookieStore = ((AbstractHttpClient) httpClient).getCookieStore(); List cookies = mCookieStore.getCookies(); for (int i = 0; i < cookies.size();i++) { if ("JSESSIONID".equals(cookies.get(i).getName())) { JSESSIONID = cookies.get(i).getValue(); break; } }
もちろんJESSIONIDはSSHフレームワークサーバクッキー名で、フレームワークによってこの名称を変更します.
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名にデータをコミットします.
セッションを永続的に維持するには、次の処理が必要です.
CookieStore mCookieStore = ((AbstractHttpClient) httpClient).getCookieStore(); List
もちろんJESSIONIDはSSHフレームワークサーバクッキー名で、フレームワークによってこの名称を変更します.
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;
}