the5fire

关注Python、Django、Vim、Linux、Web开发、团队管理和互联网--Life is short, we need Python.


自己动手写Web服务器(二)简单的Servlet服务器

作者:the5fire | 标签:   | 发布:2011-07-31 7:18 p.m. | 阅读量: 9174, 9020
前一篇文章中,通过学习《How Tomcat Works》这本书,我们实现了简单的静态WEB服务器,今天继续复习下一篇,实现一个简单的Servlet服务器。

有了静态服务器实现的基础,我们揣测一下Servlet的实现原理,不过在此之前,我们需要了解什么是Servlet。

关于Servlet的详细定义大家上百科上去看,在这里我们只需知道Servlet是一种小的服务器端程序,担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。

从上面可知,Servlet的主要作用是同http来打交道。那么我们再来看一个简单的Servlet实现。

import java.io.*;

import javax.servlet.http.*;
import javax.servlet.*;

public class HelloServlet extends HttpServlet {
public void doGet (HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException
{
PrintWriter out = res.getWriter();

out.println("Hello, world!");
out.close();
}
}

看这段代码,其中的out.println(“Hello,world!”);显然就是在同http进行交互了。对比一下我们的静态服务器中的代码,会发现,静态服务器是通过程序把静态资源输出到客户端,而这个Serlvet本身就是程序,并且可以输出字符到客户端。
有了这些认识,Servlet服务器的实现就变得简单,为了让思路变得清晰,我们需要uml图来进行辅助。

整个流程就是:
tomcatimpl02
从图中,我们可以看到Servlet服务器的实现相比于静态服务器其实是多了一个动态加载Servlet的方法,然后再执行Servlet。
因为目前是使用javaee包中的Servlet,因此还需要将我们原先写的Request类和Response类添加对应的ServletRequest和ServletResponse实现。
具体代码就不在博客上写了,感兴趣的话可以自己下载。
TomcatImpl02.src
通过浏览器访问自己的Servlet服务器(也可以叫做容器),结果截图:

这里有一点和《How Tomcat works》书中的不同,书上提示说:“Note that you cannot see the second string Violets are blue,because only the first string is flushed to the browser.”。但是我执行的结果是两条语句都能输出。不清楚原因在哪?某非是Servlet版本的问题。
- from the5fire.com
----EOF-----

微信公众号:Python程序员杂谈


其他分类: