SSH整合(1)-最小整合框架

SSH框架细节解析与实战指南 本文还有配套的精品资源,点击获取 简介:SSH(Spring、Hibernate、Struts)是Java Web开发的三大框架组合,它们共同作用于构建企业级应用程序。Spring框架提供依赖注入和面向切面编程,Hibernate实现对象关系映射简化数据库操作,而Struts框架基于MVC模式处理Web层的请求和响应。本文详细探讨了SSH框架的内部机制、配置和常见问题解决方... 阅读详情

1. Spring和Hibernate整合:hibernate委托给spring托管。需要改动的地方:

(1)需要导入的包:spring.jar + hibernate最小导入包 + commons-dbcp.jar/commons-collections.jar/commons-pool.jar(数据库缓冲池);

(2)applicationContext.xml中增加两个bean:dataSource和sessionFactory。这两个bean取代了hibernate.cfg.xml文件,即对hibernate进行托管;

  1. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  2.     <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  3.     <property name="url" value="jdbc:mysql://localhost:3306/testcasetrack" />
  4.     <property name="username" value="root" />
  5.     <property name="password" value="" />
  6. </bean>
  7. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  8.     <property name="dataSource">
  9.         <ref bean="dataSource" />
  10.     </property>
  11.     <property name="hibernateProperties">
  12.         <props>
  13.             <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
  14.             <prop key="hibernate.show_sql">true</prop>
  15.         </props>
  16.     </property>
  17.     <property name="mappingResources">
  18.         <list>
  19.             <value>edu/hust/vo/User.hbm.xml</value>
  20.         </list>
  21.     </property>
  22. </bean>

(3)使DAO接口实现类继承自org.springframework.orm.hibernate3.support.HibernateDaoSupport;

  1. public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
  2.     
  3.     private Query query;
  4.     
  5.     private User user;
  6.     private List<User> uList;
  7.     
  8.     public boolean isLogin(User user) {
  9.         query = this.getHibernateTemplate().getSessionFactory().openSession().createQuery("FROM User AS u WHERE u.uid=? AND u.password=?");
  10.         query.setString(0, user.getUid());
  11.         query.setString(1, user.getPassword());
  12.         if (!query.list().isEmpty()) {
  13.             user = (User) query.list().get(0);
  14.             return true;
  15.         }
  16.         return false;
  17.     }
  18.     public void delete(int id) {
  19.         query = this.getHibernateTemplate().getSessionFactory().openSession().createQuery("DELETE FROM User WHERE id=?");
  20.         query.setInteger(0, id);
  21.         query.executeUpdate();
  22.     }
  23.     public void insert(User user) {
  24.         try {
  25.             this.getHibernateTemplate().getSessionFactory().openSession().save(user);
  26. //          this.getSession().save(user);
  27.         } catch (ConstraintViolationException cve) {
  28.             System.err.println("不能插入重复数据!!!.....");
  29.         }
  30.     }
  31.     
  32.     ......
  33.     
  34. }
  35. /*
  36.  * 可以使用spring中的HibernateDAOSupport与HibernateTemplate类来进行数据持久化操作: 
  37.  * A、HibernateDAOSupport类中定义了对session、sessionFactory的操作方法,getHibernateTemplate()方法可以获得一个HibernateTemplate实例;
  38.  * B、HibernateTemplate类中定义了对数据持久化的各种封装的方法,我们可以用它来对数据进行操作。 
  39.  * 因此在使用时,我们可以继承HibernateDAOSupport类,然后实例化HibernateTemplate类来进行数据持久化。
  40.  * 
  41.  * */

(4)applicationContext.xml中增加对DAO接口实现类的配置;

  1. <bean id="userDAO" class="edu.hust.dao.impl.UserDAOImpl">
  2.     <property name="sessionFactory">
  3.         <ref bean="sessionFactory"/>
  4.     </property>
  5. </bean>

2. struts2与spring整合:struts的action委托给spring管理。

(1)需要导入的包:spring.jar + freemaker.jar/ognl.jar/struts2-core.jar/xwork.jar/commons-collections.jar + struts2-spring-plugin.jar(除了spring.jar,其余6个jar均来自struts2);

