java學習心得筆記
j2ee學習筆記
注:框架可以用word菜單中的 “視圖/文檔結構圖” 看到
j2ee模式
value object(值對象) 用于把數據從某個對象/層傳遞到其他對象/層的任意java對象。
通常不包含任何業務方法。
也許設計有公共屬性,或者提供可以獲取屬性值的get方法。
jsp
1.jsp的基礎知識
__
_____ | directive (指令)
| |-- scripting (腳本)
jsp -------| |__ action (動作)
|
|_____template data :除jsp語法外,jsp引擎不能解讀的東西
1)在jsp中使用的directive(指令)主要有三個:
a) page指令
b) include指令
c) taglib指令
在jsp的任何地方,以任何順序,一個頁面可以包含任意數量的page指令
2)scripting(腳本)包括三種類型
a) <%!declaraction %>;
b) <% scriptlet %>;
c) <%= expression %>;
3)action(動作)
標準的動作類型有:
a) <jsp:usebean>;
b) <jsp:setproperty>;
d) <jsp:getproperty>;
e) <jsp:param>;
f) <jsp:include>;
g) <jsp:forward>;
h) <jsp:plugin>;
1. 注釋: <% -----jsp comment-------%>;
<! -----html comment-------%>;
2. <%@ page session = “true” import =”java.util.*” %>;
session可以不賦值,默認為true,如果session=”false”,則在jsp頁面中,隱含的變量session就不能使用。
3. 請求控制器結構(request controller)
也被稱之為jsp model 2 architecture
這種途徑涉及到使用一個servlet或一個jsp作為一個應用程序或一組頁面的入口點。
為創建可維護的jsp系統,request controller是最有用的方式之一。
不是jsp,而是java類才是放置控制邏輯的正確的地方。
請求控制器的命名模式為: controller.jsp
請求控制器類的命名模式為: requestcontroller
2.jsp中的javabean
jsp三種bean的類型
1) 頁面bean
2) 會話bean
3) 應用bean
大多數的系統會使用一個會話bean來保持狀態,而對每一個頁面使用一個頁面bean 來對復雜的數據進行表示。
頁面bean是一個模型,而jsp是一個視圖。
3.custom tag
bean是信息的攜帶者,
而tag更適用于處理信息。
標記庫包含一個標記庫描述符(tld)和用于實現custom tag的java類
在翻譯階段,jsp容器將使用tld來驗證頁面中的所有的tag是否都被正確的使用。
標記處理程序只是一個簡單的適配器,而真正的邏輯是在另一個類中實現的,標記處理程序只是提供了一個供其他的可復用的類的jsp接口
servlet
1.servletconfig
 一個servletconfig對象是servlet container在servlet initialization的時候傳遞給servlet的。
servletconfig包涵 servletcontext 和 一些 name/value pair (來自于deployment descriptor)
 servletcontext接口封裝了web應用程序的上下文概念。
2.會話跟蹤
1) session
 當一個client請求多個servlets時,一個session可以被多個servlet共享。
 通常情況下,如果server detect到browser支持cookie,那么url就不會重寫。
2) cookie
 在java servlet中,如果你光 cookie cookie = new cookie(name,value)
那么當用戶退出browser時,cookie會被刪除掉,而不會被存儲在客戶端的硬盤上。
如果要存儲 cookie,需加一句 cookie.setmaxage(200)
 cookie是跟某一個server相關的,運行在同一個server上的servlet共享一個cookie.
3) url rewriting
在使用url rewriting來維護session id的時候,每一次http請求都需要encodeurl()
典型的用在兩個地方
1) out.print(“form action=\” ”);
out.print(response.encodeurl(“sessionexample”));
out.print(“form action=\” ”);
out.print(“method = get>;”);
2) out.print(“<p>;<a href=\” ”);
out.print(response.encodeurl(“sessionexample?database=foo&datavalue=bar”));
out.println(“\” >;url encoded </a>;”);
3.singlethreadmodel
默認的,每一個servlet definition in a container只有一個servlet class的實例。
只有實現了singlethreadmodel,container才會讓servlet有多個實例。
servlet specification上建議,不要使用synchronized,而使用singlethreadmodel。
singlethreadmodel(沒有方法)
保證servlet在同一時刻只處理一個客戶的請求。
singlethreadmodel是耗費資源的,特別是當有大量的請求發送給servlet時,singlethreadmodel的作用是使包容器以同步時鐘的方式調用service方法。
這等同于在servlet的service()方法種使用synchronized.
single thread model一般使用在需要響應一個heavy request的時候,比如是一個需要和數據庫打交道的連接。
2. 在重載servlet地init( )方法后,一定要記得調用super.init( );
3. the client通過發送一個blank line表示它已經結束request
而the server通過關閉the socket來表示response已結束了。
4. 一個http servlet可以送三種東西給client