1 Servlet線程安全問題 1st. 為什麼說servlet會有線程安全問題? 2nd. 如何解決? 2 Jsp基礎 1st. Jsp是什麼? 本質就是一個servlet 2nd. 如何寫jsp? I) <% %> II) <%= %> III) Jsp聲明(a1.jsp) <&! 變數或者方法 ...
1 Servlet線程安全問題
1st. 為什麼說servlet會有線程安全問題?
- 容器預設情況下,對於某個servlet,只會創建一個實例.
- 容器收到一個請求,就會啟動一個線程來處理請求.這樣,就有可能有多個線程同時調用同一個servlet實例,就有可能產生線程安全問題(比如,多個線程同時修改某個屬性);
2nd. 如何解決?
- 使用synchronized對線程安全問題代碼進行加鎖;註:會影響性能.
- 儘量避免寫有線程安全的代碼,比如,不要修改屬性.
2 Jsp基礎
1st.
Jsp是什麼?
本質就是一個servlet
2nd. 如何寫jsp?
- Html直接寫
- Java代碼(java腳本)
I) <% %>
II) <%= %>
III)
Jsp聲明(a1.jsp)
<&! 變數或者方法 &>
聲明以後可以直接在代碼片段中使用
- 指令
I)
什麼是指令?
告訴容器執行的一些配置
II) Page指令
i. Import屬性:導包
ii. Pageencoding屬性:設置編碼集
iii. Contenttype屬性:設置輸出屬性編碼集
iv. Session屬性:true(預設)/false 當值為false時,不能夠直接使用session隱含對象了.(a2.jsp)
v. Errorpage屬性:指定一個異常處理頁面,當異常發生後,容器會調用異常處理頁面.(a3.jsp)
vi. Iserrorpage屬性:true/false(預設) 當值為true的時候,表示這是一個異常處理頁面,可以使用exeception隱含對象.(a4.jsp)
III) Incloud指令
i. File屬性:包含的文件
IV) Taglib指令
i. 用於導入jsp標簽.
- 隱含對象
I) 什麼是隱含對象…可以直接使用的對象
II) 為什麼可以直接使用
III)
有哪些隱含對象
out,request,response,session,application,
exeception,異常處理對象,只能在異常處理界面使用
pagecontext(a6.jsp a7.jsp)
- 容器會為每一個jsp實例創建一個唯一的符合pagecontext介面要求對象
特點:
a) 唯一性:jsp實例對應一個pagecontext
b) 持久性:只要jsp實例存在,pagecontext就在(不會銷毀)
- 作用:
a) 綁定數據 註:綁定在pagecontext上的數據只有對應的jsp可以訪問
b) 獲取其他所有隱含對象.
config(a5.jsp)
servletconfig(jsp也可以設置配置信息並獲取到)
page(從來不使用)jsp實例, 註:jsp先轉化成servlet,然後容器將這個servlet實例化.
- 註釋
I) <!—註釋內容 -->z註釋內容是java代碼會執行,但是因為外面是html註釋,所以不會將時間顯示到界面上
II) <%-- 註釋內容 --%>註釋內容是java代碼不會執行,在這個註釋中不論是不是java代碼都不會執行.
3 Jsp如何執行的?
a)
將jsp轉換為一個servlet類
htmlàservice方法,使用out輸出
<% %>à照搬
<%= %>àout輸出
<&! 變數或者方法 &> 添加新的屬性或者方法
b) 調用servlet
4 Jsp標簽和El表達式
1st.
什麼是jsp標簽?
jsp標簽類似於html標簽,用於替代jsp中的java代碼.
註:因為直接在jsp中寫java代碼,不方便jsp文件的維護,比如講jsp文件交給美工修改就很不方便,所以sun制定了jsp標簽技術規範.
2nd.
什麼是el表達式?
是一套簡單的運算規則,用於給jsp標簽的屬性賦值,也可以脫離標簽直接使用.
3rd. El表達式的基本使用
- 訪問bean的屬性(e1.jsp)
I)
${user.name} 容器依次從pagecontext,request,session,application中查找綁定名為user的對象.接下來會調用這個對象的gername方法並輸出該方法的結果.
註:如果找不到對應的對象,會輸出””.
會將null轉換為””輸出.
可以使用pageScope,requestScope,sessionScope,applicationScope指定查找範圍.
II)
${user[‘name’]}
註:
- []里可以使用綁定名
- []裡面可以使用從0開始的下標,用於訪問數組的某個元素.
- 運行一些簡單的運算.
註:運算結果可以直接輸出也可以給屬性賦值.- 算數運算:+-*/% 註:+只能求和.
- 關係運算 < <= = > >= == !=;
- 邏輯運算 && || !
- 空運算 empty 判斷是否為空是不是一個空字元串.找不到綁定也是true.
- 讀取請求參數值(e3.jsp)
- ${param.name} 等價於 request.getParameter(string name)
- ${paramValues.city} 等價於request.getParameterValues(‘city’)
4th. Jsp標簽 jstl (java standard tag lib)àjava標準標簽庫
- Jstl是什麼?
Apache開發的一套jsp標簽,後來捐獻給sun,sun將其命名為jstl - 如何使用jspl?
- 導包
- 使用指令taglib導入要使用的jsp標簽.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
uri屬性:指定要導入的標簽的命名空間(命名空間”namesoace”是為了區分同名的元素在元素前面添加的一個限定,通常是一個功能變數名稱)
prefix屬性:首碼,命名空間的別名.
- 幾個核心標簽
I) If標簽
i.
<c:if
test=””>
<c:if>
當test屬性值為true,容器執行標簽體的內容.可以使用el表達式給test賦值,
var屬性:指定一個綁定名
scope屬性:指定綁定範圍,page
request session application
ii.
Choose標簽(c2.jsp)
<c:choose>
<c:when test=””>
<c:otherwise>
<c:otherwise>
</c:choose>
when可以出現1次 otherwise可以出現0到1次
iii.
ForEach標簽(c3.jsp)
<c:forEach items=”” var=”” varStatus=””></c:forEach>