服务器

位置:IT落伍者 >> 服务器 >> 浏览文章

用java 实现一个简单的web 服务器


发布日期:2019年05月03日
 
用java 实现一个简单的web 服务器

import javaioIOException;

import ServerSocket;

import Socket;

/**

* Socket + Thread + FileIO

*

* 服务器运行机制

* 启动服务器处于运行状态

* 能接收到请求

* 分析请求内容

* 处理响应内容

* 发送响应内容到客户端

*

* @author Administrator

*

*/

public class Server

{

private int port = ;

/**

* 启动服务器

*/

public void start()

{

try

{

// 实例化一个服务器端Socket对象用于接收客户端的连接信息

ServerSocket server = new ServerSocket(port);

while(true)

{

// 接收到的socket对象中 包含了http请求信息

Socket socket = serveraccept();

Systemoutprintln(接收到一个请求!);

// 将socket对象交给线程类进行 单独的处理从而可以同时响应多个用户的请求

Processor p = new Processor(socket);

new Thread(p)start();

}

}

catch (IOException e)

{

eprintStackTrace();

}

}

/**

* 简单的服务器程序通过main方法来启动服务器

* @param args

*/

public static void main(String[] args)

{

new Server()start();

}

}

import javaioBufferedReader;

import javaioFile;

import javaioFileInputStream;

import javaioFileNotFoundException;

import javaioIOException;

import javaioInputStream;

import javaioInputStreamReader;

import javaioOutputStream;

import javaioOutputStreamWriter;

import Socket;

/**

* Processor 用于接收请求内容分析请求内容处理响应发送响应

* @author Administrator

*

*/

public class Processor implements Runnable

{

private Socket socket;

// 定义虚拟服务器所在的根目录

// 当访问请求地址为

// 程序将读取并返回 WEB_ROOT\doc\l 文件的内容

private final static String WEB_ROOT = E:\\java学习\\web 作业\\浮动广告;

public Processor(Socket s)

{

thissocket = s;

}

@Override

public void run()

{

// 分析请求内容

String filePath = parse();

// 处理响应读取页面文件内容

String fileContent = readFile(filePath);

if(fileContent != null)

{

// 发送响应

sendResult( OK fileContent);

}

}

/**

* 解析请求内容根据请求中的URL内容获取请求对应的页面文件路径

* @return 页面相对路径

*/

public String parse()

{

try

{

InputStream in = socketgetInputStream();

BufferedReader reader = new BufferedReader(new InputStreamReader(in));

String requestContent = readerreadLine();

// Systemoutprintln(requestContent);

String[] contents = requestContentsplit( );

String url = contents[];

// Systemoutprintln(url);

// inclose();

// readerclose();

return url;

}

catch (IOException e)

{

eprintStackTrace();

}

return null;

}

/**

* 根据传入的文件相对路径通过文件IO流读取内容并返回

* 如果没有找到文件发送错误响应

* @param filePath

* @return

*/

public String readFile(String filePath)

{

String absFilePath = WEB_ROOT + filePath;

File file = new File(absFilePath);

Systemoutprintln(filegetAbsolutePath() + 文件是否存在+fileexists());

// File IO流读取文件内容

if(fileexists())

{

try

{

byte[] buff = new byte[(int) filelength()];

FileInputStream fis = new FileInputStream(file);

fisread(buff);

String fileContent = new String(buff);

fisclose();

return fileContent;

}

catch (FileNotFoundException e)

{

eprintStackTrace();

}

catch (IOException e)

{

eprintStackTrace();

}

}

else

{

sendResult( File not found 你懂的!);

}

return null;

}

/**

* 通过响应发送响应内容

* @param errorCode

* @param errorMessage

*/

public void sendResult(int code String message String result)

{

// 通过socket对象的输出流 发送响应内容

try

{

OutputStream os = socketgetOutputStream();

OutputStreamWriter osw = new OutputStreamWriter(os);

oswwrite(HTTP/ + code + + message + \r\n);

oswwrite(ContentLength: + resultgetBytes()length + \r\n);

oswwrite(ContentType:text/html\r\n);

oswwrite(\r\n);

oswwrite(result);

oswflush();

oswclose();

}

catch (IOException e)

{

eprintStackTrace();

}

}

}

               

上一篇:HttpSessionListener实现统计在线人数

下一篇:Apusic应用服务器的性能调节