java 手动写http静态网页服务器

本文介绍如何使用Java手动创建一个简单的HTTP静态文件服务器,支持GET请求,处理HTML和JPEG图片,通过XML配置文件设置服务器根目录和端口。通过SAX解析XML配置,利用ServerSocket接收连接,并使用多线程处理请求。解析HTTP请求头,根据请求获取硬盘上的文件,返回200、400或404状态码。
摘要由CSDN通过智能技术生成

本文仅仅是实现一个功能非常有限的http服务器。我仅仅实现了请求一个html和请求一个jpg图片。方式只支持GET。不支持http选项。错误代码仅仅会返回200 400 404.支持xml对服务器的配置。本博客内容仅仅完全处于自身娱乐,高手可直接略过。

实现思想

1用java的sax解析服务器配置文件。确定web服务器的root目录,和web服务器运行的端口号。
2启动一个serverSocket等待链接
3获取一个链接之后把所获得的socket传递给新的httpSolver线程。httpSolver负责解析客户端发来的http请求头。
4如果httpSolver根据服务器请求的文件建立一个HttpMessage类。这个类封装了http请求的消息,包括请求的文件,root目录等等。这个httpMessage传递给GetDisk类
5GetDisk负责从硬盘读取。如果java发现请求的文件不在,那么在返回404.如果请求文件成功那么构造消息头返回200在返回锁请求文件。
6httpSolver关闭socket结束一个回话。

工程文件管理方式

这里写图片描述

xml配置文件

server.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE server SYSTEM "server.dtd">
<server>
    <port>80</port>
    <root>d:\Root\</root>
</server>

server.dtd

<?xml version="1.0" encoding="UTF-8"?>

<!ELEMENT server (port,root?)>
<!ELEMENT port (#PCDATA)>
<!ELEMENT root (#PCDATA)>

Main.java

Main.java

package httpServer;

public class Main {
   
    public static void main(String args[])
    {
        ServerClass myServer=new ServerClass();
        myServer.serverStart();
    }
}

ServerClass.java

public class ServerClass {
   
    private ServerSocket serverSocket;
    private String root;
    private boolean runing;
    private int port;
    public ServerClass()
    {
        runing=false;
        SAXParserFactory saxpf=SAXParserFactory.newInstance();
        SAXParser saxParser;

        try (InputStream in=new FileInputStream("server.xml"))
        {
            saxParser=saxpf.newSAXParser();
            saxParser.parse(in, new Handler());         
        } 
        catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            System.out.println("server.xml no find");
            e.printStackTrace();

        }
        catch (Exception e) {
            // TODO Auto-generated catch block
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值