补充:<constent name="struts.objectFactory" value="spring" />:指定struts的工厂类, value="spring":使用spring的IoC来管理struts的Action。具体机理:这个consten将框架常量struts.objectFactory覆盖了,覆盖为"spring"(org.apache.struts2.spring.StrutsSpringObjectFactory的缩写);默认情况下Struts框架中的对象都是由ObjectFactory实例化的,同时ObjectFactory提供了与其它IoC容器如Spring等集成的方法。所以覆盖ObjectFactory的类必须继承ObjectFactory类或者它的任何子类(这里org.apache.struts2.spring.StrutsSpringObjectFactory继承自objectFactory,即我们用org.apache.struts2.spring.StrutsSpringObjectFactory代替了默认的ObjectFactory)。

配置当创建一个对象的时候,值为"spring"的objectFactory(覆盖后的ObjectFactory)会用Struts2配置文件中action tag中的class属性去和Spring配置文件中bean tag中的id属性进行关联。

在struts2-spring-plugin-2.1.2.jar中的struts-plugin.xml中已经对其进行了配置。不需要我们在struts.xml中配置了。

(2)web.xml中增加配置:利用Spring配置文件(applicationContext.xml)来注册对象、Spring监听器;

  1. <context-param>
  2.     <param-name>contextConfigLocation</param-name>
  3.     <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
  4. </context-param>
  5. <listener>
  6.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  7. </listener>

这里有一点要注意的是,我们还要指定Spring配置文件的地点,默认情况下,容器会到WEB-INF目录下面去寻找applicationContext.xml文件。如果我们想指定别的地方的配置文件或者指定多个配置文件,可以通过在web.xml文件中定义context-param元素来指定,如下所示:

  1. <context-param>
  2.     <param-name>contextConfigLocation</param-name>
  3.     <param-value>/WEB-INF/classes/applicationContext.xml, classpath:applicationContext-*.xml</param-value>
  4. </context-param>

上面一段话表示WEB-INF下面的applicationContext.xml文件以及classpath下面的所有匹配applicationContext-*.xml模式的文件都会作为Spring配置文件被装载。

(3)applicationContext.xml中增加对action的配置;

  1. <bean id="userAction" class="edu.hust.action.UserAction" scope="prototype">
  2.     <property name="userDAO">
  3.         <ref bean="userDAO"/>
  4.     </property>
  5. </bean>

scope="prototype"不能少。scope="prototype"会在该类型的对象被请求时创建一个新的action对象。

<1>singleton作用域(默认作用域):当一个bean的作用域设置为singleton,那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。换言之,当把一个bean定义设置为singleton作用域时,Spring IOC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例,这里要注意的是singleton作用域和GOF设计模式中的单例是完全不同的,单例设计模式表示一个ClassLoader中只有一个class存在,而这里的singleton则表示一个容器对应一个bean,也就是说当一个bean被标识为singleton时候,spring的IOC容器中只会存在一个该bean。 

<2>prototype作用域:prototype作用域部署的bean,每一次请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)都会产生一个新的bean实例,相当于一个new的操作,对于prototype作用域的bean,有一点非常重要,那就是Spring不能对一个prototype bean的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了。不管何种作用域,容器都会调用所有对象的初始化生命周期回调方法,而对prototype而言,任何配置好的析构生命周期回调方法都将不会被调用。清除prototype作用域的对象并释放任何prototype bean所持有的昂贵资源,都是客户端代码的职责。让Spring容器释放被singleton作用域bean占用资源的一种可行方式是,通过使用bean的后置处理器,该处理器持有要被清除的bean的引用。

<3>二者选择的原则:有状态的bean都使用Prototype作用域,而对无状态的bean则应该使用singleton作用域。action是一个请求就是一个action对象,而在spring中则不是的,它是自动分配类的实例的,是使用的单态模式来生产类的实例的,不符合action,因此在applicationContext.xml文件中定义每个action时,都要在类后加上: scope="prototype"。

(4)配置struts.xml文件;

  1. <package name="struts2" extends="struts-default">
  2.     <action name="UserAction_login" class="userAction" method="login">
  3.         <result type="redirect-action">UserAction_queryAll</result>
  4.     </action>
  5.     
  6.     <action name="UserAction_queryAll" class="userAction" method="queryAll">
  7.         <result>/user/user_list.jsp</result>
  8.     </action>
  9.     
  10.     <action name="UserAction_insert" class="userAction" method="insert">
  11.         <result type="redirect-action">UserAction_queryAll</result>
  12.     </action>
  13.     
  14.     <action name="UserAction_update" class="userAction" method="update">
  15.         <result type="redirect-action">UserAction_queryAll</result>
  16.     </action>
  17. </package>

