SSH框架搭建及整合

1、 新建数据库及web项目

**1.1 创建数据库**
CREATE DATABASE itcastTax DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

2、新建web项目

2.1 新建工作空间指定项目编码(或工作空间编码)为utf-8,再建 web project,

2.2 配置buildpath

2.3 引入tomcat 的包:

2.4 添加jstl jar包和mysql驱动包;

2.5 添加struts2的jar包和配置文件

添加jar包:

commons-fileupload-1.3.1.jar,commons-io-2.2.jar,commons-lang-2.4.jar ,commons-lang3-3.2.jar,freemarker-2.3.19.jar,ognl-3.0.6.jar,struts2-core-2.x.jar
,struts2-spring-plugin-2.x.jar,xwork-core-2.x.jar 到web-inf/lib目录下。

添加struts.xml到src目录下。可在“struts-2.x\apps\struts2-blank\WEB-INF\classes”下复制。

在struts.xml中添加几个常用属性:

<!-- 禁用动态方法访问 --><constant name="struts.enable.DynamicMethodInvocation" value="false" /><!-- 配置成开发模式 --><constant name="struts.devMode" value="true" /><!-- 配置拓展名为action --><constant name="struts.action.extention" value="action" /><!-- 把主题配置成simple --><constant name="struts.ui.theme" value="simple" />

配置web.xml:添加struts2 过滤器:

<filter><filter-name>struts2</filter-name>    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>*.action</url-pattern></filter-mapping>

3、添加hibernate的jar包和配置文件

3.1 添加hibernate jar包:

