项目中遇到一个这样的需求:在本系统A中组装参数,然后再根据系统B提供的部分uri,组装一个完整的url类似
"http://127.0.0.1:8090/test/index.jsp?userId=123&prjId=51011 ;
通过http协议来访问系统B。当点击系统A中的链接,在浏览器中打开一个tab页展示系统B对应的内容。
就这么一个小小的需求,折腾了一天,不过问题总算解决了!在此记录!
第一反应使用重定向来说实现,但是重定向使用get方式提交,提交的参数长度是有限制的,大概256个字符吧
由于项目中组装的参数可能会超过256,则此种方法不能使用。
于是想到使用HttpClient,可是要使用HttpClient必须添加所依赖的jar,但是又不想添加jar,则此种方式作为
备用方案!
有同事说可以使用HttpUrlConnection,开发中遇到参数传递时,系统B中死活获取不到参数。于是查找原因,初
步确定为servlet在forward的时候,把参数给搞丢了。至今这个问题还没有想出解决方法,如果你有好的解决方
法,还请指点。。。
无奈只好使用HttpClient,实现方法很简单,直接贴代码吧
String postURL = "http://127.0.0.1:8090/test/index.jsp";
HttpClient httpClient = new DefaultHttpClient();
httpClient.getParams().setParameter(HttpProtocolParams.HTTP_CONTENT_CHARSET,"UTF-
8");
HttpPost httpPost = new HttpPost(postURL);
StringEntity reqEntity = new StringEntity(returnUrl(request, response),"UTF-8");
reqEntity.setContentType("application/x-www-form-urlencoded");
httpPost.setEntity(reqEntity);
/*List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("USERNAME", "测试"));
nvps.add(new BasicNameValuePair("USERID", "123"));
httpPost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));*/
HttpResponse httpResponse = httpClient.execute(httpPost);
StatusLine status= httpResponse.getStatusLine();
if(200 == status.getStatusCode()){
HttpEntity httpEntity = httpResponse.getEntity();
if(httpEntity != null){
String htmlContext = EntityUtils.toString(httpEntity);
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.getWriter().print(htmlContext);
//采用二进制输出中文乱码
//response.getOutputStream().print(new String(sbf.toString
().getBytes("ISO-8859-1"),"UTF-8"));
}
EntityUtils.consume(httpEntity);
}
httpClient.getConnectionManager().shutdown();
/*String uri = "http://127.0.0.1:8080/test/index.jsp"+"?"+returnUrl(request, response);
response.sendRedirect(uri);*/
注意:
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.getWriter().print(htmlContext);
告诉浏览器怎么显示请求返回的数据。
分享到:
相关推荐
java语音调用已经安装的windows浏览器,打开指定的URL地址
主要介绍了java后台调用HttpURLConnection类模拟浏览器请求实例,该实例可用于接口调用,具有一定的实用价值,需要的朋友可以参考下
方法二: 代码如下://判断当前系统是否支持Java AWT Desktop扩展 if(java.awt.Desktop.isDesktopSupported()){ try{ //创建一个URI实例,注意不是URL java.net.URI uri=java.net.URI.create(“//www.j
Java使用默认浏览器打开指定URL的方法(二种方法).rar
Java后台打开浏览器所用到的jar包,下载后,解压出jar包,放到项目中即可
java后台请求http,区分get和post,一般是用来抓取带有登陆权限网站的数据,后台先登录,保持session,再请求数据URL
改资源可以用Java打开各种各样浏览器。。。 Java操作浏览器打开,Java后台打开浏览器; 希望对需要的人有帮助
java图片浏览器java图片浏览器java图片浏览器java图片浏览器java图片浏览器java图片浏览器java图片浏览器java图片浏览器java图片浏览器java图片浏览器java图片浏览器java图片浏览器java图片浏览器java图片浏览器java...
该压缩包用于通过java代码调用后台无界面浏览器进行HTML截图。 资源包内容如下: 无界面浏览器运行程序 相关js库文件 java示例代码
java后台请求网页上的http请求 用于java后台调用网络接口等操作
通过该代码,可以自动打开浏览器,并且跳转到相应的url,非常的实用
Java语言后台实现调用url路径并传参。
java后台请求http,区分get和post,一般是用来抓取带有登陆权限网站的数据,后台先登录,保持session,再请求数据URL
dwr dwr项目 js 调用 java 后台 方法 js调用java后台方法 后台方法 异步
解决chrome浏览器中点击链接,如果是浏览器可识别的文件类型,浏览器会自动打开而不是弹出下载框的方案
java 制作的一个简单的浏览器 在地址栏输入正确的地址都可以 打开该地址的网页。
java语言后台请求网站操作 java中main方法发送httpPost请求
要求:开发一个网页浏览器 1.通过在地址栏中输入URL地址,可以访问相应的网页。 2.查看指定URL的HTML源文档内容。 3.可以将正在访问的网页保存。
利用java实现的内置浏览器 使用起来就像在windows上使用app一样 。后台页面是web 附带全屏功能
NULL 博文链接:https://doujun1998.iteye.com/blog/1758708