Servlet实现实例

来源:互联网 发布:js中获取php变量 编辑:程序博客网 时间:2024/04/26 16:28

Servlet实现实例

Servlet简单实现

之前在图书馆看了一下《深入剖析Tomcat》前两章,对于Servlet的一种简单的实现方式复述一下。

Java Servlet是用java编写的服务器程序。狭义上就是指java程序接口。在Servlet.jar就有Servlet接口,ServletRequest接口,以及ServletResponse接口。这些接口跟平时写Tomcat的是有类似的,平时用的比较多的都是HttpServlet,HttpResponse,HttpRequest。

首先先介绍一下Servlet接口

public void init(ServletConfig config ) throws ServletExceptionpublic void service(ServletRequest request,ServletResponse response) throws ServletException, java.io.IOExceptionpublic void destroy()public ServletConfig getServletConfig()public java.lang.String getServletInfo()

上面几个接口中,init、service、destory是属于Servlet的生命周期接口。在Servlet第一次实例化的时候,init函数会被调用(之调用一次),service是每次会被调用,相当于每次服务都会被调用。destroy是在servlet会被容器移除的后被调用。在所有线程中运行完Service方法或者超时运行后执行。

可以用Socket实现一种简单的Servlet服务器。下面给出一个简单的Servlet服务器应用UML图:

此处输入图片的描述

如图所示,ServletServer作为服务器类,接收外部发过来的请求,用socket实现,其核心代码可以简略实现如下:

ServerSocket server = null ;server = new ServerSocket(port,1,InetAddress.getByName("127.0.0.1") //第二个参数表示接受等待请求的队列长度,超过长度将会失败Socket socket = server.accept();InputStream input = socket.getInputStream();OutputStream output = socket.getOutputStream();Request request = new Request(input);Response response = new Response(output);Processer processer ; processer.process(request,response);

利用Processer来处理请求,在processer中可以分开处理静态页面(如html,图片等等),处理动态请求,如servlet请求,/servlet前缀。把动态网站请求交给指定的servlet处理。比如把/servlet/hello交给HelloServlet处理。

HelloServlet helloservlet = HelloServlet.class.newInstance();helloservlet.init();helloservlet.service(request,response);

当然在调用service函数之前,还得检查HelloServlet实例是否已经存在了。如果第一次实例化,还得init,上面的代码只是非常简单的伪代码的。

另外Request跟Response分别实现输入输出地解析和封装,这样一来,一个简单到极致的servlet服务器就实现了。
实际上面,还是有很多东西需要考虑的,像下面这些很容易想得到的:

  • url跟servlet的对应,这个就可以单独作为一个部分来处理。
  • servlet实例的保存,以及移除。保持servlet的生命周期的正确性。
  • request,response对输入输出流的封装。

Tomcat结构

实现上面的那些功能也是一个很简单的服务器,是一个简单到连个http都没支持的服务器。像tomcat那种服务器,功能就复杂地多了,但是也可以像这么个小例子一样去简单化理解。
Tomcat服务器包括两个主要的模块:连接器,容器。
如果从上到下,Tomcat大概可以如下面组成:

Server->Service:Service->Engine:Engine->Host:Host->Context:

这个在Tomcat的Server.xml文件中可以看出。类似于层层包含的关系。

架构思考

上面就是一个简单的服务器,简单的仅供理解的服务器。但是麻雀虽小五脏俱全,该有的基本都有了。完全可以在那个小小的部分的基础上扩展成一个完整地,能够实用的服务器。

如果把上面的小服务器,看做是一个架构的设计,其实也是一个非常好的例子的。扩展Servlet接口来实现不同的功能接口,也可以扩展Servlet,得到HttpServlet来支持Http功能,而实际上的服务器也确实是那么干的。

我们在开发服务器应用程序的时候,通过request获取请求参数,也是通过扩展得来得。

其实这个例子是我从书上看过来的,但是也是有一些小得变得,我的更加简单了。架构是一件很美妙的东西,如果架构设计的好,很多负载的问题能够变得简单。


耐心,计划,完成

0 0
原创粉丝点击