热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

Java实现简单静态资源Web服务器的示例

这篇文章主要介绍了Java实现简单静态资源Web服务器的示例,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下

需求

有时候我们想快速通过http访问本地的一些资源,但是安装一些web服务器又很费时和浪费资源,而且也不是长期使用的。

这时候我们可以启动一个小型的java服务器,快速实现一个http的静态资源web服务器。

难点

其实没什么难点,主要是注意请求头和返回头的处理。然后将请求的文件以流的方式读入返回outputstream即可。

代码

直接上代码吧~

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
 
public class ResourceWebServer {
    private static final int SERVER_PORT = 8888;
    private static final int MAX_CONNECTION_LENGTH = 1;
 
    public static void main(String[] args) throws IOException {
        log("======服务器启动=====");
        ResourceWebServer server = new ResourceWebServer();
        server.startServer();
    }
 
    public void startServer() throws IOException {
        ServerSocket serverSocket = new ServerSocket(SERVER_PORT, MAX_CONNECTION_LENGTH, InetAddress.getByName("localhost"));
 
        log("======准备接收请求=====");
        while (true) {
            Socket socket = serverSocket.accept();
            try (InputStream inputStream = socket.getInputStream();
                 OutputStream outputStream = socket.getOutputStream()) {
 
                String requestUri = getRequestUri(inputStream);
                log("请求文件:" + requestUri);
 
                writeHeaders(outputStream);
 
                Path path = Paths.get(getClass().getClassLoader().getResource(requestUri.substring(1)).toURI());
                Files.copy(path, outputStream);
            } catch (Exception e) {
                log("发生错误啦!");
                e.printStackTrace();
            }
        }
    }
 
    private void writeHeaders(OutputStream outputStream) throws IOException {
        //必须包含返回头,否则浏览器不识别
        outputStream.write("HTTP/1.1 200 OK\r\n".getBytes());
        //一个\r\n代表换行添加新的头,2次\r\n代表头结束
        outputStream.write("Content-Type: text/html\r\n\r\n".getBytes());
    }
 
    private String getRequestUri(InputStream inputStream) throws IOException {
        StringBuilder stringBuilder = new StringBuilder(2048);
        byte[] buffer = new byte[2048];
        int size = inputStream.read(buffer);
 
        for (int i = 0; i  index1) {
                return requestUri.substring(index1 + 1, index2);
            }
        }
        return "";
    }
 
    private static void log(Object object) {
        System.out.println(object);
    }
}

接下来,就可以在resource文件下放入静态资源啦,比如放一个index.html

然后启动,打开浏览器输入http://localhost:8888/index.html就能看到结果了!

以上就是Java 实现简单静态资源Web服务器的示例的详细内容,更多关于java 实现web服务器的资料请关注其它相关文章!


推荐阅读
  • 本文介绍如何在Linux服务器之间使用SCP命令进行文件传输。SCP(Secure Copy Protocol)是一种基于SSH的安全文件传输协议,支持从远程机器复制文件到本地服务器或反之。示例包括从192.168.45.147复制tomcat目录到本地/home路径。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本文详细介绍了Python中文件的基本操作,包括打开、读取、写入和关闭文件的方法,并通过实例展示了如何将Excel文件转换为CSV文件以及进一步转换为HTML文件。此外,还涉及了成绩等级替换的具体实现。 ... [详细]
  • 在编写JSP代码时,遇到<frameset>标签无法正常显示的问题。经过排查,发现是由于外部嵌套了<body>标签导致冲突。本文将详细介绍问题的成因及解决方案,并提供相关参考资料。 ... [详细]
  • 本文详细介绍了如何在CentOS 7操作系统上安装和配置Grafana,包括必要的依赖项安装、插件管理以及服务启动等步骤。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 本文详细介绍了如何使用jQuery防止事件冒泡,确保子元素的点击事件不会触发父元素或祖先元素的相应事件。通过具体的代码示例和解释,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • Babylon.js 实例展示
    探索 Babylon.js 的强大功能,通过全屏演示体验其卓越性能。本文提供在线文档链接和默认渲染管线的源码调试地址,帮助您深入了解 Babylon.js 的工作原理。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 本文详细介绍了Git分布式版本控制系统中远程仓库的概念和操作方法。通过具体案例,帮助读者更好地理解和掌握如何高效管理代码库。 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 本文探讨了如何在 PHP 的 Eloquent ORM 中实现数据表之间的关联查询,并通过具体示例详细解释了如何将关联数据嵌入到查询结果中。这不仅提高了数据查询的效率,还简化了代码逻辑。 ... [详细]
  • 本文介绍了如何利用npm脚本和concurrently工具,实现本地开发环境中多个监听服务的同时启动,包括HTTP服务、自动刷新、Sass和ES6支持。 ... [详细]
author-avatar
风中冰雨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有