package src.com.huawei.handleservice.customhttplistener;
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<RecordHandler> recordHandlers = new ArrayList<RecordHandler>();
public HttpServer(int port) {
try {
serverSocket = new ServerSocket(port);
} catch (IOException e) {
e.printStackTrace();
}
}
public void stop() {
this.isRunning = false;
}
public void start() {
this.isRunning = true;
new Thread(this).start();
}
@Override
public void run() {
while (isRunning) {//一直监听,直到受到停止的命令
Socket socket = null;
try {
socket = serverSocket.accept();//如果没有请求,会一直hold在这里等待,有客户端请求的时候才会继续往下执行
// log
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(socket.getInputStream()));//获取输入流(请求)
StringBuilder stringBuilder = new StringBuilder();
String line = null;
while ((line = bufferedReader.readLine()) != null
&& !line.equals("")) {//得到请求的内容,注意这里作两个判断非空和""都要,只判断null会有问题
stringBuilder.append(line).append("/n");
}
Record record = new Record();
record.setRecord(stringBuilder.toString());
record.setVisitDate(new Date(System.currentTimeMillis()));
notifyRecordHandlers(record);//通知日志记录者对日志作操作
// echo
PrintWriter printWriter = new PrintWriter(
socket.getOutputStream(), true);//这里第二个参数表示自动刷新缓存
doEcho(printWriter, record);//将日志输出到浏览器
// release
printWriter.close();
bufferedReader.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 将得到的信写回客户端
*
* @param printWriter
* @param record
*/
private void doEcho(PrintWriter printWriter, Record record) {
printWriter.write(record.getRecord());
}
/**
* 通知已经注册的监听者做处理
*
* @param record
*/
private void notifyRecordHandlers(Record record) {
for (RecordHandler recordHandler : this.recordHandlers) {
recordHandler.handleRecord(record);
}
}
/**
* 添加一个监听器
*
* @param recordHandler
*/
public void addRecordHandler(RecordHandler recordHandler) {
this.recordHandlers.add(recordHandler);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
handleserviceforhttp.zip (29个子文件)
src.com.huawei.handleservice
bin
src
com
huawei
handleservice
customhttplistener
ConsoleRecordHandler.class 937B
RecordHandler.class 240B
Record.class 1KB
MysqlRecordHandler.class 3KB
AppLauncher.class 1KB
ConnectionFactory.class 1KB
HttpServer.class 4KB
constant
service
HandleLinuxService.class 655B
HandleBusiness.class 252B
HandleWindowsService.class 661B
HandleService.class 2KB
customhttpservice
CustomHttpService.class 4KB
RequestInfo.class 984B
.settings
org.eclipse.jdt.core.prefs 629B
src
src
com
huawei
handleservice
customhttplistener
ConsoleRecordHandler.java 297B
ConnectionFactory.java 1KB
HttpServer.java 3KB
MysqlRecordHandler.java 2KB
AppLauncher.java 713B
Record.java 657B
RecordHandler.java 215B
constant
service
HandleBusiness.java 258B
HandleWindowsService.java 315B
HandleService.java 1KB
HandleLinuxService.java 313B
customhttpservice
RequestInfo.java 521B
CustomHttpService.java 3KB
.project 404B
.classpath 294B
共 29 条
- 1
明天我会更好
- 粉丝: 1
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页