背景:原先的b/s设计中在一个jsp界面中实现多个复杂的工作流。。。

为实现移动接口的调用保证工作流的正常webproject特别给提供了该虚拟浏览器的方案

原理:通过该方案实现虚拟浏览器后台运行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、还不easy在本地測试通过了,搬移到外网server以后直接连接超时,终于通过更换url的ip地址为locslhost,问题解决

补充下:

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

。。

。。)

no1:

localhost也叫local ,正确的解释是:本地server

127.0.0.1在windows等系统的正确解释是:本机地址(本机server)

他们的解析通过本机的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、訪问本地server不管从效率还是有用上来讲直接使用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相关

Android与webserver数据交互编程---3网络爬虫项目实现虚拟浏览器的jsp后台执行的更多相关文章

  1. android json解析及简单例子+Android与服务器端数据交互+Android精彩案例【申明:来源于网络】

    android json解析及简单例子+Android与服务器端数据交互+Android精彩案例[申明:来源于网络] android json解析及简单例子:http://www.open-open. ...

  2. Python即时网络爬虫项目启动说明

    作为酷爱编程的老程序员,实在按耐不下这个冲动,Python真的是太火了,不断撩拨我的心. 我是对Python存有戒备之心的,想当年我基于Drupal做的系统,使用php语言,当语言升级了,推翻了老版本 ...

  3. Python即时网络爬虫项目: 内容提取器的定义

    1. 项目背景 在python 即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间,从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端的数据处理工作 ...

  4. Python即时网络爬虫项目: 内容提取器的定义(Python2.7版本)

    1. 项目背景 在Python即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间太多了(见上图),从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端 ...

  5. C语言Linix服务器网络爬虫项目(一)项目初衷和网络爬虫概述

    一.项目初衷和爬虫概述 1.项目初衷 本人的大学毕设就是linux上用c写的一个爬虫,现在我想把它完善起来,让他像一个企业级别的项目.为了重复发明轮子来学习轮子的原理,我们不使用第三方框架(这里是说的 ...

  6. 关于网络爬虫项目的项目建议(NABCD)

    Need 我们小组的研究课题是编写一个更快捷,更安全的爬虫软件,编写时会应用到学长的部分代码并在其基础上完善创新. 初步阅读了学长们的博客上面的几个版本的测试情况和源代码,发现学长们在实现基础功能的条 ...

  7. C语言Linix服务器网络爬虫项目(二)项目设计和通过一个http请求抓取网页的简单实现

    我们通过上一篇了解了爬虫具体要实现的工作之后,我们分析得出的网络爬虫的基本工作流程如下: 1.首先选取一部分精心挑选的种子URL: 2.将这些URL放入待抓取URL队列: 3.从待抓取URL队列中取出 ...

  8. Android与服务器端数据交互(http协议整合struts2+android)

    在android中有时候我们不需要用到本机的SQLite数据库提供数据,更多的时候是从网络上获取数据,那么Android怎么从服务器端获取数据呢?有很多种,归纳起来有 一:基于Http协议获取数据方法 ...

  9. Android - 服务器json数据交互.

    一,服务器端 服务器端使用的是Servlet,封装json对象使用的 'json-lib-2.2.2-jdk15.jar,ezmorph-1.0.4.jar,commons-logging-1.1.j ...

随机推荐

  1. Traversing a list

    The most common way to traverse the elements of a list is with a for loop. The syntax is the same as ...

  2. c# 结构 struct

    结构是使用 struct 关键字定义的,与类相似,都表示可以包含数据成员和函数成员的数据结构. 一般情况下,我们很少使用结构,而且很多人也并不建议使用结构,但作为.NET Framework 一般型別 ...

  3. 空宏-标C中空宏的妙用

    空宏的作用: 1)编译指示: 2)方便阅读: 定义宏,并在预处理过程中将其替换为空字符串(即删除) 偶然的机会,看到了下面的C代码:ISC_PLATFORM_NORETURN_PRE static v ...

  4. nodejs学习(一)--express+ejs生成项目

    一.说一下 首先保证node环境已经安装完毕,npm能正常使用,安装可自行百度,比较简单,在此不做赘述. 二.直接开码 安装 npm install express express-generator ...

  5. Chrome发布73 beta版:增强Linux用户体验

    Google开发者周五推动Chrome 73进入他们的测试频道,因为他们准备在3月12日左右推出这款网页浏览器更新,以便稳定推出.除非另有说明,否则下面描述的更改适用于Android,Chrome O ...

  6. Vue2.0组件实现动态搜索引擎(一)

    原文链接:https://blog.csdn.net/qwezxc24680/article/details/74550556 从github上看到一个不错的开源项目:https://github.c ...

  7. 一款很不错的html转xml工具-Html Agility Pack 实现html转Xml

    [转]一款很不错的html转xml工具-Html Agility Pack 之前发个一篇关于实现html转成xml的劣作<实现html转Xml>,受到不少网友的关心.该实现方法是借助htm ...

  8. Qt 5.3 下OpenCV 2.4.11 开发(0)图像处理基本概念

    1.普通情况下的RGB彩色图像:它的每一个像素点都是由三个通道组成,即红色(R).绿色(G)和蓝色(B).8位三通道彩色图像就是每一个像素中每一个通道的取值范围都是 0~255(即二进制下的8位数), ...

  9. windows linux 双系统默认启动windows 的几种方法

    装了双系统后,在开机时总会有想让一个系统默认启动的时候,一般安装完Ubuntu和XP双系统后,开机时默认的是启动Ubuntu系统,可是当想让XP作为默认启动的系统时怎么办呢? 在早期的Ubuntu系统 ...

  10. 免费WiFi初体验——个小白的WiFi旅程

    说来羞愧,真正接触到WiFi还是在毕业后,此前自己封闭在一个人的世界,再加上外在学校的包围,我还成了个"山里"的孩子. 去年毕业了,也算是个90后,可自觉得心态过于成熟.了解外界太 ...