使用Java如何实现一个简单的静态资源Web服务器

  介绍

本篇文章为大家展示了使用Java如何实现一个简单的静态资源Web服务器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

<强>需求

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

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

<强>难点

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

<强>代码

直接上代码吧~

进口java.io.IOException;
  进口java.io.InputStream;
  进口java.io.OutputStream;
  进口java.net.InetAddress;
  进口java.net.ServerSocket;
  进口java.net.Socket;
  进口java.nio.file.Files;
  进口java.nio.file.Path;
  进口java.nio.file.Paths;
  ,
  公开课ResourceWebServer {
  ,,,私有静态最终int SERVER_PORT=8888;
  ,,,私有静态最终int MAX_CONNECTION_LENGTH=1;
  ,
  ,,,公共静态void main (String [] args)抛出IOException {
  ,,,,,,,日志(“======服务器启动=====?;
  ,,,,,,,=new ResourceWebServer ResourceWebServer服务器();
  ,,,,,,,server.startServer ();
  ,,,}
  ,
  ,,,公共空startServer()抛出IOException {
  ,,,,,,,ServerSocket ServerSocket=考察(SERVER_PORT、MAX_CONNECTION_LENGTH InetAddress.getByName (“localhost"));
  ,
  ,,,,,,,日志(“======准备接收请求=====?;
  ,,,,,,,,(真正的){
  ,,,,,,,,,,,Socket套接字=serverSocket.accept ();
  ,,,,,,,,,,,试一试(InputStream InputStream=socket.getInputStream ();
  ,,,,,,,,,,,,,,,OutputStream OutputStream=socket.getOutputStream ()) {
  ,
  ,,,,,,,,,,,,,,,字符串requestUri=getRequestUri (inputStream);
  ,,,,,,,,,,,,,,,日志(“请求文件:“+ requestUri);
  ,
  ,,,,,,,,,,,,,,,writeheader (outputStream);
  ,
  ,,,,,,,,,,,,,,,=Paths.get路径路径(getClass () .getClassLoader () .getResource (requestUri.substring (1) .toURI ());
  ,,,,,,,,,,,,,,,文件。复制(路径,outputStream);
  ,,,,,,,,,,,}捕捉(异常e) {
  ,,,,,,,,,,,,,,,日志(“发生错误啦!“);
  ,,,,,,,,,,,,,,,e.printStackTrace ();
  ,,,,,,,,,,,}
  ,,,,,,,}
  ,,,}
  ,
  ,,,私人空间writeheader (OutputStream OutputStream)抛出IOException {
  ,,,,,,,//必须包含返回头,否则浏览器不识别
  ,,,,,,,outputStream.write (“HTTP/1.1 200 OK \ r \ n" .getBytes ());
  ,,,,,,,//一个\ r \ n代表换行添加新的头,2次\ r \ n代表头结束
  ,,,,,,,outputStream.write(“内容类型:text/html \ r \ n \ r \ n" .getBytes ());
  ,,,}
  ,
  ,,,私人字符串getRequestUri (InputStream InputStream)抛出IOException {
  ,,,,,,,StringBuilder StringBuilder=new StringBuilder (2048);
  ,,,,,,,新字节缓冲区字节[]=[2048];
  ,,,,,,,int大?read(缓冲);
  ,
  ,,,,,,,(int i=0;我和lt;大小;我+ +){
  ,,,,,,,,,,,stringBuilder.append(缓冲区(char)[我]);
  ,,,,,,,}
  ,
  ,,,,,,,字符串requestUri=stringBuilder.toString ();
  ,,,,,,,//此时的uri还包含了请求头等信息,需要去掉
  ,,,,,,,///索引。html HTTP/1.1……
  ,,,,,,,int index1, index2;
  ,,,,,,,index1=requestUri.indexOf (““);
  ,,,,,,,如果(index1 !=1) {
  ,,,,,,,,,,,index2=requestUri.indexOf (““index1 + 1);
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null

使用Java如何实现一个简单的静态资源Web服务器