服务器间进行通信只能通过流(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;

}

}

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

https://www.cnblogs.com/qlqwjy/category/1035586.html

java http连接_Java中通过方法创建一个http连接并请求(服务器间进行通信)相关推荐

  1. java show过时_Java中show() 方法被那个方法代替了? java编程 显示类中信

    你说的show是swing里的吧,在老版本中Component这个超类确实有show这个方法,而且这个方法也相当有用,使一个窗口可见,并放到最前面.在jdk5.0中阻止了这个方法,普遍用setVisi ...

  2. java main类型_java中main方法的返回类型是?

    感谢邀请.man方法是void类型,void没有返回值类型 在java语言程序编写时都会涉及到一个main方法,它的格式为: public static void main(String[] args ...

  3. java concat用法_java中concat()方法的使用说明

    concat()方法介绍: 将几个字符串连接到一起. 例如: s = s.concat(str1);//将字符串str1接到字符串s后面 s = s.concat(str2);//将字符串str1接到 ...

  4. java 引用队列_Java中的方法队列

    我的目标是在扩展Thread的类中包含一个方法调用队列,该类的run方法每15秒将一次方法调用从队列中弹出一次.可以在庞然大物的开关盒中使用Strings,int或chars以一种可遮盖的方式完成此操 ...

  5. java sort类_java中sort()方法的用法

    在java.util.Collections类中有个sort()方法,主要是用来给数组排序,排序的规则可以自己重写. (一)给数组{2,3,1,5}按自小到大排序 public class Main{ ...

  6. php好的mvc中index方法,创建一个mvc应用目录架构并创建入口文件index.php

    摘要:<?php require 'vendor/autoload.php'; require 'pig/Base.php'; define('ROOT_PATH',__DIR__.'/'); ...

  7. java io系统_java中的io系统详解

    Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java 内用 U ...

  8. Java jni 底层_Java中的native是如何实现的(JNI)

    什么是JNI JNI是Java Native Interface的缩写,Java本地接口(JNI)提供了将Java与C/C++.汇编等本地代码集成的方案,该规范使得在 Java 虚拟机内运行的 Jav ...

  9. sql语句和java的关系_java中Statement 与 PreparedStatement接口之间的关系和区别

    Statement 和 PreparedStatement之间的关系和区别. 关系:PreparedStatement继承自Statement,都是接口 区别:PreparedStatement可以使 ...

最新文章

  1. matlab为曲线下面积上色
  2. Unity3d中角色模型和角色名字保持相对位置
  3. ES6简单总结(搭配简单的讲解和小案例)
  4. Java为什么会存成undefined,为什么我在Java中获得NoClassDefFoundError?
  5. 高等数学上-赵立军-北京大学出版社-题解-练习5.8
  6. 计算机数学基础 刘树利,计算机数学基础课件教学课件作者刘树利11课件.ppt
  7. linux的ky3关闭防火墙,ky3-8
  8. 怎么自学python-如何学习好Python这门课程?老男孩Python培训全套视频
  9. 【VS开发】【图像处理】RGB Bayer Color分析
  10. CICD详解(一)——概念和原理
  11. Pr2023(Premiere Pro)中文版软件下载「附带安装教程」
  12. AB PLC Modbus TCP通讯测试
  13. matlab上机作业,matlab上机作业(数字信号处理)
  14. Erlang读书笔记
  15. 三万字硬核详解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
  16. eNSP 配置简单静态路由 实现全网可达
  17. 77道JVM系列面试题总结(2万字解析)
  18. matlab 给矩阵加一行或加一列
  19. 7.0系统手机XPOSED框架安装步骤
  20. 实例六:MATLAB APP design- 凸透镜成像光学研究小工具

热门文章

  1. python是用c写的吗-python是用c写的吗
  2. python怎么学最快-零基础怎么样才能学好Python?Python入门必看
  3. python.freelycode.com-Python数据可视化2018:为什么这么多的库?
  4. python官网下载步骤2019-Python IDE开发工具下载
  5. python一般用来开发什么-python主要用来做什么?Python开发简单吗?
  6. python培训好学吗-人工智能“速成班”Python好学吗 小心别被忽悠了
  7. python怎么安装包-安装python第三方包
  8. python小游戏代码大全-Python编写的点灯小游戏代码
  9. linux关闭方防火墙的命令
  10. Python的try... excep异常捕捉机制