Servlet與SpringMVC內部實現

Jsp
表達式<%= %>
指令page/include
動做<jsp:useBean>/param/include/plugin/setProperty......等
對象application 對象是 javax.servlet.ServletContext 類的實例
對象config 對象是 javax.servlet.ServletConfig 類的實例
對象pageContext 對象是 javax.servlet:jsp.pageContext 類的一個實例
對象request/response/out/session/pageContext/page/config/application
Servlet
1.javax.servlet   其中包含定義servlet和servlet容器之間契約的類和接口。
2.javax.servlet.http   其中包含定義HTTP Servlet 和Servlet容器之間的關係。
3.javax.servlet.annotation   其中包含標註servlet,Filter,Listener的標註。它還爲被標註元件定義元數據。
4.javax.servlet.descriptor,其中包含提供程序化登陸Web應用程序的配置信息的類型。
繼承關係Servlet
Servlet ServletConfig ServletContext頂層接口
↑ ↑ ↑
(GenericServlet實現類) ServletRequest ServletResponse JspPage ServletException ServletOutputStream Filter接口,並無繼承
↑ ↑ ↑ ↑
httpServlet httpServletRequest httpServletResponse httpJspPage httpSession(引用ServletContext)前端

 


DispatcherServlet封裝了httpServlet(httpServlet->httpServletBean->frameworkServlet->DispatcherServlet)
DispatcherServlet就是一個前端控制器(接收request,進行response),集中提供請求處理機制。將url映射到指定的Controller處理,Controller處理完畢後將ModelAndView返回給DispatcherServlet,DispatcherServlet經過viewResovler進行視圖解析,而後將model填充到view,響應給用戶
DispatcherServlet類的內部實現
HandlerMapping處理器映射器:根據url查找Handler。(能夠經過xml配置方式,註解方式)
HandlerAdapter處理器適配器:根據特定規則去執行Handler,編寫Handler時須要按照HandlerAdapter的要求去編寫。
Handler處理器(後端控制器):須要程序員去編寫,經常使用註解開發方式。
Handler處理器執行後結果是ModelAndView,具體開發時Handler返回方法值類型包括:ModelAndView、String(邏輯視圖名)、void(經過在Handler形參中添加request和response,相似原始 servlet開發方式,注意:能夠經過指定response響應的結果類型實現json數據輸出)
View Resolver視圖解析器:根據邏輯視圖名生成真正的視圖(在springmvc中使用View對象表示)
View視圖:jsp頁面,僅是數據展現,沒有業務邏輯。java

Springmvc中封裝request(RequestMappingHandlerMapping)都有實現HandlerMapping
Springmvc中封裝request都有實現也InitializingBean接口,位於org.springframework.beans.factory
Springmvc中封裝request都有實現也Aware接口,實現了Aware系列接口的bean能夠訪問Spring容器。這些Aware系列接口加強了Spring bean的功能,用於輔助Spring Bean以編程的方式調用Spring容器,也位於org.springframework.beans.factory程序員

org.springframework.context.ApplicationContextAware接口
Spring框架啓動時,ApplicationContext初始化實現了該接口的Spring Bean時,會將ApplicationContext的引用做爲參數傳遞給建立的Bean實例,建立的Bean實例能夠經過ApplicationContext的引用操做Spring框架的各類資源。spring

做用與@Autowired標註相似。位於org.springframework.beans.factory.annotation.Autowired
LoadTimeWeaverAware,加載Spring Bean時織入第三方模塊,如AspectJ
BeanClassLoaderAware,加載Spring Bean的類加載器
BootstrapContextAware,資源適配器BootstrapContext,如JCA,CCI
ResourceLoaderAware,底層訪問資源的加載器
BeanFactoryAware,聲明BeanFactory
PortletConfigAware,PortletConfig
PortletContextAware,PortletContext
ServletConfigAware,ServletConfig
ServletContextAware,ServletContext
MessageSourceAware,國際化
ApplicationEventPublisherAware,應用事件
NotificationPublisherAware,JMX通知
org.springframework.beans.factory.BeanNameAware,聲明Spring Bean的名字編程


這時程序處理完後返回頁面
InternalResourceViewResolver查看是實現了ViewResolver接口,和Ordered接口,顧名思義,就是用來排序的。
Spring就提供了Ordered這個接口,來處理相同接口實現類的優先級問題。
而後ViewResolver解析爲JstlView、View對象,該類AbstractView實現了View接口,View接口的主要做用是用於處理視圖,而後返回給客戶端。
1. ViewResolve的做用就是經過解析MdoelAndView,將MdoelAndView中的邏輯視圖名變爲一個真正的View對象,並將MdoelAndView中的Model取出
2. View的做用就是在獲取到ViewResolve傳來的View和Model,對Model進行渲染,經過View對象找到要展現給用戶的物理視圖,將渲染後的視圖展現給用戶。用很直白的話將就是將數據經過request存儲起來,找到要展現給用戶的頁面,將這些數據放在頁面中,並將頁面呈現給用戶。
-----------------json

相關文章
相關標籤/搜索