Java中通过方法创建一个http连接并请求(服务器间进行通信)
服务器间进行通信只能通过流(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连接并请求(服务器间进行通信)的更多相关文章
- 在存放源程序的文件夹中建立一个子文件夹 myPackage。例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage)。在 myPackage 包中创建一个YMD类,该类具有计算今年的年份、可以输出一个带有年月日的字符串的功能。设计程序SY31.java,给定某人姓名和出生日期,计算该人年龄,并输出该人姓名、年龄、出生日期。程序使用YM
题目补充: 在存放源程序的文件夹中建立一个子文件夹 myPackage.例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage).在 m ...
- static关键字什么意思?Java中是否可以覆盖一个private或者是static的方法?
答案:“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问.Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译 ...
- Java中是否可以调用一个类中的main方法?
前几天面试的时候,被问到在Java中是否可以调用一个类中的main方法?回来测试了下,答案是可以!代码如下: main1中调用main2的主方法 package org.fiu.test; impor ...
- 关于JAVA中的String的使用与连接(转)
JAVA中的String连接性能 Java中的String是一个非常特殊的类,使它特殊的一个主要原因是:String是不可变的(immutable). String的不可变性是Ja ...
- Java中String对象创建机制详解()
一String 使用 private final char value来实现字符串存储 二Java中String的创建方法四种 三在深入了解String创建机制之前要先了解一个重要概念常量池Const ...
- Java中的方法应用
一.如何定义java中的方法 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 语法: 1. 访问修饰符:方法允许被访问的权限范围, 可以是 public.protected.priv ...
- c#和java中的方法覆盖——virtual、override、new
多态和覆盖 多态是面向对象编程中最为重要的概念之一,而覆盖又是体现多态最重要的方面.对于像c#和java这样的面向对象编程的语言来说,实现了在编译时只检查接口是否具备,而不需关心最终的实现,即最终的实 ...
- Java中的方法(形参及实参)return返回类型
如何定义 Java 中的方法 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 一般情况下,定义一个方法的语法是: 其中: 1. 访问修饰符:方法允许被访问的权限范围, 可以是 pub ...
- java中的方法method
java中的方法必须存在于类class里,不能独立存在.类是描述具有某种特征的事物,方法则是这类 事物具有的某种功能,通过调用方法可以实现某种特定的功能.方法名一般以小写的动词开头. 例: publi ...
随机推荐
- idea超炫的自定义模板
idea超炫的自定义模板 idea 有些快捷键 sout -> System.out.println() ,输入sout,idea能自动补全代码, 这种约定的快捷方式大大提高了效率, 而id ...
- BZOJ 1070 修车(费用流)
如果能想到费用流,这道题就是显然了. 要求所有人的等待平均时间最小,也就是所有人的总等待时间最小. 每辆车只需要修一次,所以s连每辆车容量为1,费用为0的边. 现在需要把每个人拆成n个点,把车和每个人 ...
- 前端基础:HTML标签(上)
前端基础:THML HTML初始 1.web服务本质 import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) so ...
- LOJ2587:[APIO2018]铁人两项——题解
https://loj.ac/problem/2587#submit_code (题面来自LOJ) 考试时候发觉树很可做,并且写了一个dp骗到了树的分. 苦于不会圆方树……现在回来发现这题还是很可做的 ...
- [bzoj] 3673 3674 可持久化并查集 || 可持久化数组
原题 加强版 题意: 可持久化并查集模板-- 题解: 用可持久化线段树维护一个可持久化数组,来记录每一次操作后的状态. 不能用路径压缩,但是要按置合并,使复杂度保证在O(log) #include&l ...
- 实验三 Java敏捷开发与XP实践
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:陈巧然 ...
- Install JDK In Ubuntu
安装Linux软件包管理器rpm apt install rpm 查看已安装的软件,如JDK rpm -qa|grep jdk #查询所有 找jdk 卸载已安装的软件 rpm -e nodeps 包名 ...
- httpclient post请求带参数返回数据乱码问题解决
客户端代码: //带参数的post请求 @Test public void doPostWithParam() throws Exception { CloseableHttpClient httpC ...
- HDU4009:Transfer water(有向图的最小生成树)
Transfer water Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)To ...
- Naive Operations HDU多校(线段树上线段果)
Problem Description In a galaxy far, far away, there are two integer sequence a and b of length n.b ...