Android与web服务器数据交互编程---3网络爬虫项目实现虚拟浏览器的jsp后台运行

原创 2015年07月06日 20:54:17

背景:原先的b/s设计中在一个jsp界面中实现多个复杂的工作流。。。为实现移动接口的调用保证工作流的正常web工程特别给提供了该虚拟浏览器的方案

原理:通过该方案实现虚拟浏览器后台执行jsp脚本,以达到我们要求

要求:

1、session保持,不然总会跳转到login界面

2、jsp脚本必须被执行,不能只是单纯的发起一个请求

先上

private String submitHandler(HttpServletRequest request,String msg,String sessionid,String pathjsp) throws IOException{
		 //虚拟浏览器 模拟提交jsp
		URL url = null;
		 //增加浏览器版本 去掉try catch
        WebClient client = new WebClient(BrowserVersion.INTERNET_EXPLORER_10);
         
		client.getOptions().setJavaScriptEnabled(true);
        client.getOptions().setCssEnabled(false);

        client.getOptions().setThrowExceptionOnFailingStatusCode(false);
        client.getOptions().setThrowExceptionOnScriptError(false);
        client.getOptions().setRedirectEnabled(true);
        
        
		url = new URL("http://localhost:"+ request.getServerPort()+pathjsp);
		
		System.out.println("sfq--url====" + url);
		//跳转登录查看cookie
		//HtmlPage page = client.getPage(url);
		WebRequest webRequest2 = new WebRequest(url, HttpMethod.POST);
			
	    List<NameValuePair> reqParam2 = new ArrayList<NameValuePair>();

		reqParam2.add(new NameValuePair("paramters", msg));
		System.out.println("sfq--url====msg:" + msg); 
		
		webRequest2.setAdditionalHeader("Cookie", "JSESSIONID="+sessionid);
		
		webRequest2.setRequestParameters(reqParam2);
		//client.getOptions().setThrowExceptionOnScriptError(true);
		HtmlPage page2 = (HtmlPage) client.getPage(webRequest2);

		System.out.println("sfq--pageasText====" + page2.asText());
		WebResponse webResponse = page2.getWebResponse();
	    int status21 = webResponse.getStatusCode();
	    System.out.println("sfq--status21====" + status21);
	    if(status21==200){
	    	return "1";
	    }else{
	    	return status21+"";
	    }
		
	}
几点说明:

1、因为项目中的jsp原来只是为web服务的,改装成移动端交互使用难免各种报错,只要不影响流程,我选择忽略他们。所以去掉了其中的try catch异常捕获。(捕获真的很碍事。。)、

2、session保持问题纠结了很久,尝试 网上的方法时大概人品出现了严重的问题,不好使(以下方法真的不好使。。。。)

private void setCookies(WebClient webClient,String domain, Map<String, String> cookies) {
	if (cookies != null && cookies.size() > 0) {
		webClient.getCookieManager().setCookiesEnabled(true);// enable
																// cookies
		for (Entry<String, String> c : cookies.entrySet()) {
			Cookie cookie = new Cookie(domain, c.getKey(), c.getValue());
			webClient.getCookieManager().addCookie(cookie);
		}
	}
}

3、在我们领导的指点下使用requet的方法成功

webRequest2.setAdditionalHeader("Cookie", "JSESSIONID="+sessionid);
当然,你也可以在请求你要的目的jsp之前先做一步模拟登录,从而获得了cookie......当然这就影响执行效率了

4、还不容易在本地测试通过了,搬移到外网服务器以后直接连接超时,最终通过更换url的ip地址为locslhost,问题解决


补充下:

localhoost  、 127.0.0.1 和本地ip的区别(网络基础太差了。。。。。。。)

no1:
localhost也叫local ,正确的解释是:本地服务器
127.0.0.1在windows等系统的正确解释是:本机地址(本机服务器)
他们的解析通过本机的host文件,windows自动将localhost解析为127.0.0.1
no2:
localhot(local)是不经网卡传输!这点很重要,它不受网络防火墙和网卡相关的的限制。
127.0.0.1是通过网卡传输,依赖网卡,并受到网络防火墙和网卡相关的限制。
本机IP 也是通过网卡传输的,依赖网卡,并受到网络防火墙和网卡相关的限制。
但是本机IP与127.0.0.1的区别是:
127.0.0.1 只能通过本机访问
本机IP 通过本机访问也能通过外部访问
 
一般设置程序时本地服务用localhost是最好的,localhost不会解析成ip,也不会占用网卡、网络资源。

