您的位置:首页 > 编程语言 > Java开发

Java中通过方法创建一个http连接并请求(服务器间进行通信)

2017-08-29 22:23 771 查看

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

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

doGet()方法,execute()[b]方法中调用[/b]


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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