基于SSH实现管理系统之框架整合篇
目录
创建项目引入jar包
创建项目引入jar包
Struts2框架开发相应的jar包
Hibernate框架开发相应的jar包
Spring框架开发相应的jar包
Struts2框架需要导入的jar包
lib是它所有的jar包
如果做基本的web开发,可以去apps/目录下看空白的模板struts2-blank.war,看这里的jar包和配置文件
..\struts-2.3.20\apps\struts2-blank\WEB-INF\lib\
基本开发所需的jar包
还需要了解几个基本的jar包
struts2-convention-plugin-2.3.20.jar —-struts2的注解开发的jar包
struts2-spring-plugin-2.3.20.jar —-struts2用于整合spring的jar包
hibernate
..\hibernate-release-4.3.11.Final\lib\required下面的jar包都需要导入
..\hibernate-release-4.3.11.Final\lib\jpa目录下的jar包都需要
日志记录:
..\hibernate-release-4.3.11.Final\lib\optional\ehcache目录下的slf4j-api-1.6.1.jar
这个jar不做具体的日志记录,主要用来整合log4j的jar包
数据库的驱动包
Spring所需要的jar包
IOC
spring-beans-4.0.5.RELEASE.jar
spring-context-4.0.5.RELEASE.jar
spring-core-4.0.5.RELEASE.jar
spring-expression-4.0.5.RELEASE.jar
日志记录:
依赖包中的
com.springsource.org.apache.log4j-1.2.15.jar
com.springsource.org.apache.commons.logging-1.1.1.jar
引入相应的配置文件
Struts2框架的配置文件
web.xml
struts.xml
Hibernate框架配置文件
hibernate.cfg.xml(在SSH整合中该配置文件可以省略)
映射文件
Spring配置文件
web.xml
applicationContext.xml
另外引入log4j的配置文件
log4j.properties
Struts2框架的配置文件
1.1. web.xml
配置struts框架的核心过滤器的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Struts Blank</display-name>
<filter>
<!-- 配置Struts2核心Filter的名字 -->
<filter-name>struts2</filter-name>
<!-- 配置Struts2核心Filter的实现类 -->
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<!-- 配置Struts2框架默认加载的Action包结构,可以没有。 -->
<param-name>actionPackages</param-name>
<param-value>org.apache.struts2.showcase.person</param-value>
</init-param>
<!-- 配置Struts2框架的配置提供者类 -->
<init-param>
<param-name>configProviders</param-name>
<param-value>lee.MyConfigurationProvider</param-value>
</init-param>
</filter>
<!-- 配置Filter拦截的URL -->
<filter-mapping>
<!-- 配置Struts2的核心FilterDispatcher拦截所有用户请求 -->
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
Spring框架配置文件
web.xml配置spring的监听器
第一种:
<listener>
<listener-class>org.springframework.context.ContextLoaderListener</listener-class>
</listener>
另一种:
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
通过上面的配置,web容器会自动加载applicationcontext.xml初始化。
如果需要指定配置文件的位置,可通过context-param加以指定:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath: myApplicationContext.xml</param-value>
</context-param>
之后,可以通过
WebApplicationContextUtils.getWebApplicationContext方法在web应用中获取applicationcontext的引用。
创建包结构及实体
- com.ssh
- action
- service
- service
- dao
- domain //实体类
- domain
- 实体类
- 参数 定义为 private
- get()和set()方法
Struts整合Spring
创建页面
新建JSP页面
在页面中引入struts2的标签
<%@ taglib uri="/struts-tags" prefix="s" %>
使用struts的标签:
<s: xxxx />
编写Action、Service和Dao的类
Service.java中创建一个Dao的实例,并创建其set()和get()方法
Action继承ActionSupport类,实现ModelDriven<>结构(模型驱动)
创建Service实例,并创建其set()和get()方法
模型驱动:
创建实体类的实例,重写getModel方法,返回值类型为该实体类的类型
配置Action、Service和Dao的类
Spring的配置文件applicationContext.xml
<!-- 配置业务层的类-->
<bean id="xxxService" class="com.ssh.service.xxxService">
<property name="xxxDao" ref="xxxDao"/>
</bean>
<!--配置DAO的类-->
<bean id="xxxDao" class="com.ssh.dao.xxxDao">
</bean>
Struts2和Spring整合的两种方式
Action的类由Struts2自身去创建
jsp页面的表单中设置路径
<s:form action="xxxxxx" method="post" namespace="/" theme="simple">
……
在struts.xml配置
<package name="ssh" extends="struts-default" namespace="/">
<action name="xxxxxx_*" class="action的全路径" method="{1}">
</action>
</package>
此时,Dao和Service实现自动注入
Action的类由Spring框架去创建
ApplicationContext.xml中配置Action
<!--配置DAO的类-->
<!--singleton 只有一个实例,也即是单例模式。
prototype访问一次创建一个实例,相当于new。 -->
<bean id="xxxDao" class="com.ssh.dao.xxxDao" scope="prototype">
<!--手动注入Service-->
<property name="xxxService" ref="xxxService"/>
</bean>
此时,手动注入Service和Dao
Action在Struts.xml中配置
<package name="ssh" extends="struts-default" namespace="/">
<action name="xxxxxx_*" class="写ApplicationContext.xml中bean的id" method="{1}">
</action>
</package>
Spring整合Hibernate框架
创建数据库(hibernate中不手动创建数据库也可以)
创建映射文件
在实体类对应的包下面创建实体类对应的hbm.xml配置文件
<hibernate-mapping>
<class name="实体类全路径" table="表对应的名称">
<!--主键->
<id name="pid" column="pid">
<generator class="native"/>
</id>
<property name="xxxx" column="表对应的列"/>
</class>
</hibernate-mapping>
Spring整合Hibernate
此时不带Hibernate配置文件
新建一个属性文件 jdbc.properties
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssh
jdbc.username=root
jdbc.password=xxxx
在applicationContext.xml中进行配置
<!--引入外部的属性文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--配置连接池-->
<!--配置C3P0连接池-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPoolerDataSource">
<property name="driverClass" value="${jdbc.driverClass}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--配置Hibernate的相关属性-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!--注入连接池-->
<property name="dataSource" ref="dataSource"/>
<!--配置Hibernate的属性-->
<property name="hibernateProperties">
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.ayto">update</prop>
</property>
<!--加载Hibernate中的映射文件-->
<property name="mappingResources">
<list>
<value>com/ssh/domain/xxx.hbm.xml</value>
</list>
</property>
</bean>
编写Dao类
在DAO中注入SessionFactory:
<bean id="xxxDao" class="com.ssh.dao.xxxDao">
<!--注入SessionFactory-->
<property name="sessionFactory" ref="sessionFactory" />
</bean>
在DAO中调用模板完成保存的操作
this.getHibernateTemplate().save(xxxx)
添加事务管理
在ApplicationContex.xml中添加事务管理
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTranscationManager" >
<property name="sessionFactory" ref="sessionFactory" />
</bean>
开启注解事务:
在ApplicationContex.xml中开启注解事务
<!--开启注解事务-->
<tx:annotation-driven transaction-manager="transactionManager"/>
在Service中添加事务注解
在Service类上添加注解@Transactional