有时候用localhost可以,但用127.0.0.1就不可以的情况就是在于此。猜想localhost访问时,系统带的本机当前用户的权限去访问,而用ip的时候,等于本机是通过网络再去访问本机,用的到网络用户的权限。


总结下:

1、访问本地服务器无论从效率还是实用上来讲直接使用localhost肯定是上上之选,不受其他问题的干扰

2、在公司法人项目中无知的选择了本机ip,效率最低的选择,访问要经过外网、防火墙、不啦不啦在找到自己。。。



 更多参考资料;

1、hmlunit  http://shenbai.iteye.com/blog/1985844

2、http://blog.csdn.net/lu8000/article/details/10693091

3、http://shihlei.iteye.com/blog/2067707


4、 localho相关




版权声明:本文为博主原创文章,未经博主允许不得转载。

Java网络编程 - 浅析web服务器与浏览器的实现原理

我们基本每天都在通过WEB浏览器,去浏览一些新闻,看看视频之类的。 众所周知,这就是所谓的B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器...
  • ghost_Programmer
  • ghost_Programmer
  • 2015年02月03日 10:34
  • 4906

分布式计算——实现简单的浏览器和web服务器

此次是分布式的第三次作业,作业要求如下: 1、基于TCP通讯(ServerSocket、Socket套接字),编写一个带有图形用户界面的浏览器和 一个支持文档读取并返回给客户浏览器的web服务器。...
  • u011215133
  • u011215133
  • 2016年04月24日 23:47
  • 1728

Android客户端与服务器端的json数据交互(很详细)

Android客户端与服务器端的json数据交互,主要是通过json形式的数据交互,就是json的写入和解析。  先看效果图,我最讨厌讲东西,一个图没有的。 算了,看来我不是写...
  • xingfeng2010
  • xingfeng2010
  • 2014年03月17日 21:20
  • 69424

VC与web交互

转自:http://blog.csdn.net/tiantian1980/article/details/12322191 Demo下载   一、摘要   在我们编写的程序中,...
  • rankun1
  • rankun1
  • 2016年09月29日 11:35
  • 978

Android如何进行网络通信(与web交互)

今天开始写第一篇博客,其实写博客为了逼自己整理资料,同时分享一些我踩过的坑,其实我是菜鸟,如果有写得不好的地方请指出来,谢谢大家。还有我所有的例子都是在Android Studio编译,好吧!今天分享...
  • u013772458
  • u013772458
  • 2015年10月07日 16:52
  • 1836

我的主机通过浏览器不能访问到虚拟机的web服务器

1 虚拟机和主机可以相互ping 2 虚拟机以网桥的形式链接 通过在网上搜集资料,应该是虚拟机下的8181端口有问题(我的web访问端口是8181),被防火墙给挡住了 找了很多资料,最后找到别人...
  • Love_Taylor
  • Love_Taylor
  • 2017年07月06日 15:25
  • 348

Android与web服务器数据交互编程---1

之前曾经写过一篇文章介绍与web服务器的http数据交互方式实现。 这篇文章主要总结博主在开发过程中遇到的问题,做笔记以备翻阅 开发遇到的问题: 1之前使用webservices接口的方式与web通信...
  • sfq19881224
  • sfq19881224
  • 2015年06月28日 23:01
  • 438

jsp数据交互(1)

1.jsp就打内置对象: 请求对象: request 输出对象: out 响应对象: response 应用程序对象: ...
  • weixin_36024609
  • weixin_36024609
  • 2017年05月08日 13:50
  • 319

浏览器与web服务器间的交互

在浏览器访问:http://www.sina.com:8080/mail/1.html浏览器与web服务器之间的交互: 1. 浏览器查询本地的hosts文件看是否有与所输入主机名相匹配的ip地址,如果...
  • centralperk
  • centralperk
  • 2011年05月21日 01:36
  • 3337

【Android 开发】: Android客户端与服务端之间使用JSON交互数据。

在前面的两讲中,我们讲解了JSON数据格式的一些基本知识,以及做一些小Demo,这一讲我们在前面的基础上来做一个综合的可扩展的Demo,主要是针对Android客户端解析服务端传递过来的JSON数据。...
  • xukunhui2
  • xukunhui2
  • 2013年11月11日 23:45
  • 17158
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android与web服务器数据交互编程---3网络爬虫项目实现虚拟浏览器的jsp后台运行
举报原因:
原因补充:

(最多只允许输入30个字)