Servlet 及 請求轉發與重定向
Java編寫的服務器端程序,處理客戶端的http請求並將其結果發送到客戶端。
Servlet容器Tomcat:
最熟悉的是容器就是tomcat。在tomcat中,server-包含-service-包含-connector+container+other
最核心的組件:
Connector:接收TCP請求,創建response和request對象,分配線程給container處理
Container:servlet容器,責任鏈模式的子容器:engine--host--Context--wrapper
一個wrapper負責一個servlet,裝載,初始化,執行,回收
Context是運行
生命周期:Lifecycle接口控制,最高組件是server,所以server.startup;server.shutdown;
Servlet,Filter,Listener:
一個應用的初始化入口是web.xml,首先需要將其中各個配置項屬性設置到Context容器中,包括servlet,filter,listener。
Servlet:
方法:init();如果不設置load-on-startup,則在被調用之後才初始化
service();參數:ServletRequest,ServletResponse
destroy();
如何找到正確的servlet(即wrapper容器)並且執行它?
Tomcat7中,由一個http.mapper類管理,它保存了所有子容器信息。
mapper類為什麽可以保存所有子容器信息?
將mapperListener類作為一個監聽者加到每個子容器中。
Filter:攔截 請求和響應發送到servlet之前被調用
方法:
init();容器啟動後即初始化
doFilter();參數:ServletRequest
destroy()
在<servlet-mapping>和<filter-mapping>中都有<url-pattern>配置項,servlet-mapping中以url配置,filter-mapping中以url或者servlet名稱配置。
Listener:監聽 1.生命周期的變化 2.屬性的變化
Servlet的請求轉發與重定向:
Servlet可以將發送給自己的某個請求轉發給另外一個url地址,這個地址可以是html,jsp,servlet等。
1. 轉發,forward()
request.getRequestDispatcher (“/url"). forward(request, response);//轉發到url
轉發在服務器端完成,瀏覽器並不知道這個操作,瀏覽器的地址欄不改變,並且轉發和轉發到的界面可以共享request裏的數據。
2. 重定向,sendRedirect()
response.sendRedirect(“request.getContextPath()+/url"); //重定向到url,客戶端第二次發送請求會直接請求服務器根目錄,所以需要getContextPath得到當前容器目錄
服務器返回一個重定向路徑,客戶端重新發出請求,瀏覽器的地址欄改變,request中的變量全部失效,兩個界面不能共享數據。
Servlet 及 請求轉發與重定向