朕 JAVAEE 實驗03 實驗報告

(一)項目描述

項目名稱

所用知識點

實驗效果

Lab 09

javaBean的使用,同頁面的值獲取,不同頁面傳值的方法,EL表達式,JSTL的基本用法

getInfoPage頁面中,能通過EL表達式直接與java類交互,輸出相應結果。

easyJSTL頁面中,實現了通過JSTL標籤,進行簡單輸出、比較數字大小、使用Empty運算符、獲取Exception信息、進行不同域的信息設置(由此可跨頁面傳值)、查看瀏覽器信息等功能。

Lab 10

javaBean的使用,過濾器,css文件的設置,jsp中類庫的調用,EL表達式,javascript

register頁面,只要輸入信息合法,就能註冊用戶。

login頁面,能用已經註冊過的用戶名和及匹配的密碼登錄並進入歡迎頁。

welcome頁面展示出歡迎信息,並且列表說明已經註冊的用戶隊列。

Lab 11

javaBean的使用,同頁面的值獲取,部分域的變量設置,Servlet

easyChange頁面,能對輸入的明文進行簡單的加密。

guessNumber頁面,能猜測答案數字的大小,能設置答案數字,默認猜測機會爲5次。重設答案數字能恢復最大猜測機會。猜測過程中伴有提示。

 

(二)錯誤

【1】

①錯誤描述:

