SSH web项目说明

  项目本质是使用SSH框架构建J2EE web,同时对各个模块能自动生成MVC各层的文件而自动实现该模块基本的增删改查的功能。

  总体思路是先搭建好了基于SSH的web工程,配置好各个框架的配置文件确定好各层文件的目录。然后根据数据库表使用eclipse的插件

jboss hibernate tools 根据数据库表生成实体bean以及hibernate 映射文件,然后根据实体bean 使用反射等生成action、dao、logic、jsp

等文件实现该实体bean的增删改成功能。

  首先是搭建web工程,新建maven工程使用maven来进行项目管理(maven确实值得一用,介绍资料很多这里不多说),修改pom文件引入

工程依赖,这里使用了struts2.3.16,spring4.1.2,hibernate4.3.7,都是目前最新的release版。

  首先说下三者的集成,struts通过在web.xml配置

<!-- 定义Struts2的FilterDispathcer的Filter -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<!-- FilterDispatcher用来初始化Struts2并且处理所有的WEB请求。 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

 通过StrutsPrepareAndExecuteFilter进行初始化以及请求拦截。初始化时会在classpath目录下找配置文件struts.xml。

  spring 通过在web.xml里配置

    <!-- 配置Spring配置文件的位置 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml
            </param-value>
    </context-param>
    <!-- 使用ContextLoaderListener初始化Spring容器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

使用Listener进行初始化,并且根据contextConfigLocation参数找配置文件。

这样sturts和spring就集成在了web项目里。

 Hibernate可以说是作为spring的一个扩展组件集成的,在spring的配置文件applicationContext中配置

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close">
        <!-- 指定连接数据库的驱动 -->
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <!-- 指定连接数据库的URL -->
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
        <!-- 指定连接数据库的用户名 -->
        <property name="user" value="root"/>
        <!-- 指定连接数据库的密码 -->
        <property name="password" value="**"/>
        <!-- 指定连接数据库连接池的最大连接数 -->
        <property name="maxPoolSize" value="40"/>
        <!-- 指定连接数据库连接池的最小连接数 -->
        <property name="minPoolSize" value="1"/>
        <!-- 指定连接数据库连接池的初始化连接数 -->
        <property name="initialPoolSize" value="1"/>
        <!-- 指定连接数据库连接池的连接的最大空闲时间 -->
        <property name="maxIdleTime" value="20"/>
    </bean>

    <!-- 定义Hibernate的SessionFactory -->
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <!-- 依赖注入数据源,注入正是上面定义的dataSource -->
        <property name="dataSource" ref="dataSource"/>
        <!-- mappingResouces属性用来列出全部映射文件 -->
        <property name="mappingLocations">
         <list>
         <value>classpath:/com/way/sshweb/beans/*.hbm.xml</value>
         </list>
        </property>
        <!-- 定义Hibernate的SessionFactory的属性 -->
        <property name="hibernateProperties">
            <props>
                <!-- 指定数据库方言 -->
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.MySQL5InnoDBDialect</prop>
                <!-- 是否根据需要每次自动创建数据库 -->
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <!-- 显示Hibernate持久化操作所生成的SQL -->
                <prop key="hibernate.show_sql">true</prop>
                <!-- 将SQL脚本进行格式化后再输出 -->
                <prop key="hibernate.format_sql">true</prop>
            </props>
        </property>
    </bean>

 

这样hiernate的sessionFactory由spring的factorybean提供。

之后就是具体某个数据库表的增删改查模块。首先是建立数据库表,写实体bean以及hibernate映射文件;然后写DAO,让dao类集成自HibernateDaoSupport

通过getHibernateTemplate()继续增删改查操作;之后是Logic,logic类依赖DAO类,业务类方法主要也是获取实体类列表、获取某个实体等,没有特殊

处理的话直接调用dao类的函数即可;然后是Action,action继承自ActionSupport,且依赖于logic类,struts action作为controller根据不同的请求调用不同的

方法,返回不同的Result进行页面渲染。

这里为了简化客户端编码使用了jquery-easyui(很多组件样式,用来做后台管理类界面很容易),它主要是使用json和后台通讯,比如说列表功能,你只需要返回一串

json给它,前端就能自动解析成表格列出来。struts2返回json是通过struts2-json-Plugin实现的,使用也很简单。

最后记得配置struts的action,同时配置spring的dao、logic bean用来注入到action里。

 

这里可以看出后端基本功能的代码很大程度上是一个同样的模式,这就可能实现自动化。

从数据库表到实体bean,hibernate tools工具能很好的完成,就不需要重复,出发实现更高层度的自动化,我们需要实现从实体bean到action,dao,logic的自动化。

基本通过反射能够完成。

项目地址:https://github.com/littlecoderonway/sshweb

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。