导语

重定向器是特殊用途的HTTP服务器的另一个简单而有用的应用程序。它的作用就是将用户从一个WEB网站重定向到另外一个网站。下面是一个简单的例子,程序沿用上一个SingleHttpServer代码。看起来很容易读懂。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Logger; public class Redirector {
private static final Logger logger = Logger.getLogger("Redirector");
private final int port; public Redirector(int _port) {
try {
Handler handler = new FileHandler("redirector.log");
logger.addHandler(handler);
} catch (SecurityException | IOException e) {
throw new RuntimeException("无法记录日志");
}
port = _port;
} public void start() {
try (ServerSocket server = new ServerSocket(port)) {
logger.info("Redirecting connections on port " + server.getLocalPort() + "to www.xdysite.cn/index.html" );
while (true) {
try {
Socket socket = server.accept();
Thread t = new RedirectThread(socket);
t.start();
} catch (IOException e) {
logger.warning("Exception accepting connection");
}
}
} catch (IOException e) {
e.printStackTrace();
}
} public static void main(String[] args) {
Redirector redirector = new Redirector(8080);
redirector.start();
}
} class RedirectThread extends Thread{
private final Socket socket;
private static final String header;
private static final String body; static {
header = "HTTP/1.1 302 Found\r\n"
+ "Server: Redirector 1.1\r\n"
+ "Location: http://www.xdysite.cn/index.html\r\n"
+ "Content-Type: text/html\r\n";
body = "<html><head><title>文件已移到别处</title></head><body><bold>文件已移到别处</bold></body></html>";
} public RedirectThread(Socket _socket) {
socket = _socket;
} @Override
public void run() {
try(
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
Writer writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
) {
String get = reader.readLine();
if (get != null && get.indexOf("HTTP") != -1) {
writer.write(header + "Date: " + new Date() + "\r\n\r\n");
writer.write(body);
writer.flush();
}
} catch (IOException e) { } finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

最新文章

  1. JS实现网页批量下载文件,支持PC/手机
  2. git之tag
  3. 【CodeVS】 p1696 奇怪的函数
  4. mysql数据库与oracle数据库的切换
  5. 希望早几年知道的5个Unix命令
  6. selenium项目总结(UI自动化测试平台搭建、测试报告生成、邮件转发)
  7. jQuery 的选择器
  8. 由tomcat启动想到的
  9. MVC ViewData和ViewBag
  10. MongoDB学习笔记01
  11. iOS积分抽奖Demo,可以人为控制不同奖项的得奖率
  12. freemark使用总结
  13. Phone List 字典树 OR STL
  14. Tecplot: Legend和图像中 Dashed/Dash dot/Long dash 等虚线显示没有区别的问题
  15. 【转载】多模式串匹配之AC自动机
  16. SLF4J bindings
  17. 关于Prometheus运维实践项目
  18. 菜鸟学Java(二十三)——Java内存分析
  19. c# winform调用摄像头识别二维码
  20. Eclipse工程文件夹 红叹号

热门文章

  1. 【十大经典数据挖掘算法】PageRank
  2. 控制反转、依赖注入、Unity容器
  3. 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件
  4. 生成Tab键或逗号分隔的CSV
  5. GOF23设计模式之工厂模式
  6. phpexcel导出数据表格
  7. 交易系统使用storm,在消息高可靠情况下,如何避免消息重复
  8. atitit.http原理与概论attilax总结
  9. swing with transformjs
  10. 安开发卓之Notification(一)代码直接能用