java制作html服务器_用Java实现的Html web服务器

马上就要开始转到新的项目组,做一个全新的项目了,对于HTTP协议需要一定的了解,所以周末自己用Java写了一个简单的web服务器试试,只能实现简单的html文件浏览。

主要包括三个类:WebServer(监听浏览器请求),SocketThread(处理浏览器请求的进程),StringUtil(实现一些公共的操作),下面是三个类的代码.

----WebServer----

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

public class WebServer {

public static void main(String[] argv) throws IOException {

ServerSocket servSocket = new ServerSocket(StringUtil.LISTENING_PORT);

try {

while (true) {

Socket socket = servSocket.accept();

new SocketThread(socket).start();

}

} finally {

servSocket.close();

}

}

}

---SocketThread------

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintStream;

import java.io.Writer;

import java.net.Socket;

public class SocketThread extends Thread {

private Socket socket = null;

public SocketThread(Socket s) {

this.socket = s;

}

public void run() {

try {

if (socket == null) {

throw new Exception("==>SOCKET为空<==");

}

BufferedReader reader = new BufferedReader(new InputStreamReader(

socket.getInputStream()));

String fileName = "";

while (true) {

String str = reader.readLine();

if (str == null || str.length() <= 0) {

break;

}

//System.out.println("===>"+str);

if (StringUtil.isGetRequestInfo(str)) {

fileName = StringUtil.getFileName(str);

break;

}

}

//System.out.println("===>客户机IP==>"+socket.getInetAddress().toString());

//System.out.println("===>客户机端口==>"+socket.getPort());

/*

BufferedWriter writer = new BufferedWriter(new

OutputStreamWriter(socket.getOutputStream()));

*/

PrintStream outputStream = new PrintStream(socket.getOutputStream());

File file = new File(StringUtil.WEBPATH + fileName);

if (file.exists()) { //如果文件存在

StringUtil.sendHttpHead(outputStream, file);

StringUtil.sendFile(outputStream, file);

outputStream.flush();

} else { //文件没找到,返回404页面

StringUtil.send404Page(outputStream);

outputStream.flush();

}

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

socket.close();

} catch (Exception e) {

}

}

}

}

---StringUtil-----

import java.io.DataInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.PrintStream;

/**

* @author xiaoliang

*/

public class StringUtil {

// 服务器监听的端口

public static final int LISTENING_PORT = 8080;

// 服务器文件的位置

public static final String WEBPATH = "E:";

/**

* 判断该字符串是不是浏览器发送过来的请求头信息

* @param str

* @return

*/

public static boolean isGetRequestInfo(String str) {

if (str == null || str.length() <= 0)

return false;

boolean isGetStr = true;

if (str.indexOf("GET") != 0) {

isGetStr = false;

}

if (str.indexOf("HTTP/") <= 0) {

isGetStr = false;

}

return isGetStr;

}

/**

* 获得请求信息中的文件名,默认为index.html

*

* @param str

* @return

*/

public static String getFileName(String str) {

String fileName = "index.html", s;

int httpIndex = str.lastIndexOf("HTTP/");

s = str.substring(3, httpIndex);

s = s.trim();

if (s != null && s.length() > 0 && s.indexOf(".") > 0) {

fileName = s;

}

return fileName;

}

/**

* 发送文件到客户端

*

* @param out

* @param file

*/

public static void sendFile(PrintStream out, File file) {

try {

DataInputStream in = new DataInputStream(new FileInputStream(file));

int length = (int) file.length();

byte[] buffer = new byte[length];

in.readFully(buffer);

out.write(buffer, 0, length);

in.close();

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 发送返回的头部信息

* @param out

*/

public static void sendHttpHead(PrintStream outputStream, File file) {

try {

outputStream.println("HTTP/1.0200OK");

outputStream.println("Content_Type:text/htm1");

outputStream.println("Content_Length:" + file.length());

outputStream.println("Server:moon webserver 1.0");

outputStream.println("");

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 返回404页面

* @param out

*/

public static void send404Page(PrintStream out) {

try {

out.println("HTTP /1.0 404 no found");

out.println("Content_type:text/html");

out.println("");

out.println("Error404:file not found!");

} catch (Exception e) {

e.printStackTrace();

}

}

public static void main(String[] argv) {

String str = "GET /11.html HTTP/1.1";

str = StringUtil.getFileName(str);

System.out.println("==>" + str + "<==");

File file = new File(StringUtil.WEBPATH + str);

if (file.exists()) {

System.out.println("exists");

} else {

System.out.println("not exists");

}

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值