【OA】SSH进阶(6)——SSH框架整合

2024-08-21 15:38
文章标签 进阶 整合 框架 ssh oa

本文主要是介绍【OA】SSH进阶(6)——SSH框架整合,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

          最近做一个OA的项目,之前做过网上商城,也是SSH的框架,这一次搭框架,熟悉了很多,从jar包的引入,到Struts和spring的整合,Hibernate和spring的整合,自己更加了解三者之间的合作关系了。

            OA是Office Automation的缩写,本意为利用技术的手段提高办公的效率,进而实现办公的自动化处理。实现信息化、无纸化办公,可方便的生成统计报表等。OA是OFFICE AUTOMATION的缩写,本意为利用技术的手段提高办公的效率,进而实现办公的自动化处理。采用Internet/Intranet技术,基于工作流的概念,使企业内部人员方便快捷地共享信息,高效地协同工作;改变过去复杂、低效的手工办公方式,实现迅速、全方位的信息采集、信息处理,为企业的管理和决策提供科学的依据


这个教程从这个几个方面介绍ssh框架整合

  • 新Web工程,并把编码设为utf-8
  • 添加框架环境 Junit Struts2 Hibernate   Spring
  • 整合SSH
  • Struts2与Spring整合
  • Hibernate与Spring整合
  • 资源分类
  • 配置日志


1、新建工程:


File——New——WebProject  

右击项目,选择properties,resource,修改text file encoding 为UTF-8

大概的目录结构是这样的:




2,添加jar包


(放在 WebRoot/WEB-INF/lib/ 下)

1,环境为:JDK_1.7、JavaEE_5.0

2,Junit-4.4:  junit4.4.jar

3,Struts-2.1.8.1:

        添加 commons-fileupload-1.2.1.jar、 commons-io-1.3.2.jar、 freemarker-2.3.15.jar、 ognl-2.7.3.jar、 struts2-core-2.1.8.1.jar、 xwork-core-2.1.6.jar
       添加struts2-spring整合插件的jar:struts2-spring-plugin-2.1.8.1.jar

