IntelliJ IDEA關於SSH(Struts2, Spring, Hibernate)框架的搭建


這學期的Web作業要求用這個框架來搭建一個Web App,這里快樂地記一下自己的實現步驟。

本工程沒有使用maven、gradle等構建工具。

本框架對應使用數據庫MySQL,並采用C3P0連接池,下載地址:https://sourceforge.net/projects/c3p0/

創建項目

新建項目。左側選擇Spring,右側選擇Struts2, Application Server, Hibernate,點擊庫名后會在下方出現相應的配置,沒有本地庫的選擇Download就可以,在配置選項完成之后IDE會自動下載對應的jar。

之后Next→工程起名→Finish。

接下來會有或長或短的一段配置時間。如果之前有選過Download,則會先自動下載對應的jar包。

導入其他相關的jar包

項目創建完成之后,需要手動往項目中導入需要的其他jar包。導入方法是將jar文件放入工程的lib目錄下,然后在IDE中進行相關配置。

  1. mysql-connector-java:MySQL的java驅動,下載地址:https://dev.mysql.com/downloads/connector/j/
  2. c3p0連接池相關的包,本文最開始已提供下載地址:https://sourceforge.net/projects/c3p0/
  3. spring-web,下載地址:https://mvnrepository.com/artifact/org.springframework/spring-web
  4. struts2-spring-plugin,下載地址:https://mvnrepository.com/artifact/org.apache.struts/struts2-spring-plugin

添加數據庫

接下來配置數據庫。

選擇IDE最右側欄的Database標簽,點擊加號,選擇Data Source中的MySQL:

先填URL,之后Name、Host、Database等會自動生成,然后填好用戶名和密碼,單擊Test Connection,顯示連接成功后,單擊OK。

這是就會在窗口中看到剛連接好的數據庫了:

我們可以通過這個小工具代替MySQL的Shell或者Workbench使用。

創建實體類和ORM文件

接下來要創建的是數據庫各表對應的實體類了,這里IDE可以全部自動生成。具體操作見下:

單擊IDE左下方的Persistence,在彈出標簽頁的工程名那里右鍵,選擇Generate Persistence Mapping中的By Database Schema。

按下圖所示進行操作:

配置完成后,就可以看到在所選的包下生成了數據表對應的實體類和hbm.xml文件。

 至此,持久化類已生成完畢。

 

本框架會涉及到4個xml配置文件:

  • web.xml - web application
  • struts.xml - struts2
  • hibernate.cfg.xml - Hibernate
  • applicationContext.xml - Spring

配置web.xml

web.xml需要添加對struts2和spring的支持,其中struts2的部分(過濾器)已經自動配置好了:

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

接下來只需要配置spring的部分:

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:/applicationContext.xml</param-value>
</context-param>

配置struts.xml

struts.xml中主要配置的是各種action,在和spring搭配使用的情況下,action的class需要與spring生成的JavaBean的id對應。

添加action的示例如下:

<struts>
    <constant name="struts.objectFactory" value="spring"/>
<package name="blogPkg" namespace="/blogs" extends="struts-default"> <action name="login" class="login"> <result name="login">UserLogin.jsp</result> </action> <action name="signup" class="signup"> <result name="signup">UserSignup.jsp</result> </action> </package>

</struts>

  <struts></struts> 是struts.xml文件的根標簽,其下的標簽結構為:

  •  <constant/> 用於定義常量,name屬性為常量名,value屬性為常量值。
  •  <include/> 用於包含其他的struts.xml配置文件,這里沒有用到。
  •   <package></package> 用於將多個action組織成一個模塊。
    • <action></action> 用於注冊action。name屬性用來標識action,class為action所在類的位置,method指要訪問action類中的方法名。
      •  <param></param> 參數設置。name對應Action中的bean屬性名。
      •  <result></result> 對應Action類的返回值。name屬性和返回值內容一致。

 

配置hibernate.cfg.xml

這個是Hibernate框架的核心配置文件。

實際上Hibernate框架相關的配置文件有兩種:一個是核心配置文件hibernate.cfg.xml;另一個是針對每個實體類都有的一個OR映射文件xxx.hbm.xml,這個文件在之前的步驟中已經自動創建好了。

hibernate.cfg.xml主要涉及MySQL的驅動和登錄,以及Hibernate的相關配置。

此文件在前面生成持久化類的時候選擇創建。自動生成的配置文件已經包含了OR映射的部分,我們只需要添加MySQL的部分就可以了:

    <!--MySQL驅動-->
    <property name="connection.url">jdbc:mysql://127.0.0.1:3306/servlet_db?serverTimezone=GMT</property>
    <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>

    <!--MySQL的用戶名和密碼-->
    <property name="connection.username">root</property>
    <property name="connection.password">yourPassword</property>

 

配置applicationContext.xml

這個是有關spring的配置。Spring本質上是一個BeanFactory,可以按照業務邏輯的需求生產出各種JavaBean。

在本工程里涉及C3P0連接池的配置、SessionFactory的配置、各層(Action、業務邏輯、DAO)的配置。

此文件需要手動創建:在工程目錄的src處右鍵,選擇XML Configuration File下的Spring Config,然后起好名字就可以了。

創建完成之后,需要先配置一下Spring的Application Context。一般來說IDE會在頁面上方自動提示,按照提示完成即可。如果沒有提示,需要進入Project Structure(Ctrl+Alt+Shift+S),在Facets中的Spring里,單擊加號創建新的application context,把剛才創建的xml添加進來即可,如下圖。

 

初創建的ApplicationContext.xml文件是一個只包含一個根節點<beans></beans>的xml文件,我們需要手動向<beans></beans>中添加bean標簽。

關於c3p0連接池,這里將其封裝為一個JavaBean:

<!-- 數據源(C3P0連接池) -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
    <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/servlet_db?serverTimezone=GMT"/>
    <property name="user" value="root"/>
    <property name="password" value="yourPassword"/>
    <property name="maxPoolSize" value="80"/>
    <property name="minPoolSize" value="1"/>
    <property name="initialPoolSize" value="1"/>
    <property name="maxIdleTime" value="20"/>
</bean>

對於其他類的配置,基本格式如下:

<bean id="規定Bean的ID" class="來自於哪個類">
    <property name="來自於那個類的某個屬性名" ref="依賴的bean的ID"/>
</bean>

 Bean有以下的屬性,除了class屬性必須配置,其他屬性都可以不配置:

  • id - 在整個IoC容器中的唯一標識
  • class - 實例化的Bean類
  • scope - 作用域,有5種類型:
    • singleton - 單例,bean容器
    • prototype - 每次請求創建新的實例
    • request - 每次請求創建新的實例,僅在當前request有效
    • session - 每次請求創建新的實例,僅在當前sessioni有效
    • global session - 這里同session
  • constructor arguments - 構造器參數
  • proterties - 屬性,構造器注入還是設值注入
  • autowriting mode - 自動裝配模式
  • lazy-initialization mode - 懶加載模式
  • initialization/destruction method - 構造/析構方法

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM