SSH框架整合总结

以下是我个人学习的总结,欢迎各位大神指正。

此次SSH框架整合用到的各框架版本号是struts-2.5.13,hibernate-5.2.16.Final,spring-4.3.16。

1、首先导入各个框架需要的jar包,我觉得最重要的就是jar包问题(应注意使用哪个版本的框架就使用那个版本中的jar包,不要混着用,容易出错。每隔一个大的版本,有些配置文件中也有一些差别,后面会提到)

struts2:


     以上是struts-2.5.13需导入的jar包(我现目前只了解几个jar的大致意思):

        (1)struts2-core-2.5.13.jar:此包是struts2的核心jar包,里面有核心过滤器

        (2)struts2-spring-plugin-2.5.13.jar:此包是struts2与spring整合需要添加的jar包,此jar包需注意的是若不与spring整合就不要添加此jar包,原因是该包的作用是配置了由spring工厂来创建Action对象即不整合时没有spring。若要使用该jar包,它的版本号应与当前struts2的版本号一致,否则会报错(我整合时报错,不知为什么).


spring:


    以上是spring-4.3.16需要导入的相关jar包

        (1)、spring-core-4.3.14.RELEASE.jar:这是spring的核心jar包

        (2)、commons-logging-1.2.jar:这是spring依赖的日志管理的jar包,应该在下载的spring文件中没有,需另行下载

        

hibernate:


    以上是hibernate-5.2.16需要导入的jar包(不是好了解)

        (1)dom4j-1.6.1.jar:用来解析xml文件的jar包

        (2)jboss-loggin-3.3.1.Final.jar:这是hibernate日志管理的依赖jar包,也可以与log4j结合


log4j2:


    这是日志管理log4j2的相关jar包(这里我把两个包替换成log4j-1.x的版本不行,会报错,猜测可能是该版本的框架中使用的是log4j2的接口)

        (1)log4j-api-2.11.0.jar:这是日志接口的jar包

        (2)log4j-core-2.11.0.jar:这是日志具体实现的jar包。两个jar包缺一不可


*到此有关框架的jar包添加完成,下面是与框架不相关的jar包

c3p0连接池:


    项目中若用到c3p0连接池则添加这两个jar包,注意版本号,低版本的只用添加c3p0一个jar包


数据库驱动:


    这里使用的是mysql数据库,所以添加mysql的驱动程序jar包

==到此所有的jar包添加完毕!添加jar包本人觉得需要对框架比较熟练了才能很好的掌握各个jar包的公用与取舍,我建议初学还是像我一样先添加进去运行起来再说,再一步一步的了解各个jar包的作用。有些时候程序报错会提示出找不到类或者某个文件这种错误时需考虑是否漏掉了jar包


2、接下来是对各个框架进行xml配置、对数据库连接信息的配置、日志管理的配置(这些配置文件通常放在类路径下,即src目录下)


c3p0-config.properties:该配置文件中配置了连接数据库的的相关信息。

jdbc.driverClassName=com.mysql.jdbc.Driver  #驱动程序类
jdbc.url=jdbc\:mysql\://localhost\:3306/ssh?useUnicode\=true&characterEncoding\=UTF8&useSSL\=false  #数据库的连接地址
jdbc.username=root    #登陆数据库的用户名
jdbc.password=123456    #登陆数据库的密码

applicationContext.xml(对spring框架的配置):spring就相当于一个大的工厂,用来创建实例,所以spring需管理struts2的Action的创建和hibernate的SessionFactory的创建、并且负责事务管理。

<?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:contex="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!-- 预先加载C3P0配置文件,classpath代表在类路径下,配置文件中的值可以通过${属性名}取得 -->
    <contex:property-placeholder location="classpath:c3p0-config.properties"/>
    <!-- 配置spring自动扫描注解的包 -->
    <contex:component-scan base-package="cn.cdut.ssh"></contex:component-scan>

    <!-- 配置数据源datasource,和c3p0的配置一样 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driverClassName}"></property>
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="user" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>

        <property name="minPoolSize" value="1"></property>
        <property name="maxPoolSize" value="10"></property>
        <property name="acquireIncrement" value="3"></property>
    </bean>

    <!-- 配置sessionFactory,每个hibernate版本都有对应的LocalSessionFactoryBean,这里是hibernate5,注意包名 -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
    </bean>

    <!-- 配置声明式事务管理器(采用基于注解的方式) -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <!-- 当事务管理器的id为transactionManager时,以下元素的transaction-manager属性可以省略 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

