(一)項目介紹
項目名稱 |
使用知識點 |
項目效果 |
Lab 16 |
JavaBean、上下文對象、會話對象 |
①PrivateSum:生成一個私有累加器,將結果存在session中。 ②PublicSum:生成一個公共累加器,將結果存在context中。 用戶通過頁面進行累加,頁面會限制只能輸入數字 |
Lab 17 |
過濾器、JavaBean、Servlet傳遞數據的多種方式、文件的讀取、EL表達式、JSTL |
①FilterUTF8:將項目統一UTF-8編碼 ②RecordsServlet專題:使用上下文對象儲存聊天信息,建立一個簡易聊天室,用戶A與用戶B的信息能合理讀取、顯示。(效果圖見文檔尾部) ③ServletDataPass專題:使用jsp進行交互(輸入信息,查看Servlet傳遞信息的細節、查看Servlet的輸出信息);建立4個Servlet,各自以不同的方式進行信息溝通(靜態變量、sendRedirect、getRequestDispatch、getSession、setAttribute) ④ShoppingServlet專題:通過txt文件讀入產品信息,添加店鋪和庫存信息,若商品售光則不予顯示。購物車能合併相同商品的不同訂單,購物車按照店鋪>產品分組顯示。將不合理的訂單或其他錯誤信息顯示給客戶。更正了原項目刷新導致表單重複提交的錯誤。 |
Lab 18 |
JavaBean、Servlet的信息傳遞 |
①JAVABEAN:Product類存儲商品信息、CartProduct類存儲購買信息、ShopCart類對購物車的修改請求進行具體操作。 ②ShowProductServlet:顯示商品詳細信息,提供用戶將具體數目的商品加入購物車的功能。限制商品的可加入購物車的數目不大於庫存數目,不小於0。 ③ShoppingServlet:獲取用戶在產品頁提交的加入購物的詳細信息,將其加入購物車中。合併相同產品的訂單。將部分違法操作進行相應提示。 ④ShowCartServlet:獲取購物車的詳細信息,並提供修改購物車中商品的數目功能(由此可以刪除商品)。計算購物車中商品的總額。 |
Lab 19 |
Junit的使用、pom.xml的基本內容 |
編寫了一個計算器,並使用Junit進行進行加減單元測試 |
Lab 20 |
Junit、maven |
LeapYear類判斷輸入年份是否爲閏年。 LeapYearTest測試LeapYear功能是正確、完善。 |
Lab 21 |
MVC框架、filter、servlet |
①EncodingUTF8:統一UTF-8編碼 ②Record類:賦予消息體結構(發送人、時間、發送信息)。 ③login.jsp:簡單的登錄頁面,幫助用戶轉向Servlet,從而進入WEB-INF下的網頁。 ④RecordsServlet:幫助登陸成功的用戶進入聊天室。處理聊天室收到的消息,放入消息記錄中。 ⑤chat.jsp:聊天室,同時實現兩個用戶的聊天窗口,模仿QQ顯示雙方的信息。 |
Lab 22 |
MVCController |
在Lab21的基礎上 ①使用DispatherServlet接收所有處理請求,充當路由器功能,將登錄請求發送給LoginController、聊天室請求發送給RecordsController。 |
Lab 23 |
MVCValidator |
在Lab22的基礎上 ①LoginValidator:獲取User對象,判斷用戶名、密碼是否爲空,返回錯誤信息。 ②在LoginController處添加判斷登錄信息是否合法,並進行相應反饋的操作。
|
Lab 24 |
SpringMVC |
在Lab23的基礎上 刪除了自己編寫DispatherServlet,使用了庫中的DispatherServlet,在xml中配好此Servlet,在springmvc-servlet.xml中配好相應鏈接應該轉到的Controller,重現聊天室之前功能與效果。 |
(二)問題描述
問題1描述:Caused by: java.lang.IllegalArgumentException: The servlets named [myServlets.Servlet01] and [myServlets.Servlet03] are both mapped to the url-pattern [/Servlet01] which is not permitted at ….
問題分析:看原因應該是xml或者註解重複了,導致編譯時找不到具體的Servlet。
問題解決:查看Servlet註解,發現自己由於是複製產生的多份Servlet,它們名字改了但是註解相同。
問題2描述:
問題分析:應該是jsp對應行的語法問題。
問題解決:發現自己在語句 ”<input value=”xx“>” 使用了四個雙引號,將其中一對雙引號變成單引號。
問題3描述:
問題分析:500一般是編譯不通過,查看相關代碼。發現刪掉如下紅框,就能成功運行。
問題解決:發現是<input>中的max出錯,但是邏輯上自己要求獲取max=剩餘庫存數目,所以嘗試了下刪掉max紅框處,將min=0,改爲min=”0”,發現不影響運行,故將max=int,也改成了max=”string類型”,代碼如上。成功解決問題。
問題4描述:如圖:
問題分析:這問題沒經歷過,先看英文後百度。無果,休息會。
問題解決:休息的時候關掉了Eclipse,再打開又能運行成功了。
問題5描述:出現亂碼如下:
問題分析:應該是編碼問題,一直看filter裏面這句話不順眼。
問題解決:刪掉此類。因爲我直接都是UTF-8編碼,如果再另一種編碼讀取再編碼一次,反而產生亂碼。
問題6描述:出現404錯誤、即使運行單獨的頁面,也會失去CSS效果。
問題分析:先查路徑,再查細節。
問題解決:發現項目的名字錯了,去掉.war。
(三)知識點總結
1.Servlet的生命週期
概述爲:Servlet 加載--->實例化--->服務--->銷燬。 |
init():負責初始化Servlet對象,只執行一次。 |
service():對請求的方式進行了匹配,選擇調用doGet,doPost等這些方法,然後再進入對應的方法中調用邏輯層的方法,實現對客戶的響應。 |
destroy():在服務器端停止且卸載Servlet時執行該方法,只執行一次。 |
2.Java包命名規範
前綴 |
介紹 |
包的命名 |
indi |
個體項目,指個人發起,但非自己獨自完成的項目,可公開或私有項目,copyright主要屬於發起者。 |
indi.發起者名.項目名.模塊名.…… |
pers |
個人項目,指個人發起,獨自完成,可分享的項目,copyright主要屬於個人 |
pers.個人名.項目名.模塊名.…… |
priv |
私有項目,指個人發起,獨自完成,非公開的私人使用的項目,copyright屬於個人。 |
priv.個人名.項目名.模塊名.…… |
onem |
與“indi”相同,推薦使用“indi”。 |
onem.發起者名.項目名.模塊名.…… |
team |
團隊項目,指由團隊發起,並由該團隊開發的項目,copyright屬於該團隊所有。 |
team.團隊名.項目名.模塊名.…… |
com |
公司項目,copyright由項目發起的公司所有。 |
com.公司名.項目名.模塊名.…… |
3.具體的命名規範
xxx:代表公司名稱yyy:代表項目名稱
- com.xxx.yyy.dao dao層接口
- com.xxx.yyy.dao.impl dao層實現
- com.xxx.yyy.service service層接口
- com.xxx.yyy.service.impl service層實現
- com.xxx.yyy.web web層
- com.xxx.yyy.util 工具包
- com.xxx.yyy.domain javabean
4.Java開發Web Application有幾種符合MVC設計模式的開發方式。
- Jsp+Servlet+JavaBean(EJB)
- Jsp+JavaBean(Controller)+JavaBean(EJB)(Model)
- TDK(Turbine,Velocity...)
- Xsp
- Jsp+Struts+JavaBean(EJB)
(四)心得
此次實驗最大的思考是課程結束後,我能否給自己安排類似的實驗?能否在無外界壓力的情況下,有邏輯地去寫博客?想了想,如果要達成心願,我應該:①對領域知識有框架式的瞭解。②利用反饋帶來的正向引導,適當給自己反饋,但不要迷失自己的重心、目標。③一定的時間限制。
在javaee實驗文檔中,我學會了先蒐集素材,再集中整理的文檔技巧,但是提醒自己的一點是,儘量自己打文檔,慎用複製粘貼(如果保證理解了就可以複製粘貼)。
MVC的框架很神奇,總的概括的,View層是界面,Model層是業務邏輯,Controller層用來調度View層和Model層,將用戶界面和業務邏輯合理的組織在一起,起粘合劑的效果。所以Controller中的內容能少則少,這樣才能提供最大的靈活性。
有一句行話“少用繼承,多有組合”,如果被繼承的類中有繼承的類用不到的方法或者屬性時,就不要去實現這個繼承。設計模式中,有時候用繼承只是爲了時上層使用的時候,不需要考慮到下面是怎麼做的而已(參考策略模式)。博客上講:MVC,View層,單獨實現了組合模式,Model層和View層,實現了觀察者模式,View層和Controller層,實現了策咯模式。
(五)項目效果圖(撿關鍵的)