嚴重: Servlet.service() for servlet [jsp] in context with path [/j2017051046_09_jspELAndJST] threw exception [The absolute uri: [http://java.sun.com/jsp/jstl/core] cannot be resolved in either web.xml or the jar files deployed with this application] with root cause

org.apache.jasper.JasperException: The absolute uri: [http://java.sun.com/jsp/jstl/core] cannot be resolved in either web.xml or the jar files deployed with this application

②問題分析:錯誤提示上有表示是core代碼並未匹配到。xml文件與之前項目無甚差別,主要應該在lib庫中。

③問題解決:將一些jar包放入lib庫中。如圖:

 

【2】

①錯誤描述:Type Exception Report

Message An exception occurred processing [/getInfoPage.jsp] at line [71]

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Stacktrace:] with root cause
javax.el.MethodNotFoundException: Method not found: class myBeans.User.getName()
at javax.el.Util.findWrapper(Util.java:368)

②問題分析:先檢查User類中是否有此方法,再與老師的代碼比對,

③問題解決:檢查User類中確實存在此方法,將此類暫時替換成老師的類,發現能成功運行,說明不是路徑問題、不是jsp頁面問題。對比代碼發現,自己的類成員是private,而set、get方法並未聲明爲public,導致jsp沒有權限訪問類方法。

④配圖:

 

【3】①錯誤描述:使用EL表達式時,發現${user.getName()}使用失敗。

②問題分析:首先明確有這個類、有這個類方法、並且類方法是public,那爲什麼呢?代碼明明很有邏輯的感覺。百度查關鍵字“EL獲取成員變量失敗”,但這樣的關鍵字直接導致尋找方向錯誤,趁還在上實驗,諮詢老師。

③問題解決:將${user.getName()}變成${user.name}。

④經驗:EL表達式${user.getName()}中的user是直接獲取成員的,其信息已經在頁面中獲取了,直接用前面的get、set方法。而如果我要使用user.getName(),就可以用<% user.getName()%>,而這裏面的user是對象。

 

【4】

①錯誤描述:中文輸入,打印出亂碼。

②問題分析:先檢查編碼問題,發現都是UTF-8,再聯繫到頁面格式問題,最後百度時候發現是EL表達式的中文問題。

③問題解決:先將頁面代碼檢查一遍,在加上<% request.setCharacterEncoding("utf-8"); %>將EL表達式中文顯示亂碼解決。
 

 

【5】

①錯誤描述:語法正確,卻出現:

②問題分析:確定語法沒錯。先剪切再複製。

③問題解決:其實只是編輯器慢,ctrl+s保存下,就沒有紅線了。如圖:

 

 

(三)知識點總結

1、jsp:setProperty用法

<jsp:setProperty>用來設置已經實例化的Bean對象的屬性。它一共有四種形式。

<jps:setProperty name = "JavaBean實例名"  property = "*"/>,

<jsp:setProperty name = "JavaBean實例名" property = "JavaBean屬性名" /

<jsp:setProperty name = "JavaBean實例名" property = "JavaBean屬性名" value = "BeanValue"/>

<jsp:setProperty name = "JavaBean實例名" property = "propertyName" param = "request對象中的參數名"/>

使用<jsp:getproperty>之前,必須<jsp:usebean>來創建它。不能使用<jsp:getproperty>來檢索一個已經被索引了的屬性

 

2、EL表達式

EL表達式語法結構:${ expression} ,其採用“.”或者“[]”兩種方式來存儲數據,當表達式中存在除了字母或者數字之外的特殊符號時,必須用“[]”。

在頁面使用中,我們可以取值的方法中<% %>,${ }有等價關係,如表。

<%=request.getParameter("userName")%>

${param.userName};

<%=request.getAttrbute(userList)%>

${requestScope.userList};

 

3、JavaBean傳值的形式

任何數據類型封裝在javaBean中,我們在屬性中定義需要傳遞的參數,然後加入get和set方法就可以了。但是在實驗中,發現get、set方法一定需要public的範圍,否則網頁沒有權限訪問。

 

4、JSP九大隱式對象

JSP中叫法

Servlet中叫法

request

HttpServletRequest

response

HttpServletResponse  

session

HttpSession

application

ServletContext

config

ServletConfig

out 

JspWriter

exception

特殊情況下使用

page 

this 本jsp頁面

pageContext

 

5、jsp:setProperty

<jsp:setProperty property="*" name="user"/> 

property = "*"表示所有名字和Bean屬性名字匹配的請求參數都將被傳遞給相應的屬性set方法。

 

6、DOCTYPE

DOCTYPE(Document Type),文檔類型,一個DOCTYPE是一種標準通用標記語言的文檔類型聲明,它的目的是要告訴標準通用標記語言解析器,它應該用什麼樣的文檔類型定義(DTD)來解析文檔。只有確定了一個正確的文檔類型,超文本或可擴展超文本中的標籤和層疊樣式表才能生效,甚至對JavaScript都會有所影響

而此項目中:<!DOCTYPE HTMl PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">。該 DTD 包含所有 HTML 元素和屬性,包括展示性的和棄用的元素(比如 font)。不允許框架集(Framesets)。

 

7、中文亂碼

EL表達式中文顯示亂碼解決方法:<% request.setCharacterEncoding("utf-8"); %>

 

8、listener總結

實驗中我使用listener主要是:我曾經在servlet中將listener裏將seesion對象添加的代碼做了,嫌棄listener多餘繼而將其刪除。卻發現創建session的代碼在listener中,沒有listener我根本就沒創建session,何談添加seesion中變量呢?  如下是我搜集到的資料:

可以監聽的事件

爲何使用監聽器?

特殊對象(Request、Session、ServletContext對象)的創建和銷燬

JavaEE的很多組件,其創建和銷燬有自己的生命週期,不由開發者控制

特殊對象中存入了值、修改值、刪除值

開發者有時需要在一個特定的事件發生後,指定自定義的邏輯

其他

由於很多類都不是開發者提供的,開發者無法在類中添加自己的代碼

 

JavaEE提供了對應的監聽器,監聽具體的事件,開發者可以提供監聽器的實現類,添加具體事件的處理邏輯

 

由服務器保證,一旦事件發生,開發者添加的處理邏輯可以被執行

 

(四)心得體會

       鄭老師調動的十分濃烈的學習氛圍,讓我深切感受學無止境,也十分珍惜這幾次寫文檔有反饋的機會。言歸正傳,下面講述實驗心得。

       文檔方面。編寫文檔是爲了歸納整理實驗收穫,方便以後查看。分塊描述方便自己查閱時縮小範圍,節約時間。使用表格會使知識點清晰,並且幫助自己歸納總結。

       在實驗中,自己浪費很多時間在重構上。這說明自己在寫項目之前只有一個大概的方向,沒有明確的構思。將項目推翻重寫說明自己有優化代碼的心思,值得鼓勵,但是以後自己應該在寫代碼之前完成以下步驟:①認真閱讀所有老師的相關參考資料。②歸納項目需求,最好簡略寫下需要使用的知識點。③建立包含所有知識點的簡單頁面邏輯設計。

       實驗中我對前期項目進行代碼複用(例如過濾器之類),反而發現自己對之前實驗並沒有完全吸收(例如listener的具體作用)。這是由於上一個項目關於listener,我是直接複製老師代碼的,並且只是大概瞭解了情況之後修改了而已。以後除了前端的界面佈局,不允許自己這樣直接使用別人的代碼。

       之前的實驗中,我爲了在導航頁中顯示servlet類,故意將各種情況都寫入項目中,保證項目的健壯性。現在換了一個思路:servlet之類的東西在MVC裏是C,完全不需要展示給用戶。

       以上是自己這次實驗的心得,對未來自己,我的展望是:做一個對項目架構有能力的程序員!從每次的小項目開始認真設計框架、填充代碼邏輯。

      

      

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