標籤:driver 改變 天才 nat 沒有 開始 code ase etc
寫這篇文章的目的
瞭解 JavaWeb 開發的人都知道SSH和SSM架構,前段時間開始接觸 JavaWeb 開發,看了幾個教學視頻後就想上手構建一個小型 Web項目,可在跟著視頻敲代碼當中,使用 Struts2+Hibernate架構 卻不是那麼順利,百度和Google都用上,折騰了幾天才搞定。究其原因,是因為Struts和Hibernate架構隨著版本的升級,部分 API 有了很大的變化,然而網上的教程幾乎全都是舊版本的,為了讓更多的架構使用新手不被新舊版本的更替和網上的過時教程所坑,同時也當作個人的筆記,所以寫下了此文。
使用Struts2和Hibernate架構
使用的開發工具為 Eclipse Java EE IDE for Web Developers Neon.3,struts2版本為 struts-2.5.10.1 ,hibernate版本為 hibernate-release-5.2.9.Final ,Tomcat和Mysql為工具 xampp 最新的整合版本。
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 即對象關係對應檔的位置
取巧而不是蠻幹
//建立設定物件 Configuration config = new Configuration().configure(); //建立服務註冊對象ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();//建立sessionFactorySessionFactory 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 一份的,這點使用 百度 搜尋體現的尤為明顯,Google 相對來說較好,但也存在教程過時,不適配更新後的架構,極易誤導新手,學習環境並沒有像大多數人說的那麼友好。真正的大神都在悶聲發大財,不會在意這些雞毛蒜皮的事(逃
俗話說: 授人以魚不如授人以漁。當你現在還找不到教你釣魚的人的時候,你就應該學會 自學釣術。對於編程來說,你需要逐漸試著去看 官方API文檔 ,因為 技術革新的速度實在太快 。當你能從搜尋引擎得到你想要的答案的時候,其實你已經落在先頭部隊的後面了,這也是為什麼很多人建議去閱讀 源碼 的原因。
編程這條路還有很長,儘管走的慢,但請不要後退 ————你我共勉
2017/4/7 19:05
Struts2+Hibernate架構探險