</beans>

    如果对<beans>标签中的一大串不了解的,请先了解xml的命名空间和scheme约束。


struts.xml:struts2的配置文件,需注意的是此配置文件的名称一定要是struts.xml。struts2的配置文件相对于来说比较简单,配置每个Action对应返回的视图即可,需注意的是:此时与spring整合了并把Action创建的任务交给了spring,所以<action>标签中的class属性的值应填spring创建该实例的id;还需注意的是上面spring采用了注解的方式生成bean,所以须在Action的相关类上添加@Controller和采用多例模式@Scope("prototype")。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <constant name="struts.devMode" value="true"/>
    
    <package name="test" namespace="/" extends="struts-default">
        <action name="testAction" class="testAction">
            <result name="success">/WEB-INF/testStruts.jsp</result>
        </action>
    </package>
</struts>


hibernate.cfg.xml:hibernate的配置文件,由于将SessionFactory的创建和事务管理交给了Spring,所以hibernate.cfg.xml的主要任务就是配置一些属性的值和配置hibernate的映射文件 *.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <!-- 配置方言,我的数据库是Mysql57,而且hibernate低版本中没有Mysql57Dialect,所以看情况来 -->
        <property name="dialect">org.hibernate.dialect.MySQL57Dialect</property>
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <!-- 自动更新表结构 -->
        <property name="hbm2ddl.auto">update</property>

        <!-- 配置hibernate映射文件 -->
        <mapping resource="cn/cdut/oa/test/User.hbm.xml"></mapping>

    </session-factory>
</hibernate-configuration>


log4j2.xml:这是log4j2日志的配置文件,这是在了解log4j2时看到大佬的,在此感谢

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="error">
    <!-- 先定义所有的appender -->
    <appenders>
        <!-- 这个输出控制台的配置 -->
        <Console name="Console" target="SYSTEM_OUT">
            <!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            <!-- 这个都知道是输出日志的格式 -->
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </Console>

        <!-- 文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用 -->
        <!-- append为TRUE表示消息增加到指定文件中,false表示消息覆盖指定的文件内容,默认值是true -->
        <File name="log" fileName="log/test.log" append="false">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </File>

        <!-- 添加过滤器ThresholdFilter,可以有选择的输出某个级别以上的类别  onMatch="ACCEPT" onMismatch="DENY"意思是匹配就接受,否则直接拒绝  -->
        <File name="ERROR" fileName="logs/error.log">
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </File>

        <!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
        <RollingFile name="RollingFile" fileName="logs/web.log"
                     filePattern="logs/$${date:yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
            <SizeBasedTriggeringPolicy size="2MB"/>
        </RollingFile>
    </appenders>

    <!-- 然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
    <loggers>
        <!-- 建立一个默认的root的logger -->
        <root level="trace">
            <appender-ref ref="Console"/>
        </root>

    </loggers>
</configuration>


web.xml:最重要的别忘记了,还要在web.xml中配置struts2的核心过滤器,和启动web项目就读取spring的配置文件的监听器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>SSH</display-name>
  
  <!-- 配置spring配置文件的路径 -->
  <context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  
  <!-- 配置spring-web包下的监听器,用于项目已启动就加载applicationContext.xml -->
  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  <!-- 配置Strust2核心过滤器 -->
  <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>
  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

==到此配置文件也搞定了,整合也就完成了,就差一步测试了,这里就不写出来了。

下面是SSH整合项目的下载地址:注意数据库配置文件中每个人不同

 SSH框架整合项目


猜你喜欢

转载自blog.csdn.net/IT______Rookie/article/details/80601275