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