介绍
本篇文章为大家展示了使用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服务器