进来在看《How Tomcat Works》这本书,将读书笔记贴在这里,好记性不如烂笔头。
最简单的一个服务器,一个很简单的结果。
HttpServer构建ServerSocket,每次当请求到来是创建一个Socket,并创建Request,Response对象,根据URI读取位于WebRoot底下的静态资源。
类如下:
package com.ex01.pyrmont;
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.net.UnknownHostException;
public class HttpServer {
public final static String WEB_ROOT = "webRoot";
public final static String SHUT_DOWN = "/SHUTDOWN";
private boolean shutdown = false;
public static void main(String[] args) {
HttpServer httpServer = new HttpServer();
httpServer.await();
}
public void await() {
int port = 8080;
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(port,1,InetAddress.getByName("127.0.0.1"));
} catch (UnknownHostException e) {
e.printStackTrace();
System.exit(1);
} catch (IOException e) {
System.exit(1);
}
Socket socket = null;
InputStream input;
OutputStream out;
while(!shutdown){
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();
input.close();
out.close();
socket.close();
shutdown = request.getUri().equals(SHUT_DOWN);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package com.ex01.pyrmont;
import java.io.IOException;
import java.io.InputStream;
public class Request {
private InputStream input;
private String uri;
public Request() {}
public Request(InputStream input){
this.input = input;
}
public void parse(){
StringBuffer buffer = new StringBuffer(2048);
byte[] buf = new byte[2048];
int len = 0;
try {
len = input.read(buf);
} catch (IOException e) {
len = 0;
e.printStackTrace();
}
for(int i = 0; i < len; i++){
buffer.append((char)buf[i]);
}
uri = parseUri(buffer.toString());
}
private String parseUri(String uriStr){
int spaceIndex = uriStr.indexOf(" ");
if(spaceIndex != -1){
int spaceSecondIndex = uriStr.indexOf(" ", spaceIndex + 1);
if(spaceSecondIndex > spaceIndex){
return uriStr.substring(spaceIndex + 1,spaceSecondIndex);
}
}
return null;
}
public String getUri(){
return uri;
}
}
package com.ex01.pyrmont;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
public class Response {
public final static int BUFFER_SIZE = 2048;
private OutputStream out;
private Request request;
public Response() {}
public Response(OutputStream out) {
this.out = out;
}
public void sendStaticResource() throws IOException {
String uri = request.getUri();
FileInputStream fis = null;
File file = new File(HttpServer.WEB_ROOT, uri);
if (file.exists()) {
fis = new FileInputStream(file);
byte[] buf = new byte[BUFFER_SIZE];
int len = fis.read(buf);
while (len != -1) {
out.write(buf, 0, len);
len = fis.read(buf);
}
} else {
// file not found
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>";
out.write(errorMessage.getBytes());
}
if(fis != null){
fis.close();
}
}
public void setRequest(Request request) {
this.request = request;
}
}
上面的程序比较简单,但也有一定的问题:
1. 比如获取URI的过程,感觉就很不好,没有一定的容错性
2. 异常的处理比较混乱等
虽然这些tomcat都得到了很好的处理,并且有很多值得借鉴的地方,但是思考一下到后面估计和它有一定的共鸣。
源码在google这里面有
http://www.google.com/codesearch/p?hl=en&sa=N&ct=rx&cd=9#X8Q3DKkF7lI/HowTomcatWorks/:java
分享到:
相关推荐
《How Tomcat Works》这本书是理解Apache Tomcat服务器工作原理的重要资源,第三章主要探讨了Tomcat的架构和核心组件。以下是对这部分内容的详细解读: Tomcat作为一款开源的Java Servlet容器,其核心功能是解析...
java版五子棋源码HowTomcatWorks 《How Tomcat Works》 every chapter demo . Here's my ebook: Part of the UML diagram is as follows. 1.The default connector class diagram: 2.The class diagram of ...
《How Tomcat Works》是一本经典的书籍,详细解释了Tomcat的工作原理,对于理解其内部机制非常有帮助。 Tomcat的核心功能可以分为几个主要部分: 1. **Catalina**:这是Tomcat的主要组件,负责Servlet和JSP的处理...
《How Tomcat Works》中文版笔记详细介绍了Apache Tomcat的内部架构和运行机制,Tomcat是一个广泛使用的Java开源Web服务器和Servlet容器,它为处理基于Java的Web应用提供平台。本书不仅深入分析了Tomcat的核心组件和...
第十一章StandardWrapper 第十二章StandardContext 第十三章主机和引擎 第十四章服务器组件和服务组件 第十五章消化器库 第十六章关闭钩子 第十七章启动Tomcat 第十八章部署器 第十九章Manager应用程序的servlet类 ...
#### 1.12《How Tomcat Works》读书笔记(一) - **整体架构**:介绍了Tomcat的基本架构,包括Server、Service、Connector和Container等组件。 - **工作原理**:深入剖析了Tomcat如何处理客户端请求的过程,包括...
8. **《How Tomcat Works》读书笔记** 这一系列笔记详细介绍了Tomcat的工作原理,包括Connector如何处理网络连接,Container如何管理Servlet,以及默认的Connector和容器配置。通过阅读这些笔记,可以深入理解...
《How Tomcat Works》这本书是理解Tomcat工作原理的重要参考资料。书中详细介绍了Tomcat如何处理HTTP请求,如何加载和执行Servlet,以及它是如何管理线程和内存的。通过阅读这本书,你可以深入理解Tomcat的内部架构...
选中“Choose the file to view”列表下的任何一个文件,然后点击【View File】,用WebScarab工具截获向服务器发送的请求,如图所示:修改File的Value值为tomcat/conf/tomcat-users.xml,显示访问出错,因为当前路径...
tomcat-work 是《How Tomcat Works》的代码,可惜是Jdk1.4的,也可以作为学习用。 ###分布式小框架Demo gh-soa 作为服务端 gh-soa-remote gh-web 作为客户端,通过hessian访问soa。 帮别人弄的一个框架Demo、基于...
Books中存放分布式技术学习和书籍阅读后笔记、总结和一些面试搜集的问题,具体查看Books中ReadMe.md Internet中存放分布式技术等相关的学习总结 JUC中存放系列学习内容,包括系列学习总结+优秀博文搜集等 Collection...