java http监听_一个基于Socket的http请求监听程序实现

本文介绍如何使用Java通过Socket编程实现一个HTTP请求监听程序,监听指定端口并记录请求内容。程序利用观察者模式,支持记录到控制台、数据库等不同方式。文章展示了核心类HttpServer、Record、RecordHandler的设计与实现,以及数据库连接管理。通过运行AppLauncher,程序开始监听7777端口,并在控制台和数据库中记录请求信息。
摘要由CSDN通过智能技术生成

首先来看以下我们的需求:

用java编写一个监听程序,监听指定的端口,通过浏览器如http://localhost:7777来访问时,可以把请求到的内容记录下来,记录可以存文件,sqlit,mysql数据库,然后把接受到的信息在浏览器中显示出来

要点:

Socket,线程,数据库,IO操作,观察者模式

来看下我们如何来设计这个小系统,这个系统包含三部分的内容,一个是监听端口,二是记录日志,三是数据回显,端口监听第一想到的就是Socket编程了,数据回显也是一样的,无非是把当前请求客户端的socket获取到,然后把消息通过流输出出去,日志的记录因为是要多种实现策略,这里我们使用了一个观察者模式来实现,服务器可以添加任意多个观察着,因此有着很灵活的扩展性,在实例程序中我们分别提供了ConsoleRecordHandler--直接把获取到的信息打印到控制台,和存放数据库的方式-MysqlRecordHandler,当然你也可以分别提供基于文件的实现。

首先来看我们系统的类图

8467571_1299858521AIOo.png

HttpServer类是我们的核心类,他实现了Runnable接口,因此有着更高的性能,在循环中不断的去轮询指定端口,构造方法比较简单,只需要一个要监听的端口号即可,还有两个用于触发监听和停止程序运行的方法stop()&start(),这两个方法也比较简单,只是简单的给标志位赋值即可,我们这个程序是基于Oserver模式的简化版本,HttpServer本身是一个被观察的对象(Subject),当这个Subject有变化时(获取到客户端请求时)要通知监听器(我们的RecordHandler)去作操作(写数据库还是写文件或是直接控制台输出),极大的增加了系统的灵活性和易测试性

HttpServer类代码

package com.crazycoder2010.socket;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

import java.sql.Date;

import java.util.ArrayList;

import java.util.List;

/**

* 服务器监听对象,对某个端口进行监听,基于线程的实现

*

* @author Kevin

*

*/

public class HttpServer implements Runnable {

/**

* 服务器监听

*/

private ServerSocket serverSocket;

/**

* 标志位,表示当前服务器是否正在运行

*/

private boolean isRunning;

/**

* 观察者

*/

private List recordHandlers = new ArrayList();

public HttpServer(int port) {

try {

serverSocket = new ServerSocket(port);

} catch (IOException e) {

e.printStackTrace();

}

}

public void stop() {

this.isRunning = false;

}

public void st

好的,我可以回答您的问题。以下是一个基于Sockethttp请求监听程序的实现示例: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class HttpServer { public static void main(String[] args) { int port = 8080; // 监听的端口号 try { ServerSocket server = new ServerSocket(port); System.out.println("Server started on port " + port); while (true) { Socket client = server.accept(); System.out.println("New client connected"); // 读取客户端发送的请求 BufferedReader requestReader = new BufferedReader(new InputStreamReader(client.getInputStream())); String requestLine = requestReader.readLine(); System.out.println("Request line: " + requestLine); // 关闭连接 client.close(); } } catch (IOException e) { e.printStackTrace(); } } } ``` 这个程序会监听本地的8080端口,当客户端连接时,它会读取客户端发送的http请求的第一行(即请求行),并将其打印到控制台上。当请求处理完毕后,程序会关闭连接,等待下一个客户端连接。 当您需要在Java应用程序中监听端口时,只需创建一个ServerSocket对象并调用其accept()方法,该方法将阻塞程序直到有客户端连接。一旦客户端连接,您就可以读取客户端发送的数据并对其进行处理。处理完成后,关闭连接并等待下一个客户端连接。 希望这个示例能够帮助到您!如果您还有其他问题,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值