Struts2、Hibernate5、Spring4集成开发步骤:

一、导入Jar包(基本的大致有41个,根据实际项目的需求自己添加)

antlr-2.7.7.jar
aopalliance.jar
asm-5.1.jar
asm-commons-5.1.jar
asm-tree-5.1.jar
aspectjweaver-1.8.7.jar
c3p0-0.9.2.1.jar
classmate-1.3.0.jar
commons-fileupload-1.3.2.jar
commons-io-2.4.jar
commons-lang3-3.4.jar
commons-logging-1.2.jar
dom4j-1.6.1.jar
freemarker-2.3.23.jar
geronimo-jta_1.1_spec-1.1.1.jar
hibernate-commons-annotations-5.0.1.Final.jar
hibernate-core-5.1.8.Final.jar
hibernate-entitymanager-5.1.8.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jandex-2.0.3.Final.jar
javaee.jar
javassist-3.20.0-GA.jar
jboss-logging-3.3.0.Final.jar
jstl-1.2.jar
log4j-1.2.17.jar
log4j-api-2.7.jar
mchange-commons-java-0.2.3.4.jar
mysql-connector-java-5.0.5-bin.jar
ognl-3.1.12.jar
spring-aop-4.3.9.RELEASE.jar
spring-aspects-4.3.9.RELEASE.jar
spring-beans-4.3.9.RELEASE.jar
spring-context-4.3.9.RELEASE.jar
spring-core-4.3.9.RELEASE.jar
spring-expression-4.3.9.RELEASE.jar
spring-jdbc-4.3.9.RELEASE.jar
spring-orm-4.3.9.RELEASE.jar
spring-tx-4.3.9.RELEASE.jar
spring-web-4.1.6.RELEASE.jar
struts2-core-2.5.10.1.jar
struts2-spring-plugin-2.5.10.1.jar

SSH主要jar包


二、配置Web.xml文件
    2.1、配置Struts2的过滤器StrutsPrepareAndExecuteFilter

   <!-- 配置Struts2的过滤器 -->
<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>

    2.2、配置Spring监听器

   <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

ContextLoaderListener的作用:
    ContextLoaderListener监听器的作用就是启动Web容器/启动服务器的时候(Tomcat)时,自动加载ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。至于ApplicationContext.xml这个配置文件部署在哪,如何配置多个xml文件,官方API文档中说明。
在ContextLoaderListener中关联了ContextLoader这个类,所以整个加载配置过程由ContextLoader来完成。
    2.2.1、ContextLoader可以由 ContextLoaderListener和ContextLoaderServlet生成。如果查看ContextLoaderServlet的API,可以看到它也关联了ContextLoader这个类而且它实现了HttpServlet这个接口。
    2.2.2、ContextLoader创建的是 XmlWebApplicationContext这样一个类,它实现的接口是WebApplicationContext->ConfigurableWebApplicationContext->ApplicationContext->BeanFactory这样一来spring中的所有bean都由这个类来创建。
    2.2.3、如果在web.xml中不写任何参数配置信息,默认的路径是/WEB-INF/applicationContext.xml,在WEB-INF目录下创建的xml文件的名称必须是applicationContext.xml;
        如果是要自定义文件名可以在web.xml里加入contextConfigLocation这个context参数:

   <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext-*.xml </param-value>
</context-param>

在<param-value> </param-value>里指定相应的xml文件名,如果有多个xml文件,可以写在一起并一“,”号分隔。上面的applicationContext-*.xml采用通配符,比如这那个目录下有applicationContext-ibatis-base.xml,applicationContext-action.xml,applicationContext-ibatis-dao.xml等文件,都会一同被载入。
所以:applicationContext.xml的文件位置就可以有两种默认实现:
        第一种:直接将之放到/WEB-INF下,之在web.xml中声明一个listener;
        第二种:将之放到classpath下,但是此时要在web.xml中加入<context-param>,用它来指明你的applicationContext.xml的位置以供web容器来加载。按照Struts2 整合spring的官方给出的档案,写成:

    <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml</param-value>
</context-param>

三、配置Spring的核心配置文件
    3.1、在src下新建applicationContext.xml文件,其中要配置的内容包括:
        3.1.1、配置数据源

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql:///ssh"></property>
<property name="user" value="root"></property>
<property name="password" value="123"></property>
</bean>

3.1.2、配置SessionFactory(本身是Hibernate里面的,这里我们是要让Spring给我们管理SessionFactory的创建)

   <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 因为在hibernate核心配置文件中,没有了数据库配置,数据库配置在spring里面,注入dataSource -->
<property name="dataSource" ref="dataSource"></property>
<!-- 指定hiberante核心配置文件,有些内容我们是将信息配置在原来的Hibernate核心配置文件中,
          比如格式化SQL语句(hibernate.format_sql),
          显示SQL语句(hibernate.show_sql),
          Hibernate给我们创建及更新表的指令(hibernate.hbm2ddl.auto),
          Hibernate使用的方言(hibernate.dialect),
          还有映射文件<mapping class""/>-->
<property name="configLocations" value="classpath:hibernate.cfg.xml"></property>
</bean>

3.1.3、原来我们在学习Hibernate的时候说过有个事务的概念,现在我们要把事务的管理交给Spring。

   <!-- 第一步 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<!-- 注入sessionFactory -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

3.1.4、如果要采用注解的方式配置哪些方法要进行事务处理,那么就需要做以下事情:
            3.1.4.1、在Spring的核心配置文件中配置开启事务注解,写法:

<tx:annotation-driven transaction-manager="transactionManager" /> 
            3.1.4.2、在业务层方法需要事务控制的方法上面添加一个注解,这个注解是@Transactional,但是需要注意的是并不是所有的方法都是需要进行事务处理的,比如说检索/查询操作。
        3.1.5、因为我们要对数据库做CRUD(Create/Select/Update/Delete)操作,我们继承了三大框架,而Hibernate就是用来做dao层,dao层就是为了操作数据库的,所以我们要用hibernate操作数据库的类,这个类叫做:HibernateTemplate,记住我们用的是Hibernate5的HibernateTemplate。
            还有需要注意的一点是:需要在这里里面配置sessionFactory,也就是说你要在hibernateTemplate里面注入sessionFactory。
            ------------>其实我们在使用hibernate操作数据库的时候,做的业务操作复杂度远远超出get/load这样的方法,所以我们在做查询这些操作的时候,我们用的并不是简单的hibernateTemplate方法,而是用的Hibernate给我们提供的三个接口里面的两个常用接口,这两个接口的名字是(Query和Criteria)

 <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
<!-- 注入sessionFactory -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

3.1.6、由于我们在集成开发的时候,用的都是注解,这些注解体现在以下方面:
            3.1.6.1、实体类(@Entity、@Id、@one-to-many、@many-to-many、@JoinTable、@JoinColumn等等),所以我们要在Spring的核心配置文件中打开注解扫描功能,写法如下:<context:component-scan base-package="com.chinasofti"></context:component-scan>
    备注:如果想要在Spring的核心配置文件中能够写什么标签,一定是需要在命名空间中添加相应的约束:如:
        xmlns:aop="http://www.springframework.org/schema/aop"-------------------->这一行代表的是命名空间
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd --------->这一行代表的是具体的约束(约束的意思就是说:spring配置文件中能够写什么标签,以及标签的上下级。)
                3.1.7、配置Action

 <bean id="userAction" class="com.crm.user.action.UserAction" scope="prototype">
<!-- 注解实例化Action,并在Action中注入service -->
</bean>

四、在实际开发中,一定要将日志文件引入你的项目工程里面,绝大多数我们都使用Log4j的属性文件,一般都是叫做:log4j.properties,这里面的内容绝对不能去记忆。
    log4j.rootLogger=info, stdout----------->这里的info还有一个值是debug,切记在实际开发中如果你的环境是测试环境,那么建议你使用debug,如果在生产环境中必须使用info,如果生产环境使用debug的话,那么你的磁盘将会有很多日志文件,浪费空间。
五、实际开发中,我们一定要区分,dao层和service层,其中service层有的公司也称之为biz层,这个单词的由来是business。
六、我们在学习JavaWeb阶段的时候(中级节点),我们是手动去写日志处理类的(DiyException),也就是我们的异常类。但是在工作中,我们不再写这个异常类,而是使用log4j的属性文件log4j.properties,这里文件里面可以直接定义输入的文件名和具体的日常信息存放位置。
七、在实际开发中,我们觉大多数情况都使用springMVC框架,并不是我们现在学习的SSH框架,而是SSM框架。但是,有些比较老的项目他们使用的还是SSH。
八、在使用注解开发业务程序的时候,分为:
    8.1、dao:
    我们在dao层要使用hibernate的session,所以还得在这个dao里面注入sessionFactory,注入的方式也有两种,即@Autowired和@Resource。
    8.2、service/biz:
    需要知道的是:在service/biz中需要注入dao,具体的做法是:在service/biz中添加dao类的对象,写法例子如下:private IUserDao userDao;并且要使用注解进行对类实例化,可以使用自动注入:@Autowired,也可以使用准确注入方式:@Resource(name="dao接口或实现类的对象名")
    8.3、我们学过有四个相同功能的注解方式,分别为:
        8.3.1、@Repository------->用在DAO层/数据持久化层
        8.3.2、@Service--------->用在Service/biz/业务层
        8.3.3、@Controller-------->用在控制层
        8.3.4、@Component-------->如果无法确定具体的分类,那么就可以使用这个

=========================================================================================================================================================================================================================================
下面的这段话可能在比较高端的面试中会问到,建议大家看看:
StrutsPrepareAndExecuteFilter的作用
FilterDispatcher是早期struts2的过滤器,后期的都用StrutsPrepareAndExecuteFilter了,如 2.1.6、2.1.8。StrutsPrepareAndExecuteFilter名字已经很能说明问题了,prepare与execute,前者表示准备,可以说是指filter中的init方法,即配制的导入;后者表示进行过滤,指doFilter方法,即将request请求,转发给对应的 action去处理。
FilterDispatcher是struts2.0.x到2.1.2版本的核心过滤器!
StrutsPrepareAndExecuteFilter是自2.1.3开始就替代了FilterDispatcher的!
StrutsPrepareAndExecuteFilter过滤器中包含相应的功能。      
三个初始化参数:    
  1、config参数:指定要加载的配置文件。逗号分割。   
  2、actionPackages参数:指定Action类所在的包空间。逗号分割。    
  3、configProviders参数:自定义配置文件提供者,需要实现ConfigurationProvider接口类。逗号分割。
运行流程:
StrutsPrepareAndExecuteFilte 实现了Filter接口
服务器启动调用StrutsPrepareAndExecuteFilte .init()初始化来初始化几个重要的类,比如Dispatcher
当前台有请求发来,StrutsPrepareAndExecuteFilte 的doFilter()被调用
进行request等的封装,找到相应action,执行相应action

【SSH】---【Struts2、Hibernate5、Spring4集成开发】【SSH框架整合笔记】的更多相关文章

  1. (转)hibernate-5.0.7+struts-2.3.24+spring-4.2.4三大框架整合

    http://blog.csdn.net/yerenyuan_pku/article/details/70040220 SSH框架整合思想 三大框架应用在JavaEE三层结构,每一层都用到了不同的框架 ...

  2. SSH(Struts、Spring、Hibernate)三大框架整合

    1. 新建数据库ssh_db -> 新建表user_tb(id为主键,自动递增) 2. 导入jar包(struts.hibernate 和 spring) 3. 注册页面reg.jsp,将表单的 ...

  3. spring 框架整合 笔记4

    struts hibernate spring 先贴出框架整合需要的maven <project xmlns="http://maven.apache.org/POM/4.0.0&qu ...

  4. 【SSH】---【Struts2、Hibernate5、Spring4】【SSH框架整合笔记 】

    一.为什么要使用接口? 三层体系架构上层调用下层的时候最好使用接口,比如action层调用service的时候,private IUserDAO userDAO;这里将属性定义为接口,调用DAO的时候 ...

  5. ssh框架整合笔记

    1.建立普通的Javaweb项目,导入项目所必须的jar包. 2.配置web.xml文件. web.xml  3.在src下建立struts.xml. struts.xm 4.在实体包下配置  实体名 ...

  6. Web开发Flask框架学习笔记

    Python 是一种跨平台的[计算机程序设计语言],是一种面向对象的动态类型语言,Python是纯粹的自由软件,源代码和解释器CPython遵循 GPL(GNU General Public Lice ...

  7. Struts2.1.8 + Spring3.0+ Hibernate3.2整合笔记

    body, p, th, td, li, ul, ol, h1, h2, h3, h4, h5, h6, pre { font-family: simsun; line-height: 1.4; } ...

  8. s2sh三大框架整合过程(仅供参考)

    三大框架顾名思义就是非常有名的Struts2 ,Hibernate,Spring, 框架整合的方法很多,现在我写一个非常简单的整合过程,相信大家一看就会! 这里使用的struts-2.2.1.1.hi ...

  9. SSH框架的简化(struts2、spring4、hibernate5)

    目的: 通过对ssh框架有了基础性的学习,本文主要是使用注解的方式来简化ssh框架的代码编写. 注意事项: 1.本文提纲:本文通过一个新闻管理系统的实例来简化ssh框架的代码编写,功能包括查询数据库中 ...

随机推荐

  1. FastDFS 集群

    FastDFS 集群 克隆虚拟机 VMware修改mac 修改 ip地址 rm -f /etc/udev/rules.d/70-persistent-net.rules reboot Tracker集 ...

  2. Codeforces Round #575 (Div. 3) D1+D2. RGB Substring (easy version) D2. RGB Substring (hard version) (思维,枚举,前缀和)

    D1. RGB Substring (easy version) time limit per test2 seconds memory limit per test256 megabytes inp ...

  3. mysql 的主从

    MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对MySQL有更高性能.更高可靠性要求的场合.与之对应的是另一个同步技术是MySQ ...

  4. jquery在线引用地址大全 全部来自官网

    谷歌的就算了,容易被屏蔽,下面都是官方原版的 最新版本 <script src="http://code.jquery.com/jquery-latest.js">&l ...

  5. 【洛谷P4393】Sequence

    题目大意:给定一个长度为 N 的序列,每次可以合并相邻的两个元素,代价是两者中较大的值,合并之后的值也为两者较大的值,求合并 N-1 次后的最小代价是多少. 题解: 除了最大值以外,每个值均只会被合并 ...

  6. php基于websocket实现的在线聊天室

    听说websocket技术可以实现 1.

  7. Linux系统中的硬件问题如何排查?(6)

    Linux系统中的硬件问题如何排查?(6) 2013-03-27 10:32 核子可乐译 51CTO.com 字号:T | T 在Linux系统中,对于硬件故障问题的排查可能是计算机管理领域最棘手的工 ...

  8. 树莓派GPIO引脚标识图

  9. 【NOIP2016提高A组模拟9.24】天使的分裂

    题目 分析 这题可以递推, 但是\(O(n)\)还是会超时, 就用矩阵快速幂. #include <cmath> #include <iostream> #include &l ...

  10. [洛谷P3320] SDOI2015 寻宝游戏

    问题描述 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择一个村庄,瞬间转移到这个村庄,然后可以任意在地图的 ...