4,Hibernate-3.6:
      添加 hibernate3.jar   Hibernate的核心包
      添加 /lib/required/*.jar
              /lib/jpa/hibernate-jpa-2.0-api-1.0.0.Final.jar
      添加 JDBC 驱动包,mysql-connector-java-5.1.5-bin.jar  Mysql的驱动包
      添加 slf4j-log4j12-1.5.8.jar、log4j-1.2.15.jar,  日志jar包
      添加 c3p0-0.9.1.2.jar   数据库连接池

5,Spring 2.5.6
    添加 spring.jar      spring核心包
    添加 aspectjrt.jar  、aspectjweaver.jar  依赖注入的两个包
    添加 cglib-nodep-2.1_3.jar
    添加 commons-logging.jar(1.1.1版)
    添加工具jar包:commons-codec.jar,commons-lang.jar


最后是这样的:




3、集成 Spring 与 Hibernate


         spring是用来做容器的,管理对象的。需要配置SessionFactory来整合Hibernate的连接数据库信息。在

spring配置文件中 配置声明式事务,可以在类中使用注解的方式,调用资源。


1,配置SessionFactory


1,配置
---------------------- applicationContext.xml ------------------------

<!-- 配置SessionFactory(整合Hibernate) --><context:property-placeholder location="classpath:jdbc.properties" /><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource"><bean class="com.mchange.v2.c3p0.ComboPooledDataSource"><!-- 数据库连接信息 --><property name="jdbcUrl" value="${jdbcUrl}"></property><property name="driverClass" value="${driverClass}"></property><property name="user" value="${username}"></property><property name="password" value="${password}"></property><!-- 其他配置 --><property name="initialPoolSize" value="3"></property><property name="maxPoolSize" value="5"></property><property name="minPoolSize" value="3"></property><property name="acquireIncrement" value="2"></property><property name="maxStatements" value="8"></property><property name="maxStatementsPerConnection" value="5"></property><property name="maxIdleTime" value="20"></property></bean></property><!-- 指定hibernate的配置文件的位置 --><property name="configLocation" value="classpath:hibernate.cfg.xml"></property></bean>


---------------------- jdbc.properties配置文件的内容 ------------------------
jdbcUrl		= jdbc:mysql:///itcastoa0720
driverClass	= com.mysql.jdbc.Driver
user		= root
password	= 123456


2,测试代码
             @Test// 测试 SessionFactory 的配置public void testSessionFactory(){SessionFactory sessionFactory = (SessionFactory) ac.getBean("sessionFactory");Assert.assertNotNull(sessionFactory.openSession());}


2,配置声明式事务(使用基于注解的方式) spring配置文件中

1,配置

<!-- 配置事务管理器 --><bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"></property></bean><!-- 配置基于注解的事务支持--><tx:annotation-driven transaction-manager="transactionManager"/>


2,测试代码

1,Service类

                           @Servicepublic class InsertUserService {@Resourceprivate SessionFactory sessionFactory;@Transactionalpublic void addUsers() {sessionFactory.getCurrentSession().save(new User());// int a = 1 / 0; // 这行会抛异常sessionFactory.getCurrentSession().save(new User());}}


2,单元测试
				@Test // 测试声明式事务public void testTransaction() {InsertUserService service = (InsertUserService) ac.getBean("insertUserService");service.addUsers();}


3,在web.xml中配置 spring 的 OpenSessionInView 过滤器(解决抛LazyInitializationException的问题)

1,配置

<!-- 配置 spring 的 OpenSessionInView 过滤器 --><filter><filter-name>OpenSessionInView</filter-name><filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class></filter><filter-mapping><filter-name>OpenSessionInView</filter-name><url-pattern>*.action</url-pattern></filter-mapping>


2,LazyInitializationException异常说明

  • 对于集合属性,默认是lazy="true"的,在第一次使用时才加载。
  • 但在加载时,如果Session已经关掉了就会抛LazyInitializationException异常


4、Struts2与Spring整合


         1,在web.xml配置监听器(Spring Reference 15.2 Common configuration)

             <!-- 集成Spring --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/classes/applicationContext*.xml</param-value></context-param>

    

          2,写Action类与Service类

        

         这个类放到test文件夹下,是来进行junit测试的。在写Action时要指定 @Controller 与 @Scope("prototype")

<span style="font-family:Microsoft YaHei;font-size:18px;">                       @Controller("testAction")@Scope("prototype")public class TestAction extends ActionSupport {@Resourceprivate TestService testService;@Overridepublic String execute(){testService.saveTwoUser();return SUCCESS;}}</span>


    这个类是提供服务的。

<span style="font-family:Microsoft YaHei;font-size:18px;">			@Servicepublic class TestService {@Resourceprivate SessionFactory sessionFactory;@Transactionalpublic void saveTwoUser() {sessionFactory.getCurrentSession().save(new User());sessionFactory.getCurrentSession().save(new User());}}</span>

       在Struts.xml中配置action,名字尽量用action结尾,这样在使用action拦截器的时候会比较方便。在struts.xml中配置action时,在class属性中写bean的名称
<span style="font-family:Microsoft YaHei;font-size:18px;"><!-- 测试 --><action name="test" class="testAction"><result>/test.jsp</result></action></span>



5、资源分类


   如果一个项目是ssh的框架,我们需要有一个整理的目录结构让这个系统结构很清晰,这个项目算是modelfirst,当我建立了domain里面实体和对应的Hibernatexml文件的时候,运行一下,就可以建立表了,前提是建立一个utf-8编码的数据库:


1,Source Folder

     src项目源码
     config配置文件
     test单元测试

2,普通文件夹

     WebRoot/stylecss与图片等文件
     WebRoot/scriptjs脚本文件
     WebRoot/WEB-INF/jspjsp页面文件

3,包结构

      实体 : cn.itcast.oa.domain

     Dao : cn.itcast.oa.dao Dao接口、 cn.itcast.oa.dao.impl Dao实现类
    
     Service:  cn.itcast.oa.service Service接口、 cn.itcast.oa.service.impl Service实现类

     View(Struts2): cn.itcast.oa.strtus2.action

4,其他
   
     cn.itcast.oa.cfg配置
    cn.itcast.oa.util工具类
...



6、收获


          Struts是基于MVC框架思想设计了一个web层框架,spring框架负责管理对象(IOC)和事务管理(AOP),Hibernate持久层是一个ORM框架,可以面向对象的管理实体对象。这一次搭框架,自己对ssh更加熟悉了。重复就是力量~~


这篇关于【OA】SSH进阶(6)——SSH框架整合的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1093573

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key:

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen