越想構建上層建築,就越覺得底層基礎很重要。補課系列。
書是良心書,就是太基礎了,正適合補課。
【純文字版】
Tomcat與Java Web
開發技術詳解
Servlet
Servlet的生命周期
初始化
1Servlet容器加載Servlet類
2Servlet容器創建ServletConfig,初始化配置信息
3Servlet容器創建Servlet對象
4Servlet容器調用Servlet對象的init(ServletConfig)
時機:首次被請求或配置了<load-on-startup>
運行時
接收請求封裝ServletRequest和ServletResponse
調用service()
通過ServletResponse生成響應結果
銷毀
調用destroy()
銷毀Servlet對象
銷毀對應的ServletConfig
應用的上下文SerletContext
一個webapp對應一個SerletContext
監聽接口ServletContextListener
contextInitialized(ServletContextEvent)
contextDestroyed(ServletContextEvent)
HttpSession的生命周期
創建
瀏覽器首次訪問該應用
瀏覽器上次的會話已銷毀,但再次訪問該應用
瀏覽器訪問時不帶上次會話的ID
銷毀
服務器調用invalidate()
會話過期
服務器無法直接知道瀏覽器已終止
setMaxInactiveInterval(int)
作用范圍
request.getSession()
只要能取到會話對象,就能共享會話的數據
會話的監聽接口
配置中web.xml
HttpSessionListener監聽創建與銷毀
HttpSessionAttributeListener監聽屬性變化
作為屬性對象存入會話
HttpSessionBindingListener監聽屬性的綁定情況
HttpSessionActivationListener監聽會話激活與擱置
過濾器
按web.xml中的順序串聯調用
chain.doFilter()遞歸調用
調用關系為filter1->filter2->...->servlet
此后的返回是filter1<-filter2<-...<-servlet
req和resp包裝為ServletRequestWrapper和ServletResponseWrapper
web.xml
加載順序
ServletContext(context-parm)->Listener->Filter->Servlet
其他(略)
Tomcat
三種工作模式
standalone
JVM->Tomcat->Servlet容器
其他服務器進程內容器(JNI)
Tomcat分為web插件和Servlet容器兩部分
容器組件運行在其他服務器內的JVM
web插件也在該服務器中
web插件通過JNI調用容器組件
其他服務器進程外容器(IPC)
Tomcat分為web插件和Servlet容器兩部分
容器組件運行在獨立JVM
服務器不需要支持Servlet
web插件運行在服務器中
web插件通過IPC調用容器組件
server.xml
Server, Service, Engine, Host(略)
Context
className:可指定實現類
path:應用的URL入口
docBase:應用的文件路徑
reloadable:自動監測更新並重新加載(但增加運行負荷)
cookies:允許以Cookie來支持Session
useNaming:支持JNDI
Manager會話管理器
默認StandardManager
可加入Memcached的類包實現集中式會話管理
Cluster集群
Engine中加入<Cluster>並配置DeltaManager(或其他實現)
在應用的web.xml中啟用<distributable/>
存入會話的屬性要實現序列化接口
網絡環境支持組播
Connector
監聽端口
AJP協議
配置SSL
JK連接器
通過AJP協議訪問Tomcat
作為插件可以集成在Apache,IIS等服務器中
Relm安全域
在Tomcat層面實現鑒權
有配置文件、JDBC、DataSource等不同的實現
Valve閥
有Engine、Host和Context三種作用范圍
Tomcat自帶的實現
客戶訪問日志閥
遠程地址過濾器
遠程主機過濾器
客戶請求記錄器
SSI(Server Side Include)
常用於網頁的拼接,比如header和footer
只提供了一些簡單的指令
以SSIServlet的形式實現
Web應用的
幾種調用方式
EJB
JavaEE應用結構
客戶層(browser或client)
Web層(JSP和Servlet)
業務層(EJB)
會話Bean-邏輯
有狀態
無狀態
實體Bean-實體
EIS層(數據庫)
接口
Remote接口EJBObject
Home接口EJBHome
Bean類實現SessionBean並對Remote接口做具體實現
技術棧
服務器:JBoss
調用方式:RMI
SOAP
WebService
SOAP:基於XML語言的數據交換協議
WSDL:基於XML語言的web服務描述語言
通信協議
HTTP/HTTPS
SMTP/POP3
調用方式
RPC
Message-Oriented
技術棧
Web服務框架:Apache AXIS
服務器:Tomcat
MVC模式
層次
模型:業務邏輯
視圖:用戶呈現
控制器
接收用戶請求
調用模型響應用戶請求
選擇視圖顯示響應結果
優點:3個模塊相互獨立,松耦合
JSP Model 2
Servlet作為控制器
JavaBean作為模型
JSP作為視圖
Struts
實現MVC的web框架
控制器
FilterDispatcher+struts.xml把請求轉發給對應的各個Action
Action類側重於控制程序的流程
Velocity
模板語言的作用:將Java代碼從Web頁面中分離出來
引擎的使用
Servlet類繼承VelocityServlet
覆蓋handleRequest方法
把變量存入Context對象
返回指定模板文件
課外補充:遠程通信的幾種方式
RPC:遠程過程調用
TCP連接
應用層尋址(比如HTTP的URI地址)
請求和響應的序列化和反序列化
RMI遠程方法調用
僅限於Java語言
強對象
WebService
HTTP連接
SOAP協議
基於XML
restful風格
面向資源的GET/POST/PUT/DELETE操作
(常使用基於JSON的數據交換)
JMS
Java消息服務
JSP與JSTL(略)