class="userAction"。struts.xml文件中配置一个action时,它的class就不是一个类了,而是在applicationContext.xml文件中定义过的类的id,在struts.xml文件中就只需要引用这个id就可以了。

(5)在Action中利用IoC获得userDAO,而不是利用getBean()的方式获得userDAO

这种方式是正确的:

  1. public class UserAction extends ActionSupport implements ServletRequestAware {
  2.     
  3.     //其他代码片段
  4.     
  5.     private UserDAO userDAO;
  6.     public UserDAO getUserDAO() {
  7.         return userDAO;
  8.     }
  9.     public void setUserDAO(UserDAO userDAO) {
  10.         this.userDAO = userDAO;
  11.     }
  12.     
  13.     public String insert() {
  14.         user = new User();
  15.         user.setUid(this.getUid());
  16.         user.setName(this.getName());
  17.         user.setPassword(this.getPassword());
  18.         user.setEmail(this.getEmail());
  19.         user.setDepartment(this.getDepartment());
  20.         user.setActor(this.getActor());
  21.         userDAO.insert(user);
  22.         return SUCCESS;
  23.     }
  24.     
  25.     public String queryAll() {
  26.         uList = userDAO.queryAll();
  27.         req.getSession().setAttribute("uList", uList);
  28.         return SUCCESS;
  29.     }
  30.     
  31.     //其他代码片段
  32.     
  33. }

这种方式是错误的:

  1. public class UserAction extends ActionSupport implements ServletRequestAware {
  2.     
  3.     //其他代码片段
  4.     
  5.     private UserDAO userDAO;
  6.     public UserAction() {
  7.         ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
  8.         userDAO = (UserDAO) ctx.getBean("userDAO");
  9.     }
  10.     
  11.     public String insert() {
  12.         user = new User();
  13.         user.setUid(this.getUid());
  14.         user.setName(this.getName());
  15.         user.setPassword(this.getPassword());
  16.         user.setEmail(this.getEmail());
  17.         user.setDepartment(this.getDepartment());
  18.         user.setActor(this.getActor());
  19.         userDAO.insert(user);
  20.         return SUCCESS;
  21.     }
  22.     
  23.     public String queryAll() {
  24.         uList = userDAO.queryAll();
  25.         req.getSession().setAttribute("uList", uList);
  26.         return SUCCESS;
  27.     }
  28.     
  29.     //其他代码片段
  30.     
  31. }
SSH框架实战项目RWStory搭建与配置 本文还有配套的精品资源,点击获取 简介:RWStory项目是一个预配置的SSH(Spring、Struts2、Hibernate)框架项目,旨在帮助开发者快速理解和实践Java Web开发。该项目详细介绍了SSH框架的核心概念、配置和集成方式,以及如何在实际项目中应用Spring的依赖注入、面向切面编程、Struts2的MVC模式实现以及Hibernate的对象关系映射等功... 阅读详情

相关推荐

IEDA激活码失效?教你5分钟快速续期的方法

本文针对IEDA激活码失效问题,提供了一套从快速应急到深度排查的完整解决方案。文章不仅详解了5分钟快速续期与清理缓存等应急方法,更深入剖析了授权机制、离线激活流程,并指导如何构建可持续的授权管理策略,帮助开发者彻底解决激活困扰,确保开发环境稳定。

a0b1c2d3的专栏 273

ssh框架使用springBoot升级迁移替换Struts2

如果一个十来年的ssh项目想使用springboot的便捷性,但又不想从零开始,那么就让我们开始迁移吧。 在pom文件添加springboot 依赖 创建application 启动类 迁移web.xml web.xml文件中定义了filter, struts2等等一堆filter, 这时我们需要做的一件事是在springboot中使我们的filter, struts2 能正常work。 这样就...

大碍桃花开 8694

Python爬虫实战:构建药监局药品批准信息本地查询系统

在医药信息化时代,药品批准信息的快速查询对于医药从业者、研究人员和普通消费者都具有重要意义。国家药品监督管理局(NMPA)提供了官方的药品查询系统,但有时我们需要建立本地数据库以便批量分析或离线查询。本文将详细介绍如何使用Python爬虫技术,结合最新的异步爬虫框架和技术栈,构建一个完整的药监局药品信息本地查询系统。本系统将实现以下功能:自动化爬取药监局官网的药品批准信息数据清洗和结构化存储建立本地查询接口数据定期更新机制pythonimport os"""药品类型枚举"""

2201_76125261的博客 728

Nutz:Java项目中SSH框架的最佳替代品

摘要:Nutz是一款旨在提高Web开发者生产力的开源框架,Java开发人员可以利用它来取代SSH开发框架,它是一组轻便小型的框架的集合, 各个部分可以被独立使用。 Nutz是一款优秀的国产开源项目,它由一系列轻便小型的框架(比如MVC、DAO、IoC 、Json等)组成,且各个部分可以被独立使用。 Nutz可以作为除SSH之外的另一个选择,且比SSH更为轻量。Nutz遵

likaiwalkman@csdn - Code Study Area 911

零基础学GPU KMD--8. 内存管理:GPU 显存与系统内存的协同​8.1 显存分配策略:GEM / TTM 原理

支持 VRAM、GTT(Graphics Translation Table)、SYSTEM 内存的动态迁移与缓存管理。:若缓冲区在 SYSTEM,TTM 分配 GTT 条目并建立页表映射,使 GPU 可直接访问。:系统内存中预留给 GPU 直接访问的区域,通过 GPU 的 MMU 做地址翻译。你需要我继续展开这一部分吗?​ 为复杂离散 GPU 设计,应对大容量 VRAM、多内存域、显存迁移等问题。:重量级、功能全,适合大容量、多内存域的离散 GPU,强调显存迁移与统一管理。

amy_mhd的博客 185

应用商店评论分析实战:Python逆向工程破解Google Play加密接口与NLP建模

在移动互联网时代,应用商店中的用户评论成为了开发者优化应用、提升用户体验的重要依据。然而,Google Play等应用商店对评论数据进行了加密处理,直接爬取难度较大。本文将介绍如何使用Python逆向工程破解Google Play的加密接口,实现对应用商店评论的实时采集,并结合NLP(自然语言处理)技术进行情感分析和主题建模,为开发者提供有价值的数据支持。

u014481728的博客 1348

SSH框架整合教程

考虑到有些读者刚刚接触J2ee,特发此文,顺便让自己复习复习

SexyCode 1249

Autosar诊断实战系列05-Dcm之0x27加解密服务配置开发详解

UDS 0x27服务实战开发介绍,对解锁尝试次数及delay时间进一步解释。

initiallizer的博客 1993

SSH整合框架+mysql简单的实现

SSH整合框架+mysql简单的实现 1. 框架整合原理: struts2整合Spring 两种: 一种struts2自己创建Action,自动装配Service ; 一种 将Action交给Spring管理,通过Bean依赖,注入Service **** 引入jar包,改写Struts2 默认对象工厂, 默认StrutsObjectFactory 改为 ...

asdfawegw5646的博客 294

【硬件工程师面经整理18_Smith圆图】

若文中任何内容侵犯了您的合法权益,请相关权益人及时与我联系,我将立即进行核实并采取适当措施,包括但不限于删除相关内容或更新文章以消除影响。**在Smith圆图上,源阻抗表示为圆心,而负载阻抗表示为圆图上的一个点。具体来说,通过将负载阻抗在Smith圆图上移动到特定位置,使其与传输线特性阻抗形成纯电阻或纯电抗的组合,从而实现匹配。例如,反射系数表示为Smith圆图上的一个点,而驻波比则表示为圆图上两个点之间的距离。Smith圆图是用于阻抗匹配和网络分析的工具,它是一种将复阻抗表示为坐标的图形。

LeeYLong的博客 652

小米汽车车载多摄像头视频链路深度解析 | MAX96792/MAX96724/MAX96781 实战分享

通过合理的输入输出规划 + 虚拟通道管理 + 加串行策略,可以在成本和性能之间取得最佳平衡,这就是多摄像头系统设计的核心精髓。

weixin_43199439的博客 1547

基于MyEclipse的SSH整合。

转载自品略图书馆:http://www.pinlue.com/article/2020/03/0919/2110003726219.html 实验环境 MyEclipse6.5 Tomcat5.5.26 MySQL5.0 数据库脚本程序: CREATE TABLE user ( id int(11) NOT NULL auto_increment, username varchar...

yihuliunian的博客 295

基于 YOLOv26 的高速抛物识别系统:微小目标检测

