有了静态服务器实现的基础,我们揣测一下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图来进行辅助。
整个流程就是:
从图中,我们可以看到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程序员杂谈
微信公众号:Python程序员杂谈