成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Servlet與模板方法模式的講解

開發 后端
我們知道在手寫Servlet方法時,會繼承父類HttpServlet,這樣我們創建的類就會繼承HttpServlet,我們知道在HttpServlet中有幾個很重要的方法,一個是doPost()方法,一個是doGet()方法,還有一個是Service()方法,當我們在調用自己寫的MyServlet方法時,系統會默認調用doGet()方法,為什么呢?

這年頭大家都用struts,或者其他MVC框架,很少有人直接用Servlet了吧,但是相信大部分人都應該知道怎么寫Servlet的吧,繼承 HttpServlet類,覆蓋里面的doGet、doPost方法即可,大部分情況下,我們都是對GET和POST一樣處理,一般也就這么寫了:

 

  1. public MyServlet extends HttpServlet{  
  2.     public void doGet(HttpServletRequest request, HttpServletResponse response){  
  3.         // 處理  
  4.     }  
  5.     public void doPost()HttpServletRequest request, HttpServletResponse response){  
  6.         // 不關心get、post請求,因此post處理直接調用get處理  
  7.         doGet(request, response);  
  8.     }  
  9. }  

Servlet只要在web.xml中部署好之后,就可以處理瀏覽器的請求了。上面代碼可以看出來,doGet方法處理瀏覽器的GET請求,doPost處理POST請求。

Servlet是由Tomcat之類的servlet容器來調用處理瀏覽器請求的,并需要集成基類HttpServlet,如果大家查看HttpServlet源碼的時候,就會發現,其實里面有一個

protected void service(HttpServletRequest req, HttpServletResponse resp)

方法,servlet容器實際調用的是service方法,service方法的實現就是根據HTTP請求的類型(GET、POST,還是其他),將處理委派給doGet、doPost等方法,由這些子類的方法來最終處理瀏覽器的請求。

由此可以看出,HttpServlet定義了一個處理的框架或者說模板,實現Servlet只需繼承HttpServlet并實現doGet、doPost等方法即可。

是引出模板方法模式定義的時候了,模板方法模式:在一個方法中定義一個算法的骨架,將某些步驟推遲到子類中實現。模板方法允許子類重新定義算法的某些步驟,而不改變算法的結構。

簡單UML類圖如下:

 

 

簡單實現一個抽象類:

 

  1. public abstract Template{  
  2.     public void final templateMethod(){  
  3.         step1();  
  4.         step2();  
  5.         hook();  
  6.     }  
  7.     public abstract void step1();  
  8.     public abstract void step2();  
  9.     public void hook(){}  

這個抽象類,定義了一個算法的骨架,需要step1、step2,都是抽象方法,需要子類來實現。而templateMethod是final的,即不允許子類覆蓋。其中定義了方法的步驟,step1、step2。

如下為具體實現:

 

  1. public ConcreteTemplate extends Template{  
  2.     public void step1(){System.out.println("step1");}  
  3.     public void step2(){System.out.println("step2");}  
  4.     public void hook(){System.out.println("hook");}  
  5.     public static void main(String[] args){  
  6.         Template temp = new ConcreteTemplate();  
  7.         temp.templateMethod();  
  8.     }  

可以看到其中加入了一個hook方法,即鉤子方法。hook方法在抽象類中的實現為空,是留給子類做一些可選的操作。如果某個子類需要一些特殊額外的操作,則可以實現hook方法,當然也可以完全不用理會,因為hook在抽象類中只是空方法而已。

其他擴展:

1.可以定義多個hook方法

2.hook方法可以定義一個返回為boolean的方法,有子類來決定是否調用hook方法。

eg:抽象類的templateMethod可以這樣實現:

 

  1. public void final templateMethod(){  
  2.         step1();  
  3.         step2();  
  4.         if(allowHook())  
  5.             hook();  
  6.     }  
  7.     public boolean allowHook(){return true;}  
  8.     public void hook(){}  

子類中可以覆蓋allowHook,以決定是否調用hook方法。

3.抽象類定義的步驟,可以有默認實現,而非全是abstract方法。HttpServlet中已經有doGet、doPost等方法的默認實現,大家可以參考其源碼實現。

更好的一個模板方法的例子是Applet,實現自己的Applet,必須繼承自Applet,里面實現init、start、stop、destroy等方法即可。這些方法都是有默認實現的,如果看源碼,可以發現默認實現其實都是空。

責任編輯:金賀 來源: JavaEye博客
相關推薦

2023-12-12 11:09:55

模板方法模式python設計模式

2009-07-09 16:57:03

Servlet與App

2012-07-11 08:51:51

設計模式

2013-11-26 17:15:13

Android設計模式

2023-05-15 08:38:58

模板方法模式

2009-07-09 11:21:40

Servlet注冊

2024-02-21 12:24:33

模板設計模式框架

2009-07-06 16:16:33

Servlet容器工作

2009-07-07 16:23:05

Servlet容器

2009-07-08 15:59:55

doFilter方法

2023-10-27 08:34:46

PythonJava優勢

2009-07-08 16:19:41

Servlet ConServlet Con

2009-07-08 15:01:00

Servlet的作用

2009-07-09 14:32:39

2009-06-30 10:33:00

JSP JavaBeaServlet

2009-07-03 17:24:31

Servlet頁面跳轉

2009-07-03 18:14:27

Servlet線程安全

2009-07-03 13:22:37

調用Servlet

2009-07-06 16:59:16

Servlet方法

2009-07-10 11:07:00

WebWork注入Servlet方法
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄色网址免费在线观看 | 黄色网址在线免费播放 | 欧美不卡一区二区 | 欧美a级成人淫片免费看 | 日韩在线视频一区 | 波多野结衣av中文字幕 | 国产精品久久久久久久一区探花 | 精品视频一区二区三区在线观看 | 欧美精品久久久久久久久久 | 日韩中文字幕在线观看 | 日韩精品免费一区二区在线观看 | 亚洲综合在线视频 | 中文字幕一区二区三区四区五区 | 九九亚洲 | 国产精品免费一区二区三区四区 | 国产免费人成xvideos视频 | 欧美日韩国产在线观看 | 亚洲一区二区 | 在线国产视频 | www.久久久久久久久久久 | 波多野结衣一区二区三区在线观看 | 久久久久久国产精品三区 | 午夜在线小视频 | 国产2区| 国产亚洲精品91 | 欧美精品一二区 | 美女视频一区 | a免费视频| 欧美成人自拍 | 国产精品五区 | 黄色片在线网站 | 国产欧美一区二区三区日本久久久 | 亚洲人在线观看视频 | 中午字幕在线观看 | 中文字幕欧美日韩一区 | 啪啪免费 | 欧美一区二区三区在线免费观看 | 黄色大片免费网站 | 97伦理| 欧美日韩激情 | 国产精品高潮呻吟久久 |