服务器间进行通信只能通过流(Stream)的方式进行,不能用方法的返回值。

1.Java代码创建一个连接并请求该连接返回的数据

doGet()方法,execute()方法中调用
package demo2.x.com;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL; import javax.print.attribute.standard.RequestingUserName;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; /**
* Demo2主页,访问主页要先验证cookie
*
* @author: qlq
* @date : 2017年8月29日下午12:02:31
*/
public class Demo2Action extends ActionSupport { private String gotoUrl; public String getGotoUrl() {
return gotoUrl;
} public void setGotoUrl(String gotoUrl) {
this.gotoUrl = gotoUrl;
} @Override
public String execute() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
Cookie cookies[] = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("ssocookie".equals(cookie.getName())) {
String result = this.doGet("http://check.x.com:8080/sso/checkCookie.action", cookie.getName(),
cookie.getValue());
if ("1".equals(result)) {
return SUCCESS;
}
}
}
}
// 登陆失败后将gotoUrl写到JSP页面
gotoUrl = "http://demo2.x.com:8080/demo2/main.action";
return LOGIN;
} public String doGet(String url, String cookieName, String cookieValue) {
// 用于接收返回的数据
StringBuffer sb = new StringBuffer();
// 创建一个连接的请求
HttpURLConnection httpURLConnection = null;
try {
// 包装请求的地址
URL urls = new URL(url + "?cookieName=" + cookieName + "&cookieValue=" + cookieValue);
// 打开连接
httpURLConnection = (HttpURLConnection) urls.openConnection();
httpURLConnection.setRequestMethod("GET");
// 通过BufferReader读取数据
InputStream iStream = httpURLConnection.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(iStream);
BufferedReader bReader = new BufferedReader(inputStreamReader);
String temp = null;
while ((temp = bReader.readLine()) != null) {
sb.append(temp);
}
// 关闭流(先开后关,后开先关)
bReader.close();
inputStreamReader.close();
iStream.close();
} catch (Exception e) {
e.printStackTrace();
} finally { if (httpURLConnection != null) {
// 关闭连接
httpURLConnection.disconnect();
}
}
return sb.toString();
} }

2.接收请求的连接

checkCookie()方法

package check.x.com;

import java.awt.image.VolatileImage;
import java.io.IOException; import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport;
import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ; import check.x.com.utils.CheckCookie; public class LoginAction extends ActionSupport { private String username;
private String password;
private String gotoUrl;
private String cookieName;
private String cookieValue; public String getCookieName() {
return cookieName;
} public void setCookieName(String cookieName) {
this.cookieName = cookieName;
} public String getCookieValue() {
return cookieValue;
} public void setCookieValue(String cookieValue) {
this.cookieValue = cookieValue;
} public String getGotoUrl() {
return gotoUrl;
} public void setGotoUrl(String gotoUrl) {
this.gotoUrl = gotoUrl;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} @Override
public String execute() throws Exception {
boolean OK = this.check();
if (OK) {
Cookie cookie = new Cookie("ssocookie", "sso");
// 设置cookie的作用范围是父域(.x.com)
cookie.setDomain(".x.com");
// 斜杠代表设置到父域的顶层,也就是父域下的所有应用都可访问
cookie.setPath("/");
HttpServletResponse response = ServletActionContext.getResponse();
// 增加cookie,未设置生命周期默认为一次会话
response.addCookie(cookie);
return SUCCESS;
}
return null;
} public void checkCookie() throws IOException{
String result="0";
if(CheckCookie.checkCookie(cookieName, cookieValue)){
result="1";
}
HttpServletResponse response = ServletActionContext.getResponse();
response.getWriter().print(result);
response.getWriter().close();
} public boolean check() {
if ("user".equals(username) && "123".equals(password))
return true;
return false;
} }

简单的使用方法可以参考:

http://www.cnblogs.com/qlqwjy/p/7554535.html

