web開發時,一些比較重要的服務類,框架自帶類,及框架的配置讀取

我們都知道java是動態語言,用java開發的語言必須運行在web容器內,最常用的是tomcat,在開發web項目是還經常用到開源框架如JSF、struts、spring等,但當一個web應用部署啓動時都涉及那些過程以及那些主要類確知之甚少,下文只有分析,tomcat、jsf、struts、sping等重要組件的啓動過程及主類。

1 tomcat

博文TOMCAT原理以及處理HTTP請求的過程、ContextPath ServletPath中已經詳細的介紹了tomcat的各個組件,及url請求的處理過程,這裏不再詳述

只需記住,tomcat會爲每一個web應用創建一個Context容器,同時爲每個servlet創建一個wrapper容器。

1.1 - Context /tomcat中實現了一個StandardContent

一個Context對應於一個Web Application,一個Web Application由一個或者多個Servlet組成 
Context在創建的時候將根據配置文件$CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml載入Servlet類 
當Context獲得請求時,將在自己的映射表(mapping table)中尋找相匹配的Servlet類 
如果找到,則執行該類,獲得請求的迴應,並返回 

此外StandardContent還必須關聯一個session管理器。在tomcat中管理器主要是管理StandardSession,這個類繼承了servlet.http.HttpSession接口

此外我們知道tomcat在接到http請求時會創建request和response,在tomcat中會轉爲servletrequest和servletresponse對象,並在調用servlet的service方法的時候作爲參賽傳入。

StandardContext的start方法進行初始如果想了解更多關於StandardContext請看博文tomcat中StandardContext

注意這裏的standardContext對象是容器中的用於完成web應用的部署的。與ServletContext是不同的概念沒有可比性。

1.2 web.xml中的配置項

Servlet、filter、listener,servlet-mapping等,


2 servlet

2.1httpservlet

servlet是javaEE規範,我們自己寫一個servlet部署到web容器的時候必須繼承httpservlet類。類中定義瞭如init、service、doget、dopost等方法。

2.2 ServletContent:

ServletContext接口表示一個web應用的上下文。可以想象成一個web一個能用的共享數據區域,該區域保存整個web共享數據。

1.1 Servlet容器何時創建ServeltContext接口實現類

當一個web應用啓動的時候,就會創建該ServletContext接口的實現類。我們可以在根據需求,讀寫ServletContext這個web共享區的數據,那麼如何獲得ServletContext這個實例呢?下面提供了兩種方法

1.2 如何獲得ServletContext接口實例

方法1:

可以通過ServletConfig接口的getServletContext()方法獲得

方法2:

通過GenericServlet抽象類的getServletContext()方法獲得,不過這個方法其實也是調用了ServletConfig的getServletContext()方法

2.3ServletConfig

容器初始化一個servlet時,會爲這個servlet建一個唯一的ServletConfig。容器從DD讀出Servlet初始化參數,並把這些參數交給ServletConfig,然後把ServletConfig傳遞給servlet的init(ServletConfig config)方法。也就是說容器只有在創建servlet實例時纔會讀DD文件中的init-param,並且在servlet一生中只讀一次。

在實際應用過程中,爲了便於修改我們並不希望直接把某一變量硬編碼到servlet類中,這個時候就會用到ServletConfig接口。我們可以把某些變量放在DD(web.xml)中,這樣如果我們要修改某一值,可以直接改動DD文件即可。

在這裏我們來看看ServletConfig中的方法:

getInitParameter(String   name):根據給定的初始化參數,返回匹配的初始化參數值。
getInitParameterNames():返回一個Enumeration對象,裏面包含了所有的初始化參數。
getServletContext():返回一個servletContext()對象.
getServletName():返回servlet的名字,即web.xml中的<servlet-name>的子元素的值。如果沒有配置這個子元素,則返回servlet類的名字。


2.4 HttpSession

httpsession代表了一個Session回話,在tomcat中Session管理器用於維護Session,可以調用request.getsession方法得當session

2.5 HttpServletrequest與HttpServletresponse

代表了與一個客戶端的一次request請求和response返回,這兩個對象首先由tomcat創建,然後包裝成HttpServletrequest與HttpServletresponse對象傳給Servlet


3 JSF框架

JSF框架的主要實現類是javax.faces.webapp.FacesServlet,這個實現類作爲一個servlet在web.xml中配置,所有的請求都映射到這個servlet來進行處理。FacesServlet在MVC中作爲控制器部分,主要是FacesContextFactory來產生一個FacesContext的實例,之後再獲得生命週期實例,進行生命週期狀態處理。具體的生命週期請看博文:JSF生命週期總結

在使用JSF框架時如何獲得Servlet應用的各個類
  1獲得Servletcontext=(ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
  2獲得HttpServletResponse=HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();


4 struts2

struts2的主要實現類是org.apache.struts2.dispatcher.FilterDispatcher,這個類是作爲一個Filter在web.xml中配置的。

5 spring

spring的主要實現類是org.springframework.web.context.ContextLoaderListener,在web.xml中作爲一個listener配置的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章