深入剖析Tomcat-实现简单的Web服务器
来源:互联网 发布:剑三新建角色捏脸数据 编辑:程序博客网 时间:2024/05/15 23:46
在深入剖析Tomcat中,用socket实现了一个简单的服务器,服务器监听80端口,接受浏览器的请求,如果请求了静态资源,比如index.html,那么会将webroot下的静态文件index.html通过socket发送给浏览器
HttpServer程序
public class HttpServer { //静态资源目录为webroot public static final String WEB_ROOT = System.getProperty("user.dir") + File.separator +"webroot"; private static final String SHUTDOWN_COMMAND = "/SHUTDOWN"; private boolean shutdown = false; public static void main(String[] args) { System.out.println(System.getProperty("user.dir")); HttpServer server = new HttpServer(); server.await(); } public void await(){ int port =80; ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(port, 1,InetAddress.getByName("127.0.0.1")); } catch (IOException e) { e.printStackTrace(); System.exit(-1); } while(!shutdown){ Socket socket = null; InputStream input = null; OutputStream out = null; try{ socket = serverSocket.accept(); input = socket.getInputStream(); out = socket.getOutputStream(); Request request = new Request(input); request.parse();; Response response = new Response(out); response.setRequest(request); response.sendStaticResource(); socket.close(); }catch (Exception e){ e.printStackTrace(); } } }}
Request类,解析请求的url
public class Request { private InputStream input; private String uri; public Request(InputStream input){ this.input = input; } public void parse(){ StringBuffer request = new StringBuffer(2048); int i; byte[] buffer = new byte[2048]; try{ i = input.read(buffer); }catch (Exception e){ e.printStackTrace();; i = -1; } for(int j = 0; j<i;j++){ request.append((char)buffer[j]); } System.out.print(request.toString()); uri = parseUri(request.toString()); } private String parseUri(String requestString){ int index1,index2; index1 = requestString.indexOf(' '); if(index1 != -1){ index2 = requestString.indexOf(' ',index1+1); if(index2 > index1){ return requestString.substring(index1+1,index2); } } return null; } public String getUri(){ return this.uri; }}
Response类,返回数据到浏览器
public class Response { private static final int BUFFER_SIZE =1024; Request request; OutputStream output; public Response(OutputStream output){ this.output = output; } public void setRequest(Request request){ this.request = request; } public void sendStaticResource() throws IOException { byte[] bytes = new byte[BUFFER_SIZE]; FileInputStream fis = null; try{ File file = new File(HttpServer.WEB_ROOT,request.getUri()); if(file.exists()){ fis = new FileInputStream(file); int ch = fis.read(bytes,0,BUFFER_SIZE); while(ch != -1){ output.write(bytes,0,ch); ch = fis.read(bytes,0,BUFFER_SIZE); } }else { String errorMessage = "HTTP/1.1 404 File Not Found\r\n"+ "Content-Type: text/html \r\n" + "Content-Length: 23\r\n"+ "\r\n"+ "<h1>File Not Found</h1>"; output.write(errorMessage.getBytes()); } }catch (Exception e){ System.out.println(e.toString()); }finally { if(fis !=null){ fis.close(); } } }}
服务器截图
浏览器截图
从上面的程序来看,浏览器发送的数据最终也是通过socket发送的,服务器程序监听端口,然后收到浏览器发送的头信息。然后吧index.html的内容用outputstream流发送到浏览器
阅读全文
0 0
- 深入剖析Tomcat-实现简单的Web服务器
- 深入剖析tomcat(一)--一个简单的web服务器
- 深入剖析Tomcat 第一章 一个简单的Servlet服务器
- 深入剖析Tomcat 第二章 一个简单的Servlet服务器
- 《深入剖析Tomcat》一 Web服务器
- [深入剖析Tomcat]一个简单的servlet容器实现
- [深入剖析Tomcat]一个简单的servlet容器实现2
- 深入剖析Tomcat-一个简单的servlet容器
- 剖析web服务原理--简单的Web服务器模拟
- 简单的web服务器实现
- 实现简单的web服务器
- 实现简单的Web服务器
- 简单的web服务器实现
- 自定义简单的(tomcat)web服务器
- Tomcat-001-一个简单的web服务器
- 自定义简单的(tomcat)web服务器
- 深入剖析Spring Web源码(四) - DispatcherServlet的实现
- twisted 实现简单的web服务器
- h.264
- 浅谈sublime常用快捷键
- UVA
- 2D Rotatinal Dynamics
- c语言排序实例(选择、冒泡、插入、折半、快速)
- 深入剖析Tomcat-实现简单的Web服务器
- Java基础之集合
- 项目采购管理脉络
- 六. NAL Unit格式解析
- Spring和Servlet的整合
- 【LeetCode】数组系列(间隔)
- HEXO搭建个人博客(二):Github上场
- Maven学习总结(5)——聚合与继承
- Simulink仿真时AWGN中的信噪比SNR