Java不到10行代码做个简单的反向代理服务器(一)
2018-08-27 本文已影响0人
冰鱼飞鸟
从最简单的考虑我们只需要:1.一个servlet容器。2.处理请求转发的servlet。
这里使用内嵌Jetty + smiley-http-proxy-servlet。
pom.xml
<dependencies>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.4.11.v20180605</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>9.4.11.v20180605</version>
</dependency>
<dependency>
<groupId>org.mitre.dsmiley.httpproxy</groupId>
<artifactId>smiley-http-proxy-servlet</artifactId>
<version>1.10</version>
</dependency>
</dependencies>
App.java
public class App {
public static void main(String[] args) throws Exception {
Server server = new Server(8080);
ServletContextHandler servletContextHandler = new ServletContextHandler(server, "/proxy");
HttpServlet proxyServlet = new ProxyServlet();
ServletHolder servletHolder = new ServletHolder();
servletHolder.setServlet(proxyServlet);
servletHolder.setInitParameter("targetUri", "https://www.baidu.com");
servletContextHandler.addServlet(servletHolder, "/baidu/*");
server.start();
}
}
然后来测试一下
浏览器输入
http://localhost:8080/proxy/baidu
嗯跳到了百度首页,
输入http://localhost:8080/proxy/baidu/balabala
还是百度的页面。
站在巨人的肩上我们只需要不到十行代码就可以实现一个简易版反向代理服务器。
嗯下一步打算扩展成可配置,代理多个地址的。