Servlet容器原型(一)—— 一个简单的Servlet容器

     在javax.servlet.servlet中的Servlet接口,声明有5个方法,签名如下:

public void int(ServletConfig config) throws ServletException;
public void service(ServletRequest request, ServletResponse reesponse) 
    throws ServletException, IOException;
public vid destroy();
public ServletConfig getServletConfig();
public String getServletInfo();

      这个5个方法中,init(), sercie(), destroy() 是与servlet的声明周期相关的。当实例化某个servlet类后,servlet容器会调用其init()方法进行一次,并且在这个生命周期内只调用一次。在servlet接受任何请求之前,必须色经过正确实例化的。而一个请求到达servlet的时候,容器就调用其service()方法,并将 javax.servlet.servletRequst对象和 javax.servlet.servletResponse对象作为参数传入。在将servet从服务器中移除前,servlet容器会调用servet实例的destroy()方法,这时候就有机会让servlet对象去清除自身持有的资源。一般是容器关闭,或者是servlet容器内存要回收的时候,才会将servet实例移除。

      一般定义一个Servlet只要实现Servlet接口即可。如下:

public class PrimitiveServlet implements Servlet{
    public void init(ServletConfig config) throws ServletException{
        System.out.println("init.");
    }
    
    public void service(ServletRequest request, ServletResponse response) 
        throws ServletException, IOException{
        System.out.println("service");
        PrintWriter pw = request.getWriter();
        pw.println("Hello, Red Rose.");        
    }
    
    public void destroy(){
        System.out.println("destroy");
    }
    
    /* 还有两个方法没补充 */
}


那么如何使用这个Servlet呢,下面我们来构造一个简单的Servlet容器。下面是UML类图

133321_ap7H_265349.jpg


简单分析一下流程:

       在HttpServer1中负责处理客户端连接,为每个连接生成请求Request和响应Response实例,通过request的URI类型来判断是请求是不是一个Servlet,如果是,将其交给ServletProcessor的process()方法,将request和response作为参数传入。

        先撇开一下,说起Request和Response。它们就分别代表了服务器端为请求和响应生成的结果,里面自然包含有一些属性了,那么能够设置与返回这些属性呢?典型的Java服务器端开发都离不开Socket与SocketServer,没错,就是用取得的代表客户连接的Socket来取得输入输出流,进而获得那些客户端的参数的。那么请求当然包括有就解析的部分啦,Request里面就有一个简单的parse()方法。

        回来,在Request与Response交由ServletProcessor中的process()方法后,就开始加载这个Servlet,这个Servet就是我们的PrimiteServlet了。加载当然是从class文件做起,也就是说要用到ClassLoader了,加载完成之后反射生成Servlet实例,接着调用Servlet实例的service()方法,传入request和response,服务器端的开发人员的处理工作就开始了。




转载于:https://my.oschina.net/zjh92119/blog/203612

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值