SSH框架整合

来源:互联网 发布:网络大专文凭含金量 编辑:程序博客网 时间:2024/06/07 00:00

1.整合Spring,Struts2

1.导入jar包,我的资源里有,可以自行下载
2.创建一个Actino类

public class UserAction extends ActionSupport{    public String userLogin(){        System.out.println("userLogin方法执行了!");        return  null;    }}

3.搭建struts.xml配置

  • 导入约束
<!DOCTYPE struts PUBLIC        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"        "http://struts.apache.org/dtds/struts-2.3.dtd">
  • 配置Action
<struts>    <package name="user" extends="struts-default" namespace="/">        <action name="user_*" class="cn.itcast.web.action.UserAction" method="{1}"></action>    </package></struts>

4.配置前端控制器

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"         version="3.1">    <filter>        <filter-name>struts</filter-name>        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>struts</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping></web-app>

运行走一个,看看测试结果
结果报错了,把struts-spring-xx.jar的jar包删掉就行,删掉后就可以运行了

配置好初始环境后,我们开始整合spring,跟,sturts,我们选择使用注解整合,

开始整合 , 配置applicationContext.xml(spring)配置,

  • 导入约束
<?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:aop="http://www.springframework.org/schema/aop"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- bean definitions here --></beans>
  • 开启IOC注解,AOP注入开关
        <!--IOC开关-->        <context:component-scan base-package="cn.itcast"/>        <!--AOP开关-->        <aop:aspectj-autoproxy />

导回刚刚我们删除的jar包,
配置web.xml ,我们需要使用spring提供的监听器来完成工厂加载

<!--初始化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>

然后修改Action类

@Controller("UserAction")public class UserAction extends ActionSupport{    @Resource(name="UserServiceImpl")    private UserService us;    public String userLogin(){        us.save();        System.out.println("userLogin方法执行了!");        return  null;    }}

service类

@Service("UserServiceImpl")public class UserServiceImpl implements UserService {    public void save(){        System.out.println("调用了保存的方法!");    }}

修改struts.xml配置
我们刚刚导入的是struts 跟 spring的整合包,导入后,可以在xml里面获取对象,从而省了从WebApplicationContextUtils里面获取对象,

<!DOCTYPE struts PUBLIC        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"        "http://struts.apache.org/dtds/struts-2.3.dtd"><struts>    <package name="user" extends="struts-default" namespace="/">    <!--class修改成了类的注解value-->        <action name="user_*" class="UserAction" method="{1}"></action>    </package></struts>

运行看看能不能跑通,

这里写图片描述

结果是可行的,我们以及整合了struts跟spring

整合spring跟hibernate

1.我们可省去hibernate的配置文件,把文件信息写到spring的配置里面

<?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:aop="http://www.springframework.org/schema/aop"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- bean definitions here -->        <!--IOC开关-->        <context:component-scan base-package="cn.itcast"/>        <!--AOP开关-->        <aop:aspectj-autoproxy />        <bean id="SessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">                <!--数据库数据-->                <property name="dataSource" ref="DataSource"/>                <!--hibernate其它配置-->                <property name="hibernateProperties" >                        <props>                                <!--显示sql-->                                <prop key="hibernate.show_sql">true</prop>                                <!--格式化sql-->                                <prop key="hibernate.format_sql">true</prop>                                <!--每次运行都生成表-->                                <prop key="hibernate.hbm2ddl.auto">create</prop>                                <!--数据库方言,根据库配置-->                                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>                        </props>                </property>                <!--引入放映射文件的包,会自动解析里面的文件,不用一个一个导入-->                <property name="mappingDirectoryLocations" value="classpath:cn/itcast/domain"/>        </bean>        <!--数据库基本信息-->        <bean id="DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">                <property name="user" value="root"/>                <property name="password" value="1039191520"/>                <property name="driverClass" value="com.mysql.jdbc.Driver"/>                <property name="jdbcUrl" value="jdbc:mysql:///ssh"/>        </bean></beans>

因为要写入配置,所以我就没有在持久层使用注解,我选择使用Bean来配置,

创建持久层

package cn.itcast.dao.impl;import cn.itcast.dao.inter.UserDao;import cn.itcast.domain.User;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.springframework.stereotype.Repository;import javax.annotation.Resource;@Repository("UserDaoImpl")public class UserDaoImpl implements UserDao{    @Resource(name="SessionFactory")    private SessionFactory factory;    @Override    public void save() {        Session session = factory.openSession();        Transaction transaction = session.beginTransaction();        User user = new User();        user.setUname("zs");        session.save(user);        transaction.commit();        session.close();    }}

创建JavaBean

package cn.itcast.domain;public class User {    //唯一表示符    private String uid;    private String uname;//    提供setget方法    public String getUid() {        return uid;    }    public void setUid(String uid) {        this.uid = uid;    }    public String getUname() {        return uname;    }    public void setUname(String uname) {        this.uname = uname;    }}

创建映射文件

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping>    <class name="cn.itcast.domain.User" table="t_user">        <id name="uid" column="uid">  <!--主键-->            <!-- 主键的生成策略 -->            <generator class="uuid"></generator>        </id>        <property name="uname" column="uname"/>    </class></hibernate-mapping>        

然后我们运行试试,别忘了创建数据库,代码没问题
这里写图片描述

其实整合到这里,持久层还是有很多多余的代码,需要不断的从工厂获取session对象,不断的开启事务,

  • 使用注解
  • 使用Bean

最终整合spring-hibernate

spring给我们提供了一个实现类,我们只需要根据规则来,就可以直接使用它的查询功能直接查询,

2.它的类需要我们提供sessionFactory
有俩种解决方案

方案一(注解)

1.实现它提供的类 HibernateDaoSupport

public class UserDaoImpl extends HibernateDaoSupport implements UserDao{

2.给父类sessionFactory赋值

@Repository("UserDaoImpl")//使用注解开启事务@Transactionalpublic class UserDaoImpl extends HibernateDaoSupport implements UserDao{    @Autowired  //自动注入,spring会自动调用该方法    public void setParents(SessionFactory factory){        //使用父类的方法,给父类的设置值        setSessionFactory(factory);    }      @Override    public void save() {        User user = new User();        user.setUname("lisi");        //使用HibernateDaoSupport提供的方法,        getHibernateTemplate().save(user);    }}

在spring配置里配置事务的配置

   <!--生成数据库管理员-->        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">                <property name="dataSource" ref="DataSource"/>        </bean>        <!--开启事务开关-->        <tx:annotation-driven transaction-manager="transactionManager"/>

运行走一下
这里写图片描述
结果可行,三大框架整合就讲到这里,这里我插一嘴,还没有解决懒加载的问题,
spring提供了解决方法,有兴趣可以自己研究,,

原创粉丝点击