一个可以作为代理服务器或者转发的java类

项目中用到,这里把它给简化和通用了,突出基本思路,具体可以基于这个类来修改。

基于java容器和servlet。

package com.xxx.first;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.compress.utils.IOUtils;

public class SimpleProxy {

    /**
     * 使用GET提交到目标服务器。
     *
     * @param request
     * @param response
     * @param targetUrl
     * @throws IOException
     */
    private void get(HttpServletRequest request, HttpServletResponse response,
	    String targetUrl) throws IOException {

	URL url = new URL(targetUrl);

	BufferedReader in = new BufferedReader(new InputStreamReader(
		url.openStream()));

	String line;
	PrintWriter out = response.getWriter();
	while ((line = in.readLine()) != null) {
	    out.println(line);
	}
	out.flush();
	in.close();
    }

    /**
     * 使用POST提交到目标服务器。
     *
     * @param request
     * @param response
     * @param targetUrl
     * @throws IOException
     */
    private void post(HttpServletRequest request, HttpServletResponse response,
	    String targetUrl) throws IOException {
	URL url = new URL(targetUrl);
	HttpURLConnection conn = (HttpURLConnection) url.openConnection();

	// 发送POST请求必须设置如下两行
	conn.setDoOutput(true);
	conn.setDoInput(true);
	conn.setRequestMethod("POST");
	// 可以拷贝客户端的head信息作为请求的head参数
	// conn.setRequestProperty("Charsert", "UTF-8");
	conn.setRequestProperty("Content-Type", "application/json");

	// 直接把客户端的BODY传给目标服务器
	OutputStream send = conn.getOutputStream();
	InputStream body = request.getInputStream();
	IOUtils.copy(body, send);
	send.flush();
	send.close();
	body.close();

	// 获取返回值
	BufferedReader in = new BufferedReader(new InputStreamReader(
		conn.getInputStream()));
	PrintWriter out = response.getWriter();
	String line;
	while ((line = in.readLine()) != null) {
	    out.println(line);
	}
	out.flush();
    }

}
时间: 2024-11-05 09:35:03

一个可以作为代理服务器或者转发的java类的相关文章

Java类的加载、链接和初始化

一.Java的类加载机制回顾与总结: 我们知道一个Java类要想运行,必须由jvm将其装载到内存中才能运行,装载的目的就是把Java字节代码转换成JVM中的java.lang.Class类的对象.这样Java就可以对该对象进行一系列操作,装载过程有两个比较重要的特征:层次组织结构和代理模式.层次组织结构指的是每个类加载器都有一个父类加载器,通过getParent()方法可以获取到.类加载器通过这种父亲-后代的方式组织在一起,形成树状层次结构.代理模式则指的是一个类加载器既可以自己完成Java类的

Java类的加载 链接 初始化

原文地址 Java类的加载.链接和初始化.Java字节代码的表现形式是字节数组(byte[]),而Java类在JVM中的表现形式是java.lang.Class类的对象.一个Java类从字节代码到能够在JVM中被使用,需要经过加载.链接和初始化这三个步骤.这三个步骤中,对开发人员直接可见的是Java类的加载,通过使用Java类加载器(class loader)可以在运行时刻动态的加载一个Java类:而链接和初始化则是在使用Java类之前会发生的动作.本文会详细介绍Java类的加载.链接和初始化的

Java 类的热替换---转载

构建基于 Java 的在线升级系统 Java ClassLoader 技术剖析 在本文中,我们将不对 Java ClassLoader 的细节进行过于详细的讲解,而是关注于和构建在线升级系统相关的基础概念.关于 ClassLoader 的详细细节许多资料可以参考,有兴趣的读者可以自行研读. 要构建在线升级系统,一个重要的技术就是能够实现 Java 类的热替换 —— 也就是在不停止正在运行的系统的情况下进行类(对象)的升级替换.而 Java 的 ClassLoader 正是实现这项技术的基础. 在

java 类的加载,链接,初始化

本篇的话题,讨论Java类的加载.链接和初始化.Java字节代码的表现形式是字节数组(byte[]),而Java类在JVM中的表现形式是java.lang.Class类的对象.一个Java类从字节代码到能够在JVM中被使用,需要经过加载.链接和初始化这三个步骤.这三个步骤中,对开发人员直接可见的是Java类的加载,通过使用Java类加载器(class loader)可以在运行时刻动态的加载一个Java类:而链接和初始化则是在使用Java类之前会发生的动作.本文会详细介绍Java类的加载.链接和初

(转)Java 类的热替换 —— 概念、设计与实现

构建基于 Java 的在线升级系统 对于许多关键性业务或者庞大的 Java 系统来说,如果必须暂停系统服务才能进行系统升级,既会大大影响到系统的可用性,同时也增加了系统的管理和维护成本.因此,如果能够方便地在不停止系统业务的情况下进行系统升级,则可以很好地解决上述问题.在本文中,我们将基于实例,对构建在线升级 Java 系统的基础技术和设计原则进行了深入的讲解.相信读者能够根据文中的技术构建出自己的在线升级系统来. Java ClassLoader 技术剖析 在本文中,我们将不对 Java Cl

Java 类的热替换 —— 概念、设计与实现

别人的一篇技术博客,直接摘抄过来,免得再查看找不到了(本人在看的过程中可能会对原文格式或文字有修改) 原文地址:http://blog.163.com/web_promise/blog/static/109631655201222804931240/ 在本文中,我们将不对 Java ClassLoader 的细节进行过于详细的讲解,而是关注于与构建在线升级系统相关的基础概念.关于 ClassLoader 的详细细节有许多资料可以参考,有兴趣的读者可以自行研读. 要构建在线升级系统,一个重要的技术

java类和对象详解

对象和类详解 什么是对象:万物皆对象,什么东西都是对象,例如,猫狗人 什么是类:类是同一事物的统称,它描述一类对象的行为和状态. 设计类:抽象过程 类的属性 类的方法 什么是实例化:由类得到对象这个过程叫做实例化 对象和类的区别:一个是抽象一个是具体,一个是集合一个是个体等等.一个是魔板一个是实例,一个是数据一个是数据结构等等. 如何设计类:public class student{}//把类的共同提出提取出来, 学生会有什么:名字,年龄,性别,等等,这就是共同特征. //共同特征为类的属性,共

java反射(四)--反射与简单java类

一.传统简单java类 简单的java类主要是由属性所组成,并且提供有相应的setter以及getter的处理方法,同时简单java类最大的特征就是通过对象保存相应的类的属性内容,但是如果使用传统的简单java类的开发,那么也会面临非常麻烦的困难: 1 class Emp{ 2 private String ename; 3 private String job; 4 5 public void setEname(String ename) { 6 this.ename = ename; 7 }

.Net Core 3.0后台使用httpclient请求网络网页和图片_使用Core3.0做一个简单的代理服务器

原文:.Net Core 3.0后台使用httpclient请求网络网页和图片_使用Core3.0做一个简单的代理服务器 目标:使用.net core最新的3.0版本,借助httpclient和本机的host域名代理,实现网络请求转发和内容获取,最终显示到目标客户端! 背景:本人在core领域是个新手,对core的使用不多,因此在实现的过程中遇到了很多坑,在这边博客中,逐一介绍下.下面进入正文 正文: 1-启用httpClient注入: 参考文档:https://docs.microsoft.c