java http连接_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;

}

}

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值