1. 程式人生 > >Struts2中Action與Servlet的聯絡與區別

Struts2中Action與Servlet的聯絡與區別

Servlet處理客戶端請求的步驟

1、Web客戶向Servlet容器(Tomcat)發出Http請求

2、Servlet容器分析客戶的請求資訊

3、Servlet容器建立一個HttpServletRequest物件,將客戶請求的資訊封裝到這個物件中

4、Servlet容器建立一個HttpServletResponse物件 

5、Servlet容器根據請求訊息中的URL找到對應的servlet,然後針對該請求建立一個單獨的執行緒,並把HttpRequest物件與HttpResponse物件作為引數傳給新建立的執行緒中

6、容器呼叫Servlet物件的service()方法,完成對使用者請求的響應,同時把動態頁面返回給容器。

(或者是HttpServlet呼叫HttpRequest物件的有關方法,獲取Http請求資訊;呼叫HttpResponse物件的有關方法,生成響應資料)

7、Servlet容器把響應結果組裝成HTTP格式傳給Web客戶

 Struts2也是在容器上執行的,實際上雖然沒有用到Servlet,但是前四步是一樣的,會建立HttpServletRequest物件和HttpServletResponse物件,所以,在struts2.0中,可以通過ServletActionContext.getRequest()獲取request物件。

 Struts2的流程


    可以說Struts2本質還是一個Servlet(在S1中用於整體控制的是一個Servlet;S2中是一個Filter,其實也可把它看作是Servlet),只是對Servlet進一步的封裝罷了。
    打個比方:做Web專案,好比建房子。Servlet好比木材,用一根根的木材搭,也可蓋起房子,只是速度慢而已;
而Struts2好比是用木材做好的一個房子大概結構,要建房子時,只需把它拿過來,再往其裡面添磚加瓦,修修補補,就能很快蓋好房子,這要比直接使用Servlet要快得多。

優缺點

1、Servlet更隨意靈活,帶來的就是規範性差、不易解讀。

2、安全性,Servlet沒有Struts2高。Servlet可能會帶來session的亂用,造成資訊洩露。

3、維護性,struts遠勝於servlet。struts專案的程式碼分層很清晰,如果用servlet,程式碼結構不清晰,很容易引入新BUG。