您的位置:首页 > 理论基础 > 计算机网络

JAVA编写简单的http服务器

2016-05-12 20:54 537 查看
JAVA编写简单的Http服务器:

package server;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InterruptedIOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class HttpServer
{
public static void main(String[] args) throws IOException
{
int port = 80;
new HttpServer().start(port);
}

public void start(int port) throws IOException
{
@SuppressWarnings("resource")
ServerSocket server = new ServerSocket(port);
System.out.println("Server has started at port: " + port);
while(true)
{
Socket client = server.accept();
Thread thread = new Thread(new Services(client));
thread.start();
}
}

class Services implements Runnable
{
Socket client;

public Services(Socket client)
{
this.client = client;
}

private byte[] getResource(String resource) throws IOException
{
File file = new File(resource);
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1000];
int read;
while((read = fis.read(buffer)) != -1)
{
baos.write(buffer, 0, read);
}
fis.close();
baos.close();
return baos.toByteArray();
}

private String getHead(String url)
{
//使用\\对.进行正则表达式中的转义
String[] arr = url.split("\\.");
String fileType = arr[arr.length - 1];
if(fileType.equals("html"))
{
return "HTTP/1.0200OK\n" + "Content-Type:text/html\n" + "Server:myserver\n\n";
}
else if(fileType.equals("jpg") || fileType.equals("gif") || fileType.equals("png"))
{
return "HTTP/1.0200OK\n" + "Content-Type:image/jpeg\n" + "Server:myserver\n\n";
}
else
{
return null;
}
}

@Override
public void run()
{
try
{
InputStream is = client.getInputStream();
OutputStream os = client.getOutputStream();
client.setSoTimeout(500);
String url = "";
int state = 0;
while(true)
{
int readInt = is.read();
char c = (char)readInt;
boolean space = Character.isWhitespace(c);
switch (state)
{
case 0:
if(space) continue;
else state = 1;
case 1:
if(space)
{
state = 2;
continue;
}
else
{
continue;
}
case 2:
if(space) continue;
else state = 3;
case 3:
if(space) break;
else
{
url += c;
continue;
}
}
break;
}
while(true)
{
try
{
@SuppressWarnings("unused")
int readInt = is.read();
}
catch(InterruptedIOException e)
{
byte[] data = getResource("webapp" + url);
os.write(getHead(url).getBytes("utf-8"));
os.write(data);
os.close();
break;
}
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}


测试所用网页:

<html>
<head>
<title>
A famous hero, hxy!
</title>
</head>
<body>
<h1 align="center">hxy's home page</h1>
<h2 align="center">hxy's home page</h2>
<h3 align="center">hxy's home page</h3>
<h4 align="center">hxy's home page</h4>
<h5 align="center">hxy's home page</h5>
</body>
</html>


代码下载:https://github.com/SplayHuo/JavaProject
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: