java程序員第十二課 -JSP技術、JavaBean知識和EL表達式(重點)

課程內容:JSP技術、JavaBean知識和EL表達式(重點)

JSP的概述

1.JSP:Java Server Pages :Java 服務器端的網頁們
2.動態的WEB資源,包含Servlet/JSP
3.Servlet程序編寫HTML代碼的比較麻煩。Servlet需要配置,JSP不需要配置。
4.JSP的執行原理:JSP程序 – 先翻譯成Servlet程序(xxx.java) – 編譯成.class文件 – 執行了。
* JSP編寫HTML的代碼,展示給用戶看的。翻譯成Servlet,需要把HTML的標籤輸出到客戶端上。
* 可以在Tomcat/work/找到JSP翻譯後的源代碼。
JSP的腳本元素

1.JSP的代碼編寫:HTML+Java+EL+JSP
2.編寫Java代碼需要使用腳本元素
* <%! %> :編寫變量(不常用)
* <%= %> :輸出的語句。不能有分號。
* <% %> :變量(局部變量)
JSP的註釋

1.編寫哪些註釋
* 可以編寫HTML的註釋
* 可以編寫Java代碼註釋(三種)
* 寫JSP的本身的註釋 <%– –%>
修改JSP文件的編碼的問題

1.點擊window – 選擇選項 – 搜索JSP – 選擇JSP – 選擇UTF-8的編碼。
JSP的基本語法

JSP的指令元素

1.設置JSP的頁面的屬性
2.決定JSP的怎麼執行的。
3.JSP的指令需要怎麼來編寫呢?
* JSP指令元素的語法
* <%@ 指令元素 屬性名稱=屬性值 %>
* JSP哪些指令元素?有三個
* page指令,用於設置頁面的屬性
* include指令,用於頁面的包含。
* taglib指令,用於引入標籤庫
page指令

1.page指令設置頁面的屬性
2.page指令的屬性
* language – 固定的值,值就是java。JSP的程序翻譯成.java的文件。
* extends – 繼承。JSP翻譯成.java文件,默認去繼承。修改默認繼承的類。
* session – 決定JSP文件中session是否可以直接使用。默認值是true。
* import – JSP文件中可以編寫Java代碼。導入包。import可以使用多次。
* buffer – 設置JSP緩存區的大小。默認是8kb
* autoflush – 設置JSP緩衝區默認刷新。默認值是true
* errerpage – 通過指令值,發生異常了,指定跳轉的路徑。
* isErrorpage – 如果程序拋出異常,指定跳轉的頁面,輸出異常的信息,設置該屬性值爲true。使用exception。
* isELIgnored – 是否忽略EL表達式,默認值是false,不忽略。
* pageEncoding – 設置JSP頁面的編碼。
* contentType – 瀏覽器打開文件時所有采用的編碼。
* 注意:pageEncoding和contentType屬性之間曖昧的關係。設置其中一個編碼,另一個和它相同。
設置全局錯誤處理頁面(開發經常使用)

1.需要在web.xml中進行配置全局錯誤頁面



404

/error/404.jsp



500

/error/500.jsp

inclde指令:頁面的包含

1.語法:<%@ include file=”指定要包含的頁面” %>
2.作用:把一些不變的頁面包含進來,一起對外展示。
3.靜態包含原理:訪問body.jsp文件,翻譯成body_jsp.java文件之前,把包含的文件全部複製到一起,一起翻譯,一起編譯。最後執行。
taglib指令:引入標籤庫文件

JSP的內置對象

1.JSP的內置對象:JSP文件翻譯成.java文件,在service方法的內容,提供一些對象。直接使用這些對象。
JSP的內置對象 真實對象 常用的方法
request HttpServletRequest …
response HttpServletResponse …
session HttpSession 域對象
application ServletContext 域對象
config ServletConfig 和配置文件相關的對象

out JspWriter 輸出
pageContext PageContext 域對象
page Object(忘了)
exception Throwable 獲取異常的信息,注意:isErrorPage設置成true
out對象(JspWriter)輸出

1.response對象,向客戶端做出響應。response.getWriter(),返回PrintWriter對象。和JspWriter之間有什麼關係呢?
2.編寫JSP文件中的代碼
<%= “HELLO” %>
<% out.print(“AAAA”); %>
<% response.getWriter().print(“BBBB”); %>
<% out.print(“CCCC”); %>

3.輸出結果:BBBB HELLO AAAA CCCC
4.結論:JspWriter會把緩衝區的內容先輸出到PrintWriter的緩存區,然後統一的向外輸出。
PageContext對象

1.pageContext對象代表頁面的上下文對象。通過該對象獲取到頁面的一些信息。
2.一個pageContext對象頂上面9個對象。pageContext對象可以獲取到另外的8個。
* getXXX() 獲取其他的8個內置對象
getException方法返回exception隱式對象
getPage方法返回page隱式對象
getRequest方法返回request隱式對象
getResponse方法返回response隱式對象
getServletConfig方法返回config隱式對象
getServletContext方法返回application隱式對象
getSession方法返回session隱式對象
getOut方法返回out隱式對象

3.pageContext對象也是一個域對象,域的範圍有點小。範圍代表當前的頁面。
* void setAttribute(String name, Object value)
* Object getAttribute(String name)
* removeAttribute(String name)

4.pageContext對象可以向其他的域對象中存取值。
* void setAttribute(String name, Object value, int scope)
* Object getAttribute(String name, int scope)
* void removeAttribute(String name, int scope)

5.Object findAttribute(String name) 全域查找,可以從4個域中來查詢值先從最小範圍的域中查找,如果找不到,向上一個域中查找
4個域對象

1.pageContext – 代表當前的頁面(自定義標籤)
2.request – 代表一次請求(需要從服務器後臺獲取數據(從數據庫中獲取數據),存入到request域中,通過轉發到指定的JSP頁面,可以在JSP的頁面中獲取到數據。例子:查詢所有的用戶數據,發送一個消息。)
3.session – 代表一次會話(session域對象,一般的情況保存都是和用戶相關的數據,例子:登陸成功了,需要把用戶的信息保存到session中。)
4.application – 代表整個WEB應用(ServletContext域對象,保存全局的一些,都是共享的。)
JSP的動作標籤

1.JSP的動態標籤和HTML的標籤區分開。
2.JSP的常用的標籤
* – 動態包含(和靜態包含效果的一樣的,原理不同)
* 動態包含會產生4個翻譯後的.java文件。
* 原理:總結:訪問body.jsp的文件,body.jsp的文件自己翻譯成.java的文件,編譯成.class的文件。執行該文件。執行的過程中,遇到動態包含的語句,動態包含的文件就會自己翻譯成.java的文件,編譯成.class的文件,執行。把執行的結果複製到一起。一起展示。

* <jsp:forward>             -- 轉發
    * page屬性:要轉發的頁面

* <jsp:param>           -- 你在轉發的時候,通過該標籤傳遞一些參數
    * 傳遞參數,注意:<jsp:param>需要使用在其他的標籤的中間。
    * name屬性:參數的名稱
    * value屬性:參數的值

JavaBean的概述

1.JavaBean就是一個普通的Java類,但是符合一定的規範。
2.JavaBean的一些規範
* Java類必須具有無參數的構造方法
* 屬性必須是private
* 私有化的屬性必須通過public 的get或者set方法。

3.JavaBean的作用:封裝數據。
4.JavaBean屬性是怎麼規定的呢?
* 它是由get或者set方法來決定。

  • – 創建User的對象
  • – 執行User對象中的setXXX方法
  • – 執行User對象中的getXXX方法
    使用JavaBean進行數據的封裝

1.在JSP中使用JavaBean來完成數據的封裝。
內省的技術完成數據的封裝

1.先使用內省的技術來完成簡單數據的封裝。
2.目的:引出了BeanUtils的工具類,因爲該工具類的底層就是使用的內省的技術。

3.內省的技術:可以操作JavaBean中的set或者get方法。能不能獲取到setUsername的方法?

public void populate(User user, Map

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章