【SSH】---【Struts2、Hibernate5、Spring4集成开发】【SSH框架整合笔记】
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框架整合笔记】的更多相关文章
- (转)hibernate-5.0.7+struts-2.3.24+spring-4.2.4三大框架整合
http://blog.csdn.net/yerenyuan_pku/article/details/70040220 SSH框架整合思想 三大框架应用在JavaEE三层结构,每一层都用到了不同的框架 ...
- SSH(Struts、Spring、Hibernate)三大框架整合
1. 新建数据库ssh_db -> 新建表user_tb(id为主键,自动递增) 2. 导入jar包(struts.hibernate 和 spring) 3. 注册页面reg.jsp,将表单的 ...
- spring 框架整合 笔记4
struts hibernate spring 先贴出框架整合需要的maven <project xmlns="http://maven.apache.org/POM/4.0.0&qu ...
- 【SSH】---【Struts2、Hibernate5、Spring4】【SSH框架整合笔记 】
一.为什么要使用接口? 三层体系架构上层调用下层的时候最好使用接口,比如action层调用service的时候,private IUserDAO userDAO;这里将属性定义为接口,调用DAO的时候 ...
- ssh框架整合笔记
1.建立普通的Javaweb项目,导入项目所必须的jar包. 2.配置web.xml文件. web.xml 3.在src下建立struts.xml. struts.xm 4.在实体包下配置 实体名 ...
- Web开发Flask框架学习笔记
Python 是一种跨平台的[计算机程序设计语言],是一种面向对象的动态类型语言,Python是纯粹的自由软件,源代码和解释器CPython遵循 GPL(GNU General Public Lice ...
- 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; } ...
- s2sh三大框架整合过程(仅供参考)
三大框架顾名思义就是非常有名的Struts2 ,Hibernate,Spring, 框架整合的方法很多,现在我写一个非常简单的整合过程,相信大家一看就会! 这里使用的struts-2.2.1.1.hi ...
- SSH框架的简化(struts2、spring4、hibernate5)
目的: 通过对ssh框架有了基础性的学习,本文主要是使用注解的方式来简化ssh框架的代码编写. 注意事项: 1.本文提纲:本文通过一个新闻管理系统的实例来简化ssh框架的代码编写,功能包括查询数据库中 ...
随机推荐
- 一个线程oom,进程里其他线程还能运行吗?
线程之间互相不影响:守护线程生活周期相同 引言 这题是一个网友@大脸猫爱吃鱼给我的提问,出自今年校招美团三面的一个真题.大致如下 一个进程有3个线程,如果一个线程抛出oom,其他两个线程还能运行么? ...
- 四、Signalr手持令牌验证
一.JWT 服务端在respose中设置好cookie,浏览器发请求都会自动带上,不需要做额外设置 但是如果客户端是非浏览器,或者要兼容多种客户端,这个方法就不行了 Js端 @{ Layout = n ...
- Qualcomm_Mobile_OpenCL.pdf 翻译-6-工作组尺寸的性能优化
对于许多kernels来说,工作组大小的调整会是一种简单有效的方法.这章将会介绍基于工作组大小的基础知识,比如如何获取工作组大小,为什么工作组大小非常重要,同时也会讨论关于最优工作组大小的选择和调整的 ...
- Mvc Excel导入加事务加导出
导出 public FileResult Input() { DataTable dt = new DataTable("dd"); using (SqlConnection co ...
- python类库26[sqlite]
一 sqlite 与 python 的类型对应 二 实例 import sqlite3 def sqlite_basic(): # Connect to db conn = sqlit ...
- 阅读之SQL优化
一.性能不理想的系统中除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的SQL语句需要优化. 为了获得稳定的执行性能,SQL语句越简单越好.对复杂的SQL语句, ...
- Tomcat网站上的core和deployer的区别
8.5.13 Please see the README file for packaging information. It explains what every distribution(分布) ...
- JAVA笔记13-异常处理Exception
掌握:一个图(分类).五个关键字(try catch finally throws throw) 一.概念 定义: 异常指的是运行期出现的错误(如除0溢出,空指针,数组/字符串下标越界,所要读取的文件 ...
- 【leetcode】Max Area of Island
国庆中秋长假过完,又要开始上班啦.先刷个题目找找工作状态. Given a non-empty 2D array grid of 0's and 1's, an island is a group o ...
- LeetCode - 乘积最大子串
给定一个整数数组 nums ,找出一个序列中乘积最大的连续子串(该序列至少包含一个数). 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6. 示例 2: ...