本文提出了一种基于YOLOv26的高速抛物识别系统,专注于微小目标检测。系统采用多模块协同架构,包括视频预处理、YOLOv26检测、目标跟踪和抛物行为分析等模块。关键技术包括YOLOv26s模型检测、DeepSORT目标跟踪和边缘计算部署。通过构建包含多种抛物类型的专业数据集,并应用数据增强技术提升模型性能。系统实现了车辆检测、微小抛物目标识别、抛物轨迹分析和风险等级评估等功能,可实时检测高速公路上的抛物行为并触发告警,为交通管理提供智能化解决方案。

一键难忘的博客 633

基于MyEclipse6.5的SSH整合

1.编写目的为了让想要学习这个整合的人少走弯路!  !  ! 2.实验环境 l  MyEclipse6.5l  Tomcat5.5.26l  MySQL5.0l  数据库脚本程序CREATE TABLE user (       id int(11) NOT NULL auto_increment,       username varchar(50) defa

nuoyan666的专栏 669

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

基于MyEclipse的SSH整合

 实验环境 MyEclipse6.5Tomcat5.5.26MySQL5.0 数据库脚本程序:CREATE TABLE user (       id int(11) NOT NULL auto_increment,       username varchar(50) default NULL,       password varchar(50) def

JessieLee_YoYo的专栏 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ssh整合

u ssh整合** ssh(struts+spring+hibernate) 三大框架配合使用来开发项目,是目前java ee 最流行的开发方式,必须掌握.**设计: 这我们通过一个实际的案例,来讲解整合 , 我们使用一个雇员薪资管理系统(crud),每加入一个框架,我们就测试通过具体的步骤:1.创建web项目① 先搞定spring② 引入spring开发包③...

dhhccsb16357的博客 145

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

SSH整合

SSH架构 Struts 2 + Spring + Hibernate 以Spring作为核心框架,数据持久化使用Hibernate完成,表现层使用Struts 2 Spring提供对象管理、面向切面编程等实用功能 通过Spring提供的服务简化编码、降低开发难度、提高开发效率 1.导入jar包 SSH整合体验最不好的就是添加jar包,由于三个框架所依赖的jar包非常多,其中有一些jar包可能冲突...

lchenjiwen的博客 159

SSH 整合 - 02

SSH配置文件Article实体类与映射文件Biz层Dao层Web层User登录注册TreeNode 配置文件 基础的一些配置文件这里就不发了,详情看SSH整合 spring-hibernate.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schem...

断雨的博客 156

SSH框架整合的实例

首先,这篇文章是基于下面的文章。

yapian8的专栏 973

ssh整合2

ssh整合2 用ssh完成增删改查 spring-hibernate.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"...

weixin_45457509的博客 153

java框架ssh实验报告_j2ee“ssh框架”实验报告.doc

j2ee“ssh框架”实验报告.doc 1软件学院综合性实验报告专业JAVA年级/班级2011计算机1班20122013学年第二学期课程名称JAVAEE程序设计指导教师姓名学号实验地点实验时间6月1、8、15日上午34节项目名称SSH框架集成应用实验类型综合性一、实验目的1SSH为STRUTSSPRINGHIBERNATE的一个集成框架,是目前较流行的一种WEB应用程序开源框架。因此希望通过本次实...

weixin_35316354的博客 417

基于MyEclipse6.5的ssh整合

1.编写目的 为了学习,为了更好的学习java. 为了让想要学习这个整合的人少走弯路! ! ! 2.实验环境 l MyEclipse6.5 l JBoss4.2.1 l SQL2005 l 数据库脚本程序 CREATE TABLE student ( id int(11) NOT NULL auto_increment, name varc...

aimengge6193的博客 123

java框架ssh实验报告_J2EE“SSH框架”实验报告.doc

J2EE“SSH框架”实验报告软件学院综合性实验报告专业:JAVA 年级/班级: 2011计算机1班 2012—2013学年第二学期课程名称Java EE程序设计指导教师姓名学号实验地点实验时间6月1、8、15日上午3-4节项目名称SSH框架集成应用实验类型综合性实验目的1. SSH 为 struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框...

weixin_28994767的博客 747

SSH框架整合

个人总结SSH框架整合spring配置文件:    &lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;beans  xmlns="http://www.springframework.org/schema/beans"        xmlns:context="http://www.springframework.org/schema/context...

小草依落叶的博客 81
上一篇: AOP在spring中的简单实现
下一篇: SSH整合(2) - struts-types
ForWayfarer
博客等级 码龄20年 60粉丝 96原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值