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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值