今天的課堂筆記(經過部分整理)
動態網頁:動態產生不同的網頁內容, 主要由服務器端執行
動態HTML:動態產生不同的視覺效果,而網頁的內容沒有改變.主要由客戶端的IE執行.
執行在客戶端的代碼跟執行在服務器端的代碼還是有不同的.
傳遞時間時,若服務器跟客戶端的時間不同,則效果就不一樣了.
例如有個服務器跟數據庫服務器.他們裝在兩個不同機器上,
插入數據的時間是由數據庫自動生成的,當插入到DB服務器的時間是8:00,web服務器上的時間是9:00,那麼想限制人40秒中不能重複插入數據就無法實現了
Servlet
-->Web Server
-->IE
C/S架構.
早期出來的系統架構.
每個客戶端都要安裝客戶端程序然後才能跟服務器進行連接
而當要進行客戶端程序更新的時候,就要重新發布客戶端程序.工作量大且很無效率.
業務邏輯處理跟介面顯示都由客戶端程序負責處理.一旦業務邏輯跟介面顯示發生變化則就要對客戶端進行更新,不利於升級,維護跟擴展
BS架構
跟
C/S
的最大區別就是將軟件系統的用戶操作介面以網頁的形式在客戶機的
Web
瀏覽器中展現給客戶
.
不需要客戶安裝客戶端程序
.
因為
B/S
架構中的用戶操作介面是由
WEB
服務器創見的
,
當要修改系統提供的用戶操作介面時只要在
WEB
服務器端修改相應的網頁文件
.
一些內部功能的更新改進都可以在用戶不知不覺中完成
.
而且用戶端不直接跟數據庫建立連接所以數據庫併發連接數量有限的問題也得到解決
若某個Servlet的映射路徑僅僅是一個/,則這個Servlet就成為當前Web應用程序的預設Servlet.
凡是在web.xml文件中找不到匹配的Serlvet映射URL時,他們的請求都交由預設servlet來處理,即缺省Servlet用於處理所以有其他Servlet都不處理的訪問請求.就算訪問一個HTML文件,因為所有Servlet都不處理,所以這個時候也會交由缺省SErvlet處理
在Tomcat_HOME/conf/web.xml中可以看到
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern> //用這個來標示缺省的
</servlet-mapping>
//所有的靜態資源(靜態HTML,File,Img)等等都由這個默認的Servlet來響應請求.
//所有的靜態資源(靜態HTML,File,Img)等等都由這個默認的Servlet來響應請求.
Tomcat啟動服務器時自動會設定classpath為:
<CATALINA_HOME>/bin/bootstrap.jar
<JAVA_HOME>/lib/tools.jar
即是,我們在系統設置的環境變數都會失效
System類裝載器通過bin/setclasspath.bat來設置CLASSPATH,可以通過修改該批處理文件來添加新的CLASSPATH
Common類所裝載的類對於Tomcat跟WEbApp都是可見的.負責加載common/lib下的所有jar包
Catalina類所裝載的類只對於Tomcat可見.負責加載server/lib跟server/classes的Jar包
Shared負責加載shared/lib 跟 shared/classes下面的jar包
WebAppX類裝載器負責加載當前應用程序的/WEB-INF/classes中的類文件
,還有/WEB-INF/lib中的jar包.用到的第三方jar包都應該放到lib下面,或是把自己的類打包圍jar放到lib下
SUN公司的Servlet的類裝載器建議是子裝載器能裝就用子裝載器裝,不然在搜尋父曾,跟原來的JDK標準剛好相反..但是TOMCAT沒有遵守SUN的Servlet建議,還是跟JDK標準一樣~~~
Servlet的運行過程
修改conf/servlet.xml中<Context>添加屬性reloadable=”true”就會監視WEBAPP的Classes,lib下面的類們是否發生了改變,並從新裝載這些改變的類到內存.默認該值是false.<Context path=”/it315” docBase=”d:/myweb” debug=”0” reloadable=”true”/>
不過是通過一段時間來進行檢查.不會馬上檢查出來,要等一小段時間
conf/tomcat-users.xml
中設置用戶跟角色
//
激活器
在TOMCAT_HOME/conf/web.xml中可以看到
<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
//數字越小越早加載,依賴性越小.負數跟0無意義,加載順序由Web服務器判斷
//數字越小越早加載,依賴性越小.負數跟0無意義,加載順序由Web服務器判斷
</servlet>
他是被註釋起來的.若打開他,就可以不用在應用程序中的web.xml中來註冊Servlet了.只要在web.xml中定義:
這樣就可以不用註冊Servlet而直接用類名來進行Servlet的訪問了
//
在
<servlet>
裡面可以支持
<init-param>
標籤
,
可以在生成
Servlet
的時候傳遞一些參數
如
:
<servlet>
<servlet-name></servlet-name>
<servlet-class></servlet-class>
<init-param>
<param-name> ParameterName1 </param-name>
<param-value>ParameterValue1</param-value>
</init-param>
<init-param>
<param-name> ParameterName2 </param-name>
<param-value>ParameterValue2</param-value>
</init-param>
</servlet>
到時候就可以通過
Servlet
接口的
init(ServletConfig)
傳入的物件來取得參數
.
詳細可以參看 ServletConfig 的接口定義
詳細可以參看 ServletConfig 的接口定義
通常應該把
ServletConfig
物件作為私有成員
,
因為他擁有一個可以跟網路應用程序上下文打交道的途徑
à
getServletContext().
一個網路應用程序只有一個上下文
,
所有
Servlet
都可以通過他來交換信息
,
很重要
ServletContext
à每個WebApp都有一個上下文
ServletConfig
à被GenericServlet類實現
getServletContext()
getInitParameterNames()