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。