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類才是放置控制邏輯的正確的地方。

請求控制器的命名模式為: xxxcontroller.jsp

請求控制器類的命名模式為: xxxrequestcontroller

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

&#61548; 一個servletconfig對象是servlet container在servlet initialization的時候傳遞給servlet的。

servletconfig包涵 servletcontext 和 一些 name/value pair (來自於deployment descriptor)

&#61548; servletcontext接口封裝了web應用程式的上下文概念。

2.會話跟蹤

1) session

&#61548; 當一個client請求多個servlets時,一個session可以被多個servlet共享。

&#61548; 通常情況下,如果server detect到browser支持cookie,那么url就不會重寫。

2) cookie

&#61548; 在java servlet中,如果你光 cookie cookie = new cookie(name,value)

那么當用戶退出browser時,cookie會被刪除掉,而不會被存儲在客戶端的硬碟上。

如果要存儲 cookie,需加一句 cookie.setmaxage(200)

&#61548; 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