Java中通过方法创建一个http连接并请求(服务器间进行通信)的更多相关文章

  1. 在存放源程序的文件夹中建立一个子文件夹 myPackage。例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage)。在 myPackage 包中创建一个YMD类,该类具有计算今年的年份、可以输出一个带有年月日的字符串的功能。设计程序SY31.java,给定某人姓名和出生日期,计算该人年龄,并输出该人姓名、年龄、出生日期。程序使用YM

    题目补充: 在存放源程序的文件夹中建立一个子文件夹 myPackage.例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage).在 m ...

  2. static关键字什么意思?Java中是否可以覆盖一个private或者是static的方法?

    答案:“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问.Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译 ...

  3. Java中是否可以调用一个类中的main方法?

    前几天面试的时候,被问到在Java中是否可以调用一个类中的main方法?回来测试了下,答案是可以!代码如下: main1中调用main2的主方法 package org.fiu.test; impor ...

  4. 关于JAVA中的String的使用与连接(转)

    JAVA中的String连接性能 Java中的String是一个非常特殊的类,使它特殊的一个主要原因是:String是不可变的(immutable).           String的不可变性是Ja ...

  5. Java中String对象创建机制详解()

    一String 使用 private final char value来实现字符串存储 二Java中String的创建方法四种 三在深入了解String创建机制之前要先了解一个重要概念常量池Const ...

  6. Java中的方法应用

    一.如何定义java中的方法 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 语法: 1. 访问修饰符:方法允许被访问的权限范围, 可以是 public.protected.priv ...

  7. c#和java中的方法覆盖——virtual、override、new

    多态和覆盖 多态是面向对象编程中最为重要的概念之一,而覆盖又是体现多态最重要的方面.对于像c#和java这样的面向对象编程的语言来说,实现了在编译时只检查接口是否具备,而不需关心最终的实现,即最终的实 ...

  8. Java中的方法(形参及实参)return返回类型

    如何定义 Java 中的方法 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 一般情况下,定义一个方法的语法是: 其中: 1. 访问修饰符:方法允许被访问的权限范围, 可以是 pub ...

  9. java中的方法method

    java中的方法必须存在于类class里,不能独立存在.类是描述具有某种特征的事物,方法则是这类 事物具有的某种功能,通过调用方法可以实现某种特定的功能.方法名一般以小写的动词开头. 例: publi ...

随机推荐

  1. C语言宏中"#"和"##"的用法

    转自:https://www.cnblogs.com/hnrainll/archive/2012/08/15/2640558.html 在查看linux内核源码的过程中,遇到了许多宏,这里面有许多都涉 ...

  2. 统计VS2013中有效行数

    将鼠标放在解决方案处,按下ctrl+shift+F b*[^:b#/]+.*$(带前面的using)^b*[^:b#/]+.*$

  3. springBoot @EnableAutoConfiguration深入分析

    1.新建一个项目中需要提供配置类 2.在META-INF/spring.factorties在文件中配置 org.springframework.boot.autoconfigure.EnableAu ...

  4. img 和 background-image 优劣比较

    一. 简单来说,img是内容部分的东西,css的background-image是修饰性的东西. img------从页面元素来说,如果是页面中的图片是作为内容出现的,比如广告图片,比如产品图片,那么 ...

  5. RESTful Webservice

    1,REST和RESTFUL是什么? REST ( REpresentational State Transfer ),State Transfer 为 "状态传输" 或 &quo ...

  6. CentOS 挂载(U盘NTFS格式,新硬盘,增加交换分区,扩展根分区等)

    1.挂载fat或者fat32分区的U盘 如果是用VM安装的linux,在vm里挂载U盘有两个前提: 第一,主机里的service要启动: 第二,U盘是连接到虚拟机,而不是主机,需要确认这点: 2.使用 ...

  7. 【刷题】HDU 4405 Aeroplane chess

    Problem Description Hzz loves aeroplane chess very much. The chess map contains N+1 grids labeled fr ...

  8. BZOJ [Ctsc2002] Award 颁奖典礼 解题报告

    [Ctsc2002] Award 颁奖典礼 Description IOI2002的颁奖典礼将在YONG-IN Hall隆重举行.人们在经历了充满梦幻的世界杯之后变得更加富于情趣.为了使颁奖典礼更具魅 ...

  9. AOJ.562 寻找罗恩和赫敏

    寻找罗恩和赫敏 考察点 水题 Time Mem Len Lang 0 492KB 0.42K G++ 题意分析 计算1/C(n,2)的值 代码总览 /* Title:AOJ.562 Author:pe ...

  10. React生命周期的变化

    1.ES6语法的引入,砍掉了getDefaultProps和getInitialState getDefaultProps 使用 static default={}的方式代替getInitialSta ...