搭建SSH詳細步驟及相關說明

由於手裏已有相關jar,爲方便我搭建的是:Struts2.0+Hibernate3.3+Spring3.0,數據庫:MySQLjava

若是想搭建最新的,在官網上下載最新jar便可。mysql

這裏會對比MyEclipse自動配置和手動配置,直接說搭建步驟,過程當中說明一下一些重要的jar的做用。web

一、新建web項目SSHspring

二、Struts2搭建http://struts.apache.org/downloadsql

經過MyEclipse搭建:數據庫

選擇須要用到的jar,express

finish後,會生成struts.xml,以及Struts 2.1 libraries,展開Struts 2.1 libraries,咱們能夠看到導入的jar的路徑:apache

這樣的路徑是絕對的,之後項目遷移環境了,這些jar也就不能用了,項目也就不能正常運行了。咱們但願jar是跟着項目目錄走的,因此將下載好的struts2的jar(下載struts-*-all.zip解壓後,struts/lib目錄下是struts全部的相關的jar包)放到WEB-INF/lib下,並右擊Struts2.1 Libraries-->Build Path-->Remove from Build Path,移除自動導入的jar。api

幾個主要jar包說明:session

commons-logging-1.0.4.jar        日誌組件

freemarker-2.3.13.jar                一個基於模板生成文本輸出的通用工具

ognl-2.6.11.jar         對象圖導航語言(jar包庫)

strut2-core-2.1.6.jar                 Struts2核心jar包

xwork-core-2.1.2.jar                 xwork核心包

commons-io-1.2.3.jar                io包

commons-fileupload-1.0.4.jar     文件上傳組件

javassist-3.7.ga.ja                    擴展java類和實現

commons-lang-2.5.jar               基礎工具包,封裝一些經常使用的基礎操做

