用Idea 開發一個簡單的Struts2+Maven+Hibernate 專案的流程
本文整理了用Idea Intellij 開發一個綜合運用Strut 2, Maven 和Hibernate 專案的流程,並在步驟中對比了此專案技術相對於Servlet、手動新增Jar 和JDBC 的優勢,還記錄了一些可能出現問題的坑,最後總結專案收到請求後的執行過程。
1)File - New - Project... - Maven - Create from archetype (勾選上) - webapp - Next。如下圖:
2)填寫GroupId 和 ArtifactId,一路Next(其間可修改專案名稱等),直到Finish,需等待Idea Run "Import change"。
3)分別配置Maven 的pom.xml,Tomcat 的web.xml,Struts 2 的struts.xml,Hibernate 的hibernate.cfg.xml。如下圖:
a) pom.xml: 新增依賴(dependencies, 可在http://mvnrepository.com 查詢) struts, servlet, json, fast json (或 Gson), hibernate, mysql-connector. 有了Maven 此配置之後,就不用手動新增相關Jar 包了。此處有坑:Idea 不自動編譯釋出java 資料夾內的資原始檔,在pom 配置中的build 標籤內新增以下程式碼填上此坑:
<resources> <resource> <directory>src/main/java</directory><includes> <include>**/*.xml</include> </includes> </resource> </resources>
b) web.xml: 新增struts2 核心過濾器 filter,也可設定主頁等 (welcome-file-list)。此處有坑:Idea 自動生成的web.xml 好象有問題,簡單粗暴的方法是直接用一個新的可用web.xml 替換。
c) struts.xml: 配置package 內 default-action-ref 和action, 當然這些可以晚點再做。struts.xml(作為獨立出來的控制層,降低耦合) 和Action(業務層) 共同代替了Servlet。Struts 2 框架代替Servlet 完成的事:獲取引數,設定返回Attribute,調取轉發語句 (直接返回字串就可以定位到相應的介面); 國際化和上傳下載操作也可以由框架完成。
d) idea 沒有自動將java 資料夾標識為資原始檔,在此資料夾上右鍵 - "mark directory as Source Root" 即可。
e) hibernate.cfg.xml: 一次配好,多次複用。選單View - Tool Windows - Database (左下角有一個快捷視窗按鈕,也可開啟Database)匯入此檔案,測試連線,成功的話有提示"Successful"。如下圖:
4)配置Tomcat:選單Run - Edit configurations - 左側欄Defaults - Tomcat Server - Local, 設定Application Server 和Open browser,Apply,如下圖;然後不用關此對話方塊,點左上角加號,新增Tomcat Server - Local - 設定Deployment,OK。(更新:貌似Defaults裡的tomcat server 不設定也可以?只是Project strutrue 需要設一下SDK)
5)建立HibernateSessionFactory 類;用Hibernate 反向生成Pojo:選單View - Tool Windows - Persistence (左下角有一個快捷視窗按鈕,也可開啟Persistence),空白處右鍵,Generate Persistence Mapping - By Database Schema,之後如下圖。Hibernate 是對JDBC 輕量級的封裝,將物件和資料庫欄位一一對應,減少了建立pojo 和封裝資料的工作量。
6)建立DAO 和其實現類。
7)建立Action 類。Action 方法不允許帶引數,因為Struts2本質是通過反射實現的。返回值型別為String,因為要匹配結果集。需要從瀏覽器接收或傳遞給目標頁面的引數,在Action 類中建立private 該引數的變數並生成getter setter 即可,比Servlet 中用request.getParameter() 接收引數或用request.setAttribute() 方便多了。此類中呼叫DAO 實現類,即對資料庫增刪改查,取得的資料即可傳給目標jsp 頁面。
8)建立前端頁面等相關資源。用Struts iterator 標籤可迴圈取出Action 傳遞回來的資料,配合EL 表示式將資料填到相應位置。struts2 標籤<>裡面不能使用el表示式${} (但可放在開始和結束標籤之間), 只可以使用ongl表示式%{};
EL表示式可以直接輸出內容,但是ONGL不行,它是與STRUTS的標籤相結合使用的。
簡單總結專案執行過程:瀏覽器發出請求 - Tomcat web.xml 過濾 - struts.xml 匹配action - action 接收引數並傳資料到struts.xml 結果集(result) 指定的jsp 頁面。
小功告成!