2016年10月3日 10:36:40
一直以來都很想寫屬於自己的博客,一來可以分享自己的學習經驗,二來可以及時總結,畢竟博客是寫給所有人看的,需要更加仔細的注意每個細節,而不是僅僅讓自己看懂。
學了java也有6個月左右,感覺有必要把所學的總結一下,因為以后有可能從事.net。三層架構+servlet:首先啟動項目,由於servlet3.0 版本新特性,不需要配置web.xml(沒使用spring),我目前使用的是@注解形式。前端通過form表單,或者地址鏈接,或者ajax,發出請求,如<a href=”SubjectServlet?method=modifysubject&id=${subject.id}”>修改</a>匹配到對應的servlet【@WebServlet("/SubjectServlet") @webServlet 用於將一個類聲明為servlet,該注解將會在部署時被容器處理,容器將根據具體的屬性配置將相應的類部署為servlet。】執行servlet中被重寫的doget()或dopost()方法【函數體都會執行自己的方法】如下doEcho() 函數
服務器通過request獲取前端數據(request.getParameter)。通過set方法將存在request中的數據轉化成對象。再通過對應的method變量判斷執行對應的函數塊。例如顯示全部,method對應的函數塊會調用dao層的顯示全部函數,返回list<subject>,將值存入session中,最后再通過response完成跳轉頁面。在jsp頁面同樣可以通過session獲取數值。最后完成顯示。(注意以上后端通過將值存入session,前端再從session中取值,只是在jsp頁面)【一句話概括:servlet作用就是接受請求及,作出相應】
Dao層的調用:①調用dao層的save()方法,save()方法里,將傳遞進來的對象信息轉化成sql語句。調用數據鏈路層來執行sql語句。②調用findall()方法,先new出list集合用以存放返回的數據庫記錄。執行sql語句得到數據庫結果集。遍歷結果集,將每一條記錄存入new出的對象中,並將該對象存入list集合。返回list集合。
SSH:Struts和servlet最大區別就是struts采用的是多例,而servlet采用的是單例模式。SSH中需要配置web.xml。①配置攔截器,此處設置攔截所有url(“/*”),將權限交給struts處理。②配置spring加載路徑及監聽器。這樣web.xml必備配置就完成了,不過在實際運行項目中應該配置<welcom-file>用於項目啟動加載頁(其實所有都應該配置,前面沒有介紹,后面也不再打算贅述,這點很重要,容易忽略,提醒下。第一次配置環境的時候,可能會因為這點讓你誤以為是其他配置錯了)。struts.xml中配置根據url的值匹配到對應的action。以及根據返回值跳轉到對應頁面。(struts.xml會自動加載,這點不用考慮url被攔截后是怎么找到具體action路徑的。還有application也是在某一路徑下自動加載,這些默認加載項大家了解下,最少暫時不會疑慮了。)現在客戶端輸入添加信息,點擊提交form表單到服務器。過濾器攔截所有url。在action中,將上傳上來的數據通過set轉換成對象,然后再根據method值匹配對應的方法,執行相應的dao層(hibernate)代碼,將記錄的對象型數據存入session.最后根據return的值和strut.xml的值跳轉到相應頁面(現在發現strus.xml還有這一功能,其實還可以設置成json數據返回)。其中比較servlet,我們可以看出數據的獲取已經不需要通過request方法來獲取,而是通過前端的name匹配傳輸具體值。還是相對較簡便一些。
Hibernate:通過session工廠獲取session。開始事務。執行方法(hibernate封裝好的orm方法,對數據庫進行操作,修改或讀取),提交事務,關閉session。
其中sessionfactory需要加載hibernate.cfg.xml文件(連接數據庫和指定映射文件路徑)。映射文件主要配置數據庫和實體類之間的映射關系。
Spring:spring主要負責對象的產生和管理。其注入方式主要包括三種(構造函數方式目前沒用過)。一種通過屬性setter方式注入(<property>標簽元素,其中name屬性對應的是要注入的變量名,type屬性值對應的該變量的類型,可以自定義類或者包裝類型。Value屬性對應的是相應的值,還有一個ref屬性,該屬性對應的是相應的bean),和注解方式@Autowired注入。其中@Autowired方式我個人比較喜歡,因為.xml文件比較簡單,但同時也造成依賴關系不清晰。在這里提供一個學習連接:http://www.imooc.com/article/1309
以及:http://blog.csdn.net/qiulongtianshi/article/details/7748227(帶有代碼)
SSM:spring和SSH一樣,不過在SSH中需要注意scope屬性
對於SSM中web.xml文件的配置和SHH配置差不多,都要配置spring路徑,不過,在SSH需要配置過濾器,將請求交給struts處理,而在SSM中則不需要配置過濾器,而是配置DispatcherServlet前端控制器,為不同請求配置相應的spring-mvc路徑(下面是一個工作流的web.xml文件代碼,比較能反映DispatcherServlet使用及配置)
Spring-mvc當接受到請求后,(或者項目啟動時如這里設置了<load-on-startup>1</load-on-startup>),不同的url請求會匹配到相應的spring-mvc配置文件(配置組件掃描,或者可以配置controller請求及跳轉的前后綴)
Spring-mvc配置文件在相應的包檢測到@Controller會產生相應的controller對象,url請求根據匹配到對應的@RequestMapping,並傳遞數據(SSM簡單粗暴不用擔心數據怎么傳過來的,怎么存入對象的)。其作用和struts一樣,不再贅述。
Mybatis:首先是利用spring產生的sqlSessionTemplate對象,並獲取其中的dao方法。其中mybatis配置文件mybatis-config.xml主要配置映射文件路徑,以及為類設置別名。數據庫的連接配置在sring-mvc.xml(實質spring)配置中
http://blog.sina.com.cn/s/blog_4550f3ca0100ubmt.html
在mybatis的xml文件中不再多說,主要注意resultType和resultMap區別,很有用哦
以下圖片參考文檔:
http://si shuok.com/forum/blogPost/list/5188.html16436