顾乔芝士网

持续更新的前后端开发技术栈

适配器模式改造Servlet(GenericServlet)

适配器模式改造Servlet(GenericServlet)

GenericServlet

  • 我们编写一个Servlet类直接实现Servlet接口有什么缺点?

o我们只需要service方法,其他方法大部分情况下是不需要使用的。代码很丑陋。

  • 适配器设计模式Adapter

o手机直接插到220V的电压上,手机直接就报废了。怎么办?可以找一个充电器。这个充 o电器就是一个适配器。手机连接适配器。适配器连接220V的电压。这样问题就解决了。

  • 之前的一篇博客写到抽象类的作用:降低接口实现类与接口之间的实现难度。

o (实现类不一定需要用到接口中定义的所有方法,可以先创建一个抽象类先实现一部分方 法,留下实现类需要的方法,实现类再继承抽象类,实现需要的方法。)

  • 编写一个GenericServlet类,这个类是一个抽象类,其中有一个抽象方法service。

oGenericServlet实现Servlet接口。

oGenericServlet是一个适配器。

o以后编写的所有Servlet类继承GenericServlet,重写service方法即可


思考:GenericServlet类是否需要改造一下?怎么改造?更利于子类程序的编写?

  • 思考第一个问题:我提供了一个GenericServlet之后,init方法还会执行吗?

o还会执行。会执行GenericServlet类中的init方法。

  • 思考第二个问题:init方法是谁调用的?

oTomcat服务器调用的。

  • 思考第三个问题:init方法中的ServletConfig对象是谁创建的?是谁传过来的?

o都是Tomcat干的。

oTomcat服务器先创建了ServletConfig对象,然后调用init方法,将ServletConfig对象 传给了init方法。

  • 思考一下Tomcat服务器伪代码:


再思考一下:

  • init方法中的ServletConfig对象是Tomcat小猫咪创建好的。
  • 这个ServletConfig对象目前在inti方法的参数上,属于局部变量。
  • 那么ServletConfig对象以后肯定要在service方法中使用,怎么才能保证ServletConfig对象在service方法中能够使用呢?

o直接看代码:

再思考一下:

  • 如果继承GenericServlet的类,想要重写init方法呢?

o给init方法加上final,这样子类就无法重写init方法了。

  • 但是如果子类就是要重写init方法呢?

o解决办法:再GenericServlet类中添加一个无参的init方法,供子类进行重写。

  • 最终GenericServlet类的代码;


  • 值得庆幸的是:GenericServlet不需要我们程序员写,官方替我们写好了。


  • 可以看到官方写的GenericServlet跟我们自己写的差不多,实现的思想是一样的。
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言