Tomcat源码学习:一个最简单的“Tomcat”

        花了不少时间看了Tomcat7的源码,相结合《HowTomcatWorks》这本书学到的内容,感觉认识了不少知识。写些文章总结一下,以免过后忘记了。

 

        Tomcat的两个重要组件:容器(Container)连接器(Connector),是我这次学习源码过程中,主要研究的内容。Tomcat是一个复杂的Servlet容器,但是,简单来说它有3个基本任务,对于每个从客户端发来的请求,Tomcat都会为其完成以下3个操作:

        1、根据从socket传入的信息(解析socket的InputStream),创建一个request对象,用可能会在Servlet中使用到的信息来填充该request对象,如参数、头、cookies、查询字符串、URI等。request对象是javax.servlet.ServletRequest接口或javax.servlert.http.ServletRequest接口的实例。

        2、创建一个Response对象,用来向Web客户端发送响应,返回信息。response对象是javax.servlet.ServletResponse接口或javax.servlert.http.ServletResponse接口的实例。

        3、调用Servlet的service(request,response)方法,Servlet将从request中读取需要的信息,并通过response对象发送响应信息。

 

        简单地说,Tomcat的连接器和容器,就是完成上面三个步骤的组件。连接器负责接收Web客户端发来的请求,然后处理请求,生成request和response对象,并把这两个对象传给容器。容器负责加载Tomcat中的web程序、加载web程序中的Servlet、jsp等。当连接器调用容器来执行Servlet时,容器找出需要调用的Servlet并执行Servlet的service(request,response)方法。

 

        Tomcat的容器和连接器其实挺复杂、强大,但是就不在本文中详细解析了。本文只是举个简单栗子说明一下Tomcat是如何接收客户端信息并调动Servlet的。

        下面是我结合《HowTomcatWorks》这本书中的代码,写的一个简单的“Tomcat”程序,它可以向Web浏览器返回程序webapps文件夹下的静态文件和执行Servlet。程序项目的结构如图:


com.st.connector包是Connector的实现;com.st.container包是Container的实现;startup包是启动程序用的。

webapps文件夹下是一个模拟的web程序,包含一个Servlet类和3个静态文件。当程序启动时,Container会加载webapps文件夹下的Servlet。 当运行程序时,在浏览器中输入http://localhost:8080/HelloServlet,则会调用HelloServlet。当输入http://localhost:8080/时,默认显示index.html。http://localhost:8080/brazil.jpg,浏览器展示五星巴西。当输入的路径不存在时,提示404 。

项目源码可以在附件中下载:SimpleTomcat.rar

 

源码挺简单,就不详细说明了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值