三、Spring搭建(http://www.springsource.com/download/community)

經過MyEclipse搭建:

finish後,會生成applicationContext.xml和Spring 3.0.5 Libraries,下載Spring所需jar(spring-framework-**.zip解壓後,文件夾下的dist目錄下全部jar),放入WEB-INF/libs下,右擊Spring 3.0.5 Libraries-->Build Path-->Remove from Build Path,移除自動導入的jar。

幾個主要jar包說明:

struts2-spring-plugin-2.0.14.jar                Struts2+Spring整合包

spring-core-3.0.5.jar                                Spring核心工具包

spring-context-3.0.5.jar                           爲Spring提供核心擴展

spring-context-support-3.0.5.jar               爲Spring提供核心擴展

spring-beans-3.0.5.jar                              管理beans的工具

spring-expression-3.0.5.jar                       表達式語言

spring-web-3.0.5.jar                                 Web應用開發包

spring-aspects-3.0.5.jar                            提供對AspectJ的支持,以即可以方便的將面向方面的功能集成進IDE中

四、創建數據源

我這裏用的數據庫是MySQL,首先安裝MySQL,安裝MySQL可視化的管理工具,我這裏用的是Navicat Premium。在Navicat Premium建立數據庫sshd,新建user表:

打開MyEclipse Database Explorer窗口,在空白處右擊new...新建數據源:須要添加mysql鏈接數據庫的jar:mysql-connector-java.jar

finish後雙擊鏈接新建的數據源MySQL。

五、Hibernate搭建http://sourceforge.net/projects/hibernate/files/hibernate3/

經過MyEclipse搭建:

Spring與Hibernate有兩種方式整合,一種是不要hibernate.cfg.xml這個文件,一個是要這個文件,這裏只講解有這個文件的狀況。

finish後,會生成hibernate.cfg.xml、HibernateSessionFactory.java和Hibernate 3.3.2 Libraries,下載Hibernate所需jar放到WEB-INF/lib目錄下,右擊Hibernate 3.3.2 Libraries-->Build Path-->Remove from Build Path,移除自動導入的jar。

hibernate3.jar                                核心類庫 

antlr-2.7.6.jar            代碼掃描器,用來翻譯HQL語言

commons-collections-3.2.jar    Apache Commons包中的一個,包含了一些Apache開發的集合類,功能比java.util.*強大

dom4j-1.6.1.jar           一個java的XML API,相似於jdom,用來讀寫XML文件的

javassist-3.9.0.GA.jar       Javassist字節碼解釋器

jta-1.1.jar              標準的JTA API

slf4j-api-1.5.8.jar

lf4j-nop-1.5.2.jar

六、配置S2SH

在web.xml中配置struts二、spring

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>SSH</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
    <!--struts Framework start  -->
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <!--struts Framework end  -->
  
  <!--Spring Framework start  -->
  <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>
  <!--Spring Framework end  -->
</web-app>

 將數據庫中的表映射到項目中:

在項目src下新建包entity、dao,用來存放映射出來的文件。在MyEclipse Database Explorer窗口,雙擊「MySQL」鏈接鏈接數據源,選擇須要映射的表。

同時你也能夠配置多表之間一對1、一對多的關係。

hibernate.cfg.xml

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

    <session-factory>
        <!-- Database connection settings -->
        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/sshdb</property>
        <property name="connection.username">root</property>
        <property name="connection.password">1234</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="myeclipse.connection.profile">MySQL</property>
        
        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>
        
        <!-- transaction自動提交 ,配置Quartz-->
        <property name="connection.autocommit">true</property> 

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        
        <!-- 配置映射文件 -->
        <mapping resource="joanna/yan/entity/User.hbm.xml" />
    </session-factory>

</hibernate-configuration>

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx"    
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
    
    <!-- 配置SessionFactory,由Spring容器來管理Hibernate -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
    </bean>
    <!-- 配置OpenSessionInView攔截器 -->
    <bean id="OSIVInterceptor" class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    <!-- 配置事務管理器 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <!-- 將事務管理器通知化 -->
    <tx:advice transaction-manager="transactionManager" id="txAdvice">
        <tx:attributes>
            <tx:method name="query" isolation="DEFAULT" propagation="REQUIRED"/>
            <tx:method name="find*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
            <tx:method name="update*" isolation="SERIALIZABLE" />
            <tx:method name="save*" isolation="SERIALIZABLE"/>
            <tx:method name="delete*" isolation="SERIALIZABLE"/>
            <tx:method name="*" isolation="READ_COMMITTED"/>
        </tx:attributes>
    </tx:advice>
    <!-- 織入事務管理通知 -->
    <aop:config proxy-target-class="true">
        <aop:pointcut expression="execution(* joanna.yan.action.*.*(..))" id="txcut"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txcut"/>
    </aop:config>
    
    <!-- 配置dao -->
    <bean id="UserDAO" class="joanna.yan.dao.UserDAO">
        <property name="sessionFactory">
            <ref bean="sessionFactory" />
        </property>
    </bean>
    
    <!-- 配置Action -->
    <!--可是如今有個衝突struts中的一個類中能夠有多個方法,也就是說有多個action,而spring中卻只能是單個的,
    這時就有衝突,須要在spring的配置文件中加上scope="prototype"這句話,spring的bean默認是單例的,
    也就是說只能new一個實例,可是當用struts的時候,須要將scope配置成proprtype的,它表示每一個訪問就new一個實例。  -->
    <bean id="UserAction" class="joanna.yan.action.UserAction" scope="prototype">
        <property name="userDAO" ref="UserDAO"></property>
    </bean>
</beans>

struts.xml:(由於先前手動導入的Struts jar是2.0的,這樣XML中dtd聲明改爲2.0)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <constant name="struts.devMode" value="true"></constant>
    <constant name="struts.action.extension" value="do,action,*,"></constant>
    
    <package name="UserPackage" extends="struts-default">
    <!--SysUserAction爲applicationContext.xml中配置的bean的id  
    struts.xml中的class再也不是action類的全路徑地址,而是spring配置文件中的bean的id的名字,二者必須一致。
       而spring的配置文件中的class就是原先在struts.xml中配置的class的路徑-->
        <action name="user" class="UserAction" >
            <result name="success">/index.jsp</result>
            <result name="default">/index.jsp</result>
        </action>
    </package>

</struts>    

User.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="joanna.yan.entity.User" table="user" catalog="sshdb">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" /><!--主鍵生成策略  -->
        </id>
        <property name="username" type="java.lang.String">
            <column name="username" length="20" not-null="true" />
        </property>
        <property name="age" type="java.lang.Integer">
            <column name="age" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

七、測試

UserAction.java

package joanna.yan.action;

import java.util.List;
import joanna.yan.dao.UserDAO;
import joanna.yan.entity.User;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{
    private User user;
    private UserDAO userDAO;
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    public UserDAO getUserDAO() {
        return userDAO;
    }
    public void setUserDAO(UserDAO userDAO) {
        this.userDAO = userDAO;
    }
    @Override
    public String execute() throws Exception {
        List<User> list=userDAO.findAll();
        for (User user : list) {
            System.out.println(user);
        }
        return "success";
    }
}

測試結果:

 若是此文對您有幫助,打賞我一下吧~

相關文章
相關標籤/搜索