hibernate3.jar,lib/required/*.jar,lib\jpa\hibernate-jpa-2.0-api-1.0.0.Final.jar,lib\bytecode\cglib\cglib-2.2.jar到web-inf/lib目录下。

4、添加spring的jar包和配置文件

4.1添加spring3.0.2中的jar包

添加spring配置文件applicationContext.xml 到src目录下;

  <!-- 引入外部sprign配置文件 --><import resource="classpath:cn/itcast/*/conf/*-spring.xml"/>

在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>

5、整合测试项目

5.1 整合struts 和 spring

预期:如果可以在action中能够正确调用service里面的方法执行并返回到一个页面中;那么我们认定struts和spring的整合是成功的。

编写JUnit测试类,测试spring加载是否正确:

package cn.itcast.test;import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.classic.Session;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.itcast.test.entity.Person;
import cn.itcast.test.service.TestService;public class TestMerge {ClassPathXmlApplicationContext ctx;@Beforepublic void loadCtx() {ctx = new ClassPathXmlApplicationContext("applicationContext.xml");}@Testpublic void testSpring() {TestService ts = (TestService)ctx.getBean("testService");ts.say();}@Testpublic void testHibernate() {SessionFactory sf = (SessionFactory)ctx.getBean("sessionFactory");Session session = sf.openSession();Transaction transaction = session.beginTransaction();//保存人员session.save(new Person("人员1"));transaction.commit();session.close();}@Testpublic void testServiceAndDao() {TestService ts = (TestService)ctx.getBean("testService");ts.save(new Person("人员2"));//System.out.println(ts.findPerson("4028eea54c8cdb1f014c8cdb20ab0000").getName());}@Testpublic void testTransationReadOnly() {//只读事务,如果在只读事务中出现更新操作则回滚TestService ts = (TestService)ctx.getBean("testService");System.out.println(ts.findPerson("4028eea54c8cdb1f014c8cdb20ab0000").getName());}@Testpublic void testTransationRollback() {//回滚事务,如果操作中出现有任务异常则回滚先前的操作TestService ts = (TestService)ctx.getBean("testService");ts.save(new Person("人员4"));}}

编写 TestService 接口

package cn.itcast.test.service;import java.io.Serializable;import cn.itcast.test.entity.Person;public interface TestService {//输出public void say();//保存人员public void save(Person person);//根据id查询人员public Person findPerson(Serializable id);
}

实现类 TestServiceImpl

package cn.itcast.test.service.impl;import java.io.Serializable;import javax.annotation.Resource;import org.springframework.stereotype.Service;import cn.itcast.test.dao.TestDao;
import cn.itcast.test.entity.Person;
import cn.itcast.test.service.TestService;@Service("testService")
public class TestServiceImpl implements TestService {@ResourceTestDao testDao;@Overridepublic void say() {System.out.println("service saying hi.");}@Overridepublic void save(Person person) {testDao.save(person);int i = 1/0;}@Overridepublic Person findPerson(Serializable id) {save(new Person("test"));return testDao.findPerson(id);}}

在applicationContext.xml中添加bean扫描配置信息;这边使用导入配置文件的方式配置。①首先在cn.itcast.test.conf中建立test-spring.xml,里面内容:

<!-- 扫描service --><context:component-scan base-package="cn.itcast.test.service.impl"></context:component-scan>

②将test-spring.xml导入到applicationContext.xml中如下:

<import resource="classpath:cn/itcast/*/conf/*-spring.xml" />

编写TestAction类

package cn.itcast.test.action;import javax.annotation.Resource;import cn.itcast.test.service.TestService;import com.opensymphony.xwork2.ActionSupport;public class TestAction extends ActionSupport {@ResourceTestService testService;public String execute(){testService.say();return SUCCESS;}}

在test的conf文件夹下新建test-struts.xml中配置TestAction :

<struts><package name="test" namespace="/" extends="struts-default"><action name="test_*" class="cn.itcast.test.action.TestAction" method="{1}"><result name="success">/WEB-INF/jsp/test/test.jsp</result></action></package>
</struts>

将test-struts.xml导入到struts.xml文件中。

<include file="cn/itcast/test/conf/test-struts.xml"/>

在webRoot目录下新建test/test.jsp

在浏览器中输入:http://localhost:8080/itcastTax/test.action 查看后
台是否能输入service中的打印信息。

5.2 整合hibernate 和 spring

在applicationContext.xml中配置如下原本在hibernate.cfg.xml中需要配置的信息,在spring中配置后hibernate.cfg.xml 可删除。

1、 配置c3p0数据库连接源:

导入外部的properties配置文件

<!-- 导入外部的properties配置文件 --><context:property-placeholder location="classpath:db.properties" />

配置c3p0数据源

<!-- 配置c3p0数据源 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"><property name="jdbcUrl" value="${jdbcUrl}"></property><property name="driverClass" value="${driverClass}"></property><property name="user" value="${user}"></property><property name="password" value="${password}"></property><!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 --><property name="initialPoolSize" value="${initialPoolSize}"></property><!--连接池中保留的最小连接数。Default: 3 --><property name="minPoolSize" value="3"></property><!--连接池中保留的最大连接数。Default: 15 --><property name="maxPoolSize" value="${maxPoolSize}"></property><!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 --><property name="acquireIncrement" value="3"></property><!--最大空闲时间,1800秒内未使用则连接被丢弃,若为0则永不丢弃。Default: 0 --><property name="maxIdleTime" value="1800"></property></bean>

db.properties数据库配置文件


jdbcUrl=jdbc:mysql://localhost:3306/itcastTax?useUnicode=true&characterEncoding=utf8
driverClass=com.mysql.jdbc.Driver
user=root
password=root
initialPoolSize=10
maxPoolSize=30

3、 配置sessionFactory,并将dataSource指向c3p0创建的dataSource:

<bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop><prop key="hibernate.show_sql">true</prop><prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="javax.persistence.validation.mode">none</prop></props></property><property name="mappingLocations"><list><value>classpath:cn/itcast/nsfw/*/entity/*.hbm.xml</value><value>classpath:cn/itcast/test/entity/*.hbm.xml</value></list></property></bean>

编写实体类Person和对应的映射文件Person.hbm.xml:

用JUnit测试hibernate和spring的整合,在测试用例中启动spring容器的时候将扫描Person类根据其创建数据库表,并在测试时将向表插入一条数据。

测试hibernate,添加一个人员

    @Testpublic void testHibernate() {SessionFactory sf = (SessionFactory)ctx.getBean("sessionFactory");Session session = sf.openSession();Transaction transaction = session.beginTransaction();//保存人员session.save(new Person("人员1"));transaction.commit();session.close();}

测试框架分层的整合(service 与 dao)
TestDao 中新增方法 save ,在TestService中通过调用testDao来保存人员信息。

public class TestDaoImpl extends HibernateDaoSupport implements TestDao {@Overridepublic void save(Person person) {getHibernateTemplate().save(person);}@Overridepublic Person findPerson(Serializable id) {return getHibernateTemplate().get(Person.class, id);}}
@Service("testService")
public class TestServiceImpl implements TestService {@ResourceTestDao testDao;@Overridepublic void say() {System.out.println("service saying hi.");}@Overridepublic void save(Person person) {testDao.save(person);//int i = 1/0;}

5.3 配置spring事务管理


<!—事务管理--><bean id="txManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean>
<!—事务通知-->
<tx:advice id="txAdvice" transaction-manager="txManager"><tx:attributes><tx:method name="find*" read-only="true" /><tx:method name="get*" read-only="true" /><tx:method name="load*" read-only="true" /><tx:method name="list*" read-only="true" /><tx:method name="search*" read-only="true" /><tx:method name="*" rollback-for="Throwable" /></tx:attributes></tx:advice><!—配置需要进行事务控制的类 --><aop:config><aop:pointcut id="serviceOperation" expression="bean(*Service)" /><aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" /></aop:config>

【注意:上面的pointcut expression 表示拦截以Service结尾的bean,或者可写成
execution(* cn.itcast..service.impl..(..))】
完善 TestService接口和TestServiceImpl;利用service中的操作来验证上面配置的事务管理是否生效。

测试方法

dao中

Service中

6、资源文件分类(src放源代码,config放配置文件,test放测试代码)

1、 将配置文件归类到新建config文件夹;
2、 源代码目录按照功能模块进行划分:cn.itcast.子系统.功能模块.*
3、 Jsp放置到WEB-INF目录下;
4、 其它:

7、日志工具配置(debug info warn error fatal)

在控制台会报出日志log4j没有配置好配置文件的信息。

Slf4j 接口jar(slf4j-log4j12-1.6.1.jar)
log4j的jar包(com.springsource.org.apache.log4j-1.2.15),配置log4j.properties文件。

测试:

项目实战---国税协同办公平台---day01相关推荐

  1. yii2项目实战-博客管理平台的搭建

    登录 | 注册 收藏成功 确定 收藏失败,请重新收藏 确定 查看所有私信查看所有通知 暂没有新通知 返回通知列表 下一条 上一条 分享资讯 传PPT/文档 提问题 写博客 传资源 创建项目 创建代码片 ...

  2. 恩布企业IM,协同办公平台发布V1.24.2版本

    为什么80%的码农都做不了架构师?>>>    恩布企业IM,即时通讯软件,协同办公平台,私有部署版本,PC端,服务端同时发布1.24.2版本,开源企业IM,免费企业即时通讯软件:主 ...

  3. 恩布企业即时通讯软件,协同办公平台发布V1.23版本

    恩布企业即时通讯软件,协同办公平台,私有部署版本,PC端,服务端同时发布1.23版本,开源企业IM,免费企业即时通讯软件:主要版本更新内容: 优化PC.android和ios手机,多终端同时登录,事件 ...

  4. 移动时代,谁来打造企业协同办公平台?

    根据中国互联网络信息中心(CNNIC)2018年1月发布的第41次<中国互联网络发展状况统计报告>,截至2017年12月,我国网民规模达7.72亿,普及率达到55.8%,其中,手机网民规模 ...

  5. 大型企业如何搭建自有协同办公平台?

    在中国,90%以上的企业都面临着员工成本高,办公效率低等问题.越来越多的企业,开始借助移动互联网工具来解决这些问题.中小型企业大多使用微信,qq等公共即时通信平台作为企业内部沟通工具,但这些公共平台并 ...

  6. 分享:一套开源的办公套件,适用于企业、团队的协同办公平台DzzOffice

    目录 前言 安装与部署 1>环境说明 2>安装PHP依赖软件 3>下载DzzOffice的源码包并安装 4>安装配置MYSQL5.7 5>web页面安装DzzOffice ...

  7. OA系统,企业的专属协同办公平台

    OA,可谓时下企业信息化建设的重要办公管理软件.OA系统的实施不仅可为企业带来便捷的信息沟通.交流,完善的组织管理,高效率的流程审批,实现企业内部办公.决策的科学.合理,还可根据企业发展需求个性定制, ...

  8. 办公网及办公网计算机,慧点科技数字化智能OA WE.Office协同办公平台”亮相2021 CCF计算机大会...

    7月20日,2021 CCF计算机大会于北京亦庄隆重开幕,本次会议由中国计算机学会主办.中国计算机学会抗恶劣环境计算机专委会承办.中国航天科工集团第二研究院七〇六所协办. 计算机大会自2016年首次举 ...

  9. 梦龙LinkWorks协同办公平台 几处突破点

    梦龙LinkWorks协同办公平台 1. SQL注入 http://xxx.xxx.xxx/SOURCE/COMNINFO/fieldlist.aspx?selectindex=1' 后边随意注入,没 ...

最新文章

  1. ssh服务器拒绝证书,使用SSH.NET以密钥文件连接到SFTP(权限被拒绝(publickey))...
  2. 废芯片做出来的艺术品!值得一看!
  3. MMU内存管理单元(看书笔记)
  4. 网站本地调试工具_一款Web调试代理工具:Fiddler
  5. 前端数据库——WebSQL和IndexedDB
  6. zookeeper集群节点热扩容和迁移详解
  7. 一段python算法实战的代码
  8. oracle 怎么重启数据库,oracle数据库重启
  9. Python全栈 Linux基础之2.Linux终端命令简介
  10. Webpack SourceMap快速定位错误位置
  11. 动手学深度学习(tensorflow)---学习笔记整理(五、过拟合和欠拟合相关问题篇)
  12. Mininet-wifi安装和简单使用
  13. 如何评估前端开发周期/排期?
  14. 【学习笔记之Openlayers3】要素保存篇(第四篇)
  15. 创建一个微信小程序——如何注册账号,安装微信开发者工具,创建一个小程序(详细步骤版)
  16. 【C++】9.GIS应用:开源GIS平台开发入门(MapServer+QGIS+PostGIS+OpenLayers)
  17. 实习日志 - 第二天
  18. 又一个项目开源,阿里已悄然成为中国开源的关键力量?
  19. Google支付相关
  20. C/S架构的简单文件传输系统的实现

热门文章

  1. Linu命令 hwclock,clock,设置硬件时钟,linux硬件时间
  2. C++习题--加密通信
  3. Markdown系列(6)- 如何优雅地在Markdown中输入数学公式
  4. 网络协议和Netty——第二章 Java原生网络编程学习笔记
  5. 移动支付的前沿技术和创新
  6. C语言中string函数详解
  7. 征集 |《新程序员》专访Python之父,你最想问什么?
  8. (转)在JSP中调用JAVA类和使用JavaBean有什么区别?
  9. 【博学谷学习记录】超强总结,用心分享|【黑马头条】雪花算法
  10. imac 如何关闭应用