Struts2+Hibernate框架探險
寫這篇文章的目的
了解 JavaWeb 開發的人都知道SSH和SSM框架,前段時間開始接觸 JavaWeb 開發,看了幾個教學視頻後就想上手構建一個小型 Web項目,可在跟著視頻敲代碼當中,使用 Struts2+Hibernate框架 卻不是那麽順利,百度和谷歌都用上,折騰了幾天才搞定。究其原因,是因為Struts和Hibernate框架隨著版本的升級,部分 API 有了很大的變化,然而網上的教程幾乎全都是舊版本的,為了讓更多的框架使用新手不被新舊版本的更替和網上的過時教程所坑,同時也當作個人的筆記,所以寫下了此文。
使用Struts2和Hibernate框架
使用的開發工具為 Eclipse Java EE IDE for Web Developers Neon.3
Struts2與Hibernate整合
- 創建struts2和bibernate用戶類庫
不必多說,基本的程序開發操作 - 導入struts2與hibernate的jar包
這裏需要引起註意,使用Eclipse不僅需要引入用戶類庫,還需要在項目屬性的 Deployment Assembly 加入項目所用到的框架以及JDBC驅動 - 配置web.xml
加入struts2的過濾器 - 創建struts.xml
配置action -
創建hibernate.cfg.xml
配置JDBC驅動和數據庫連接信息, xampp 整合的為 MariaDB ,盡管它是MySQL的一個分支,但它有它專有的驅動,相應的你需要將hibernate.connection.driver_class
配置為org.mariadb.jdbc.Driver
,hibernate.connection.url
配置為jdbc:mariadb
,而hibernate.dialect
仍使用MySQL 的配置就好了。在這個文件裏你同時也需要配置mapping resource
的值為 hbm.xml 即對象關系映射文件的位置取巧而不是蠻幹
- 使用 Maven 管理項目的依賴問題
- 復制修改使用下載的 struts2 解壓包內示例的 struts.xml 文件
- Eclipse可以使用 hibernate tools for eclipse 插件來生成 hbm.xml 文件,它決定了實體類在數據庫中生成的表結構
- Eclipse可以使用 StrutsClipse 插件來獲得 struts.xml 的錯誤提醒
-
使用 JUnit 測試框架來及時調試代碼
編程中遇到的問題以及解決辦法
-
在使用 JUnit 和 Hibernate 框架自帶的 SchemaExport 測試創建表結構時,無法在數據庫中生成表結構,利用百度和谷歌,自己多次排查,找出原因為 Hibernate 新版本創建數據庫連接 Session 的 API 和 SchemaExport API 均有所改變。
舊版本代碼
//創建配置對象
Configuration config = new Configuration().configure();
//創建服務註冊對象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
//創建sessionFactory
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
//創建session對象
Session session = sessionFactory.getCurrentSession();
//創建SchemaExport對象來生成表結構
SchemaExport export = new SchemaExport(config);
export.create(true,true);
新版本代碼
Configuration config = new Configuration().configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.getCurrentSession();
Metadata metadata = new MetadataSources(serviceRegistry).buildMetadata();
SchemaExport export = new SchemaExport();
export.create(EnumSet.of(TargetType.DATABASE), metadata);
-
在使用 Struts.xml 文件進行頁面調用時,Tomcat 報錯
又是一番排查,原因依舊是新舊版本的更替問題,因為我在 struts.xml
action
中采用了*_*
通配符調用動態方法,所以需要加入<constant name="struts.enable.DynamicMethodInvocation" value="false" />
以及<allowed-methods>允許調用的方法名,多個方法用逗號隔開</allowed-methods>
才能允許動態方法的調用,其實返回的錯誤信息已經說明了這個問題。思索和建議
初次動手使用框架來進行 JavaWeb 開發,盡管是一個小型的工程,卻也花費了我很多時間,中間還有很多沒有言說的磕磕絆絆。造成這種情況的原因大概有兩點 - 初次使用框架,相對來說各個組件的配置和功能並不是那麽了解的透徹
-
網上的相關教程大多數是 Copy 一份的,這點使用 百度 搜索體現的尤為明顯,谷歌 相對來說較好,但也存在教程過時,不適配更新後的框架,極易誤導新手,學習環境並沒有像大多數人說的那麽友好。真正的大神都在悶聲發大財,不會在意這些雞毛蒜皮的事(逃
俗話說: 授人以魚不如授人以漁。當你現在還找不到教你釣魚的人的時候,你就應該學會 自學釣術。對於編程來說,你需要逐漸試著去看 官方API文檔 ,因為 技術革新的速度實在太快 。當你能從搜索引擎得到你想要的答案的時候,其實你已經落在先頭部隊的後面了,這也是為什麽很多人建議去閱讀 源碼 的原因。
編程這條路還有很長,盡管走的慢,但請不要後退 ————你我共勉
2017/4/7 19:05
Struts2+Hibernate框架探險