J2EE技术实验报告基于SSH的轿车信息管理系统

上传人:无*** 文档编号:141499407 上传时间:2022-08-24 格式:DOC 页数:48 大小:1.67MB
收藏 版权申诉 举报 下载
J2EE技术实验报告基于SSH的轿车信息管理系统_第1页
第1页 / 共48页
J2EE技术实验报告基于SSH的轿车信息管理系统_第2页
第2页 / 共48页
J2EE技术实验报告基于SSH的轿车信息管理系统_第3页
第3页 / 共48页
资源描述:

《J2EE技术实验报告基于SSH的轿车信息管理系统》由会员分享,可在线阅读,更多相关《J2EE技术实验报告基于SSH的轿车信息管理系统(48页珍藏版)》请在装配图网上搜索。

1、 J2EE技术 实验报告 项目题目: 基于SSH的轿车信息管理系统 学 院: 计算机学院 指 导 教 师: 项 目 成 员: 专 业: 软件工程 班 级: 软件0901 完 成 时 间: 2012-06-02 目 录 1 引言 1 2 核心技术简介 2 2.1 MVC模式简介 2 2.2 Struts2框架简介 3 2.2.1 Struts2架构 4 2.2.2 Struts2基本处理流程 5 2.2.3 St

2、ruts2的优点 6 2.3 Hibernate框架简介 6 2.3.1 Hibernate架构 6 2.3.2 Hibernate核心接口 7 2.3.3 Hibernate基本处理流程 7 2.3.4 Hibernate的优点 7 2.4 Spring框架简介 8 2.4.1 Spring架构 8 2.4.2 Spring特点 9 3 轿车信息管理系统需求分析 10 3.1 任务概述 10 3.2 用户特点 10 3.3 功能需求 10 3.4 界面需求 11 3.5 操作需求 11 3.6 输入输出需求 11 4 轿车信息管理系统概要设计 12 4.1

3、设计思想 12 4.2 总体设计 12 4.3 系统层次结构图 13 4.4 接口设计 13 4.5 数据库设计 13 4.6 出错处理设计 14 5 轿车信息管理系统详细设计 16 5.1 数据库详细设计 16 5.1.1 数据库关系模型设计 16 5.1.2 数据库物理结构设计 16 5.2 轿车管理系统模块详细设计 17 5.2.1 用户登陆模块 17 5.2.2 用户首页面模块 18 5.2.3 添加汽车模块 18 5.2.4 删除汽车模块 19 5.2.5 查询汽车模块 20 5.2.6 修改汽车模块 20 5.2.7 出售汽车模块 21 5.2.

4、8 总销售查询模块 22 5.2.9 按时间查询模块 22 6 轿车信息管理系统具体实现 24 6.1 开发与运行环境 24 6.2 开发环境的搭建 24 6.3 数据库系统实现 30 6.4 DAO层实现 34 6.5 Manager层实现 35 6.6 Action层实现 36 6.7 汽车信息查询模块实现 36 6.1 按时间查询模块实现 38 6.2 系统其它模块的实现 41 7 总结 44 8 参考文献 45 1 引言 近年来随着人均收入水平的提高,人们购车的能力也逐步提升。为了方便轿车销售企业对己方轿车管理,轿车销售管理系统成了轿车市场一个不可或缺

5、的管理软件。 一个好的管理软件能提高企业的管理效率,减轻企业统计人员的工作量。 同时随着近年来企业Java的发展,使得开发一个针对企业需求的软件系统变得简单。因此使用企业Java来开发一个轿车信息管理系统,是行之有效的。 2 核心技术简介 Struts2,Spring,Hibernate是三个相互独立的框架。但三个框架一起整合起来使用,能使软件系统开发更轻松、更灵活、更容易扩展。三者都是“半成品”框架,使得我们在开发时不需要从头做起。三者之间的关系如图2-1: 图2-1 Struts2,Spring,Hibernate关系图 1 2 1.1 MVC模式简介 MVC全称

6、Model View Controller,它使得应用程序的输入、处理和输出分开,使程序的耦合度降低。其每个层次说明如下: Ø Model(模型):模型表示业务相关的数据与业务的处理方法。能直接访问数据。 Ø View(视图):视图用于对数据的显示。在这一层上,通常没有逻辑。为了更新视图,视图需要访问它监视的模型,因此视图通常事先在被监视的数据那进行注册。 Ø Controller(控制器):顾名思义,控制器起到控制作用,用于控制应用程序的流程。它处理事件并作出响应,调用相关的模型去处理事件请求,确定哪个视图返回请求。 图2-2 MVC各层关系图 图2-2显示的MVC各层之间的关

7、系。由于它具有这些结构使得多个视图可以共有一个模型,同时对一层上的修改不会影响到其他层。 1.2 Struts2框架简介 Struts2是一个在WebWork的基础上转化而来的基于MVC的框架。采用拦截器的机制来处理用户请求,使得业务逻辑控制器与Servlet API实现分离。 1 2 2.1 2.2 1.1.1 Struts2架构 图2-3 Struts2架构 图2-3 展示了Struts2的整体架构,其各模块说明如下: Ø FilterDispatcher:它是Strut2的核心控制器。它根据ActionMapper的结果来决定对请求的处理和响应。 Ø Actio

8、nMapper:它是一个接口,并提供了HTTP请求与Action之间的映射关系。如果用户的请求与ActionMapper中提供的方法相匹配,就继续调用ActionProxy。 Ø ActionProxy:它会依据ActionMapper生成的URI以及配置管理器来找到响应用户请求的Action对象。然后创建ActionInvocation对象来执行相应的Action方法。 Ø ActionInvocation:它会在调用Action处理方法的前后,还要调用各种拦截器。 Ø Result:它会根据相关视图将用户请求的处理结果反馈给用户。 Ø struts.xml:是Struts2的配置文

9、件,负责配置每个Action的返回结果所对应的跳转页面。 Ø Interceptor:拦截器是Struts2的重要组件,其设计思想来源于AOP(面向切面编程)。通常用于处理某些通用的处理,它会在每个Action的外部执行。 Ø Action:用于处理用户请求并封装业务数据。其执行后通常会返回一个String类型的量,struts.xml根据这个量来决定跳转页面。 Ø Templates:页面模板。 Ø Tag Subsystem:Struts2的标签库,用于页面的设置。 1.1.2 Struts2基本处理流程 图2-4 Struts2基本处理流程 图2-4展示了Struts2

10、基本处理流程,用户请求在经过一系列拦截器(拦截器会对用户请求进行相应的处理,如增加某些功能)后,就会交由Action处理,然后Action返回响应的结果(默认为“input”),最后通过匹配结果来选择跳转视图页面。 1.1.3 Struts2的优点 Ø “半成品”框架:使得开发不需要从头做起,而且在框架中很多地方都有默认值设置,减少了冗余的设置,提高了开发效率。 Ø 轻量级:资源消耗少,运行速度快。 Ø 搭建简单:只需在Myeclipse中将需要的包拷贝入项目中,再进行配置。 Ø 标签强大:Struts2提供了一系列的自己编写的标签用于页面布置,减少了页面代码。 Ø Action测

11、试简单:不需要模拟HTTP对象,就可以直接测试。 Ø 错误报告明了:便于迅速找出错误并修改。 1.3 Hibernate框架简介 Hibernate是一个开放源码的对象关系映射框架,采用ORM机制,通常用于持久层的开发。它对JDBC进行了轻量级的封装,使得我们在开发过程中可以使用面向对象的方式来操纵数据库。 1.1.1 Hibernate架构 图2-5 Hibernate架构 1.1.2 Hibernate核心接口 Hibernate核心接口一共有6个: Ø Session接口:该接口用于持久化对象的增、查、删、该,属于非线程安全。 Ø SessionFactory接口:

12、该接口用于初始化Hibernate,充当数据存储源的代理,并创建Session对象。 Ø Configuration接口:该接口在Hibernate的启动时,首先定位映射文档位置、读取配置,然后创建SessionFactory对象。 Ø Transaction接口:用于事务操作。 Ø Query和Criteria接口:使用HQL或SQL语句查询数据库。其中Criteria接口更靠近面向对象;Query接口则提供了使用原生SQL语句的方法。 1.1.3 Hibernate基本处理流程 1. 创建Configuration实例,读取项目路径根目录下的配置文件信息。 2. 创建Sessi

13、onFactory实例,将Configuration中的配置信息复制到SessionFactory中。 3. 调用SessionFactory来创建Session 4. 打开Session,并创建事务Transaction 5. 进行持久化操作 6. 提交事务 7. 关闭Session 8. 关闭SessionFactory 1.1.4 Hibernate的优点 Ø 它使得数据库中的每一张表都映射为一个Java类,让我们在开发过程中可以使用面向对象的方式来操作数据库。 Ø 自动配置,我们只需在数据库中建立表,然后通过Myeclipse自带的工具就能完成映射。 Ø 它封装了对

14、各种数据库的操作 Ø 轻量级框架,映射灵活,数据库表、配置文件、映射类我们只需要完成其中任何一部分就能依靠工具完成三者的关系映射。 1.4 Spring框架简介 Spring框架致力于J2EE应用各层的解决方案,贯穿表现层、业务层、持久层。同时它是一个轻量级的框架,没有侵入性,不会改变原有框架的类容。使用它的目的不是去修改原有框架,而是使用它来管理,使得原有的框架工作得更好。 1.1.1 Spring架构 图2-6 Spring架构 图2-6为Spring的架构,每个模块功能如下: Ø 核心容器:提供Spring框架的基本功能。其主要组件是BeanFactory,采用IOC(

15、控制反转)将应用程序的配置与依赖性代码分开。 Ø Spring上下文:是一个配置文件,用于提供上下文信息。 Ø Spring AOP:该 模块直接将面向方面的编程功能集成到了Spring 框架中。支持声明式的事务管理。 Ø Spring DAO:该模块用于管理异常处理和不同数据库供应商抛出的错误消息。 Ø Spring ORM:提供了如Hibernate这类ORM 的对象关系工具。 Ø Spring Web:为基于 Web 的应用程序提供了上下文,简化了处理多部分请求以及将请求参数绑定到域对象的工作。 Ø Spring MVC框架:该框架中融入了大量视图技术。 1.1.2 Spr

16、ing特点 Ø 轻量级框架:占用资源少,非侵入性。 Ø 控制反转(IOC):使得本来需要我们(应用程序)在执行前要进行的new操作,交由Spring的IOC容器来管理,在容器中进行配置,再由容器来将new好的对象注入应用程序,从而松散了耦合度。 Ø 面向切面(AOP):通常我们的编程思路是至上而下的,Spring的AOP使得我们能横向考虑问题,例如事务与日志记录。 3 轿车信息管理系统需求分析 1.1 任务概述 轿车信息管理系统用户企业管理轿车的销售情况,除了基本的查询、添加功能外,还应有统计功能。同时操作方面应尽量简单。 1.2 用户特点 1) 系统管理员:该用户拥有最高

17、权限,可以对轿车的信息修改,查看销售情况。 2) 前台销售员:该用户仅用查看轿车基本信息(不包括成本价),以及成功出售一辆轿车后的出售操作 1.3 功能需求 除了基本的查询、添加功能外,还应有统计销售功能,以及分段查询功能。功能需求图如下图3-1所示: 图3-1 系统功能需求 各模块具体说明如下: 1) 用户登陆:用户输入合法的用户名和密码完成登陆,如果用户名或密码错误,应输出提示。 2) 登陆页面:显示当前用户的权限,以及相关功能连接。 3) 车辆管理:提供基本的车辆增、查、删、改功能,以及出售车辆操作。同时增加相应错误判断。 4) 业务管理:提供总销售统计查询,以及

18、根据时间段的查询。同时提供相应的错误判断。 1.4 界面需求 界面简洁美观。 1.5 操作需求 操作简洁,符合人们通常使用习惯。 1.6 输入输出需求 要求输入数据合法,如果非法会跳出出错提示。 4 轿车信息管理系统概要设计 1.1 设计思想 该轿车管理系统用于轿车基本的增、查、删、改、出售以及统计功能。能够方便企业对自己的轿车进行管理,它将具有以下特点: Ø 运行速度快 Ø 占用资源少 Ø 界面简洁 Ø 操作简单 1.2 总体设计 1) 以用户登陆后的界面为平台,将各模块功能放于该页面 2) 采用SSH框架 3) 灵活性要求:视图与业务逻辑分开,低

19、耦合。采取接口方式编程便于系统的维护以及移植。 4) 输入输出要求:要求输入数据合法,如果非法会跳出出错提示。 1.3 系统层次结构图 图4-1 系统层次结构图 1.4 接口设计 用户接口:通过鼠标与键盘操作。 内部接口:使用数据流提供的接口操作各个模块。 1.5 数据库设计 概念结构设计是指将需求分析得到的用户需求抽象为信息结构。描述概念模型的有力工具是E-R模型。本系统E-R图如下图所示: 图4-2 用户E-R图 图4-3 轿车销售E-R图 1.6 出错处理设计 1) 以下列出了可能的错误情况及其对应的错误信息: 2) 用户名或密码有误,提示:您输入的

20、用户名或密码有误,请重新输入。 3) 新增车辆在数据库中已经存在,提示:您录入的车名-型号,在数据库中已经存在,如果要修改,请到修改页面。 4) 新增车辆的售价小于成本,提示:您输入的售价小于成本。 5) 出售数量大于库存数量,提示:您出售的车名-型号,出售数量大于库存数量 6) 按时间查询时起始日期大于截止日期,提示:您输入的起始日期大于截止日期 5 轿车信息管理系统详细设计 本报告将对轿车系统的数据库与各模块进行详细设计。 1.1 数据库详细设计 1.1.1 数据库关系模型设计 E-R图向关系模型转换:一个实体型转换为一个关系模式,实体的属性即为关系模式的属性,实体的

21、标识符即为关系模式的键。 根据图4-2与图4-3,本系统的关系模型为: 1) 用户(用户ID,用户名,密码,权限); 2) 轿车(轿车ID,车名,型号,数量,售价,成本); 3) 销售表(销售ID,轿车ID,销售日期,销售数量)。 1.1.2 数据库物理结构设计 数据库的物理设计是将一个给定逻辑结构实施到具体的环境中,逻辑数据模型要选取一个具体的工作环境,这个工作环境提供了数据存储结构与存取方法。经过分析设计给出了各主要表的物理结构: users表,用于存取用户信息,其设计如下: 类型 长度 是否允许空值 主键/外键 user_id int 8 NO 主键

22、 username varchar 20 NO password varchar 20 NO level int 1 NO 表5-1 car表,用于存取轿车基本信息,其设计如下: 列名 类型 长度 是否允许空值 主键/外键 car_id int 8 NO 主键 carname varchar 20 NO cartype varchar 20 NO amount int 8 NO in_price int 8 NO sell_price int 8 NO 表5-2 se

23、ll表,用于存取销售情况,其设计如下: 列名 类型 长度 是否允许空值 主键/外键 sell_id int 8 NO 主键 car_id int 8 NO 外键 sell_amount int 8 NO sell_date date - NO 表5-3 1.2 轿车管理系统模块详细设计 1.1.1 用户登陆模块 模块功能:用户输入正确的用户名密码后跳转到相应页面,若用户名或密码有误,输出提示 流程图: 图5-1 1.1.2 用户首页面模块 模块功能:显示当前用户权限,展示相应功能连接 流程图: 图5-2 1.1

24、.3 添加汽车模块 模块功能:将用户输入的轿车信息保存到数据库中。 流程图: 图5-3 1.1.4 删除汽车模块 模块功能:通过下拉框选择汽车的型号与名字,点击删除按钮对汽车删除。 流程图: 图5-4 1.1.5 查询汽车模块 模块功能:通过下拉框选择汽车的型号与名字,点击查询按钮查询轿车信息。 流程图: 图5-5 1.1.6 修改汽车模块 模块功能:依据输入的汽车信息修改相应汽车的信息 流程图: 图5-6 1.1.7 出售汽车模块 模块功能:用户选择要出售的汽车,输入出售数量,提交出售,如果出售数量大于库存数量,输出错误提示 流程图:

25、 图5-7 1.1.8 总销售查询模块 模块功能:输出总的销售结果 流程图: 图5-8 1.1.9 按时间查询模块 模块功能:依据用户选择的时间段来查询该段时间的销售情况 流程图: 图5-9 6 轿车信息管理系统具体实现 6.1 开发与运行环境 Ø 操作系统:Win7 Ø 内存:2G Ø 硬盘空间:500G Ø 开发软件:Myeclipse 10,Microsoft Sql Server 2008,Java 6.0 ,Tomcat6.0 Ø 框架版本:Struts 2.1,Hibernate 3.0,Spring 3.0 6.2 开发环境的搭建 新

26、建一个Web项目名为CIMS(Car Infomation Management System),选择使用Java6.0,如图6-1: 图6-1 添加Struts2相关支持包,如图6-2 图6-2 在Meclipse的数据库视图中增加cardb配置,如图6-3: 图6-3 添加Spring相关包,除了默认的包以外,还应选上Spring Web Liberaies 3.0,如图6-4: 图6-4 添加Hibernate支持包,除了原有包外,将最后4个包也加入,如图6-5 图6-5 Hibernate Configuration选择Spring Config

27、uration file,因为三大框架整合之后由Spring来管理所有的Bean,所以Hibernate的配置文件也由Spring的applicationContext.xml文件来管理,点击下一步; 选择Existing Spring Configuration file,点击下一步; 选择数据库为cardb,注意方言为SQL Server; 不建立SessionFactory,完成; 在web.xml中添加如下代码; contextConfigLocation

28、e>/WEB-INF/classes/applicationContext.xml org.springframework.web.context.ContextLoaderListener struts2 org.apache.struts

29、2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter encoding UTF-8 struts2 /*

30、-mapping> 6.3 数据库系统实现 users表 car表 sell表 其中sell表中的外键请安如下方式添加: 数据库映射到项目中,注意ID的生成方式选择native 最后的项目中将会有如下映射类: 6.4 DAO层实现 DAO(Data Access Object)是用于访问数据的对象,在使用时,我们在DAO中定义访问其对应数据对象的接口方法,业务层通过DAO操作数据,这样避免了直接在业务层使用持久层的技术。 DAO以及DAO实现的项目结构如下图所示: 在使用前,需要在Spring的配置文件中添加如下配置:

31、n id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> org.hibernate.dialect.SQLServerDial

32、ect com/cims/domain/Users.hbm.xml com/cims/domain/Sell.hbm.xml com/cims/domain/Car.hbm.xml 在本系统中绝大多数DAO实现使用getHiberna

33、teTemplate()模板来操作数据库,因为该模板是线程安全的。例子: @Override public Car findCarByNameAndType(String carname, String cartype) { List l= getHibernateTemplate().find("from Car " + "where car_name='"+carname+"' and car_type='"+cartype+"'"); if(l.size()==1) return (Car)l.get(0); return null; }

34、 从中可以看出Hibernate处理数据库的优势,它使用了对象的方式来对数据库的表操作。而且我们不需要编写最底层的SQL语句,而是直接使用它提供的方法。 但Hibernate的模板提供的方法似乎不支持一些数据库中的默认函数,因此本系统一些地方还使用了Session来使用原生SQL语句。例子: @Override public List findCarName() { return getSession().createSQLQuery("select " + "distinct car_name from Car").list(); } 该方法

35、主要是用于得到数据库中的汽车名字,并且过滤掉重复的部分。 6.5 Manager层实现 在Action中通过Manager对DAO接口进行调用,首先将需要对用到的DAO实例化,采用Spring的依赖注入方式将实例化的DAO注入到Action中。具体调用示例如下: @Override public void saveSell(Car car, int sellamount) { Calendar c=Calendar.getInstance(); car.setAmount(car.getAmount()-sellamount); Sell sell=new Sel

36、l(); sell.setCar(car); sell.setSellAmount(sellamount); sell.setSellDate(c.getTime().toLocaleString()); sellDAO.saveSell(sell); carDAO.update(car); } 前后省略了sellDAO,carDAO的定义以及set方法。该方法用于保存一条销售信息。 在Spring的配置文件中需要添加如下代码: 可以理解为我们以前在Action执行的CarDAO cardio=new CarDAOImpl();语句。 不过由于Spring的控制反转与依赖注入,使得我们将这个工作交给了Spring框架来完成 6.6 Action层实现 Action用于返回一个Stirng类型字符串,来选择跳转页面。其主要的配置在st

38、ruts.xml这个文件中,例子如下: /pages/sellManager/sellCarResult.jsp /pages/sellManager/willSellCarInfo.jsp 6.7 汽车信息查询模块实现 该模块实现界面如下: 首先会根据数据库中汽车信息生成一个查询选择页面; 用户选择好查询车辆后,显示查询结果;

39、 下面是该模块的具体实现过程: 查询页面用到了一个Struts2的标签该标签有2个主要参数 list对应第一个下拉选框,它的值由数据库中的汽车名称决定; doubleList对应第二个下拉选框,它的值对应第一个选框中的汽车名称所对应的型号; 其生成Action的主要代码如下: public String execute() throws E

40、xception { nameTotype=carManager.carNameToType(); carname=new ArrayList(); carname.add("所有"); carname.addAll(carManager.carName()); return SUCCESS; } public List getCartype() { ValueStack stack = ServletActionContext.getValueStack( ServletActionContext.getReques

41、t() ); Object name = stack.findValue( "top" ); if( name!=null && name instanceof String ) { return nameTotype.get( (String)name ); } return Collections.EMPTY_LIST; } execute()方法中的carname是一个List对象,用于存放所有的汽车名称,对应中的list。nameTotype是个Map>类型

42、对象,用来存放汽车名称与型号的对应。 getCartype()方法依据栈顶元素来选择对应的汽车型号的list。它的返回值对应于中的doubleList。 在Spring的配置文件中需要注入carManager 1.1 按时间查询模块实现 该模块的具体实现页面如下: 首先生成一个选择查询时间的页面,其

43、中年份会依据数据库中的所有年份来生成 选择时间段都输出查询统计结果 如果选择的起始时间大于截止时间会报错 具体实现过程如下: Action中主要方法如下 @Override public String execute() throws Exception { if(beginYear==-1) sellList=sellManager.findAllSellInfo(); else if(beginYear>endYear){ setMsg("您选择的起始年份:" +beginYear+",大于截止年份:"+endYear);

44、 return INPUT; } else if(beginYear==endYear){ if(beginMonth>endMonth){ setMsg("您选择的起始月份:" +beginMonth+",小于截止月份:"+endMonth); return INPUT; } sellList=sellManager.findSellInfoByDate (beginYear, beginMonth, endYear, endMonth); } else{ sellList=sellManag

45、er.findSellInfoByDate (beginYear, beginMonth, endYear, endMonth); } setMsg(""); profit=sellManager.totalProfit(sellList); totalSell=sellManager.totalSells(sellList); beginYear=-1; return SUCCESS; } 其中默认给beginYear赋值为-1,用于处理用户选择总销售情况时的查询。其余情况下如果时间合法则调用sellManager中的相关方法来获取销售的

46、信息。 需要在Spring的配置文件中添加如下代码: findSellInfoByDate()方法会根据输入的4个参数来生成查询sell表的SQL语句,其中用了很的判断来处理输入时间。分别判断了如下条件: 1) 起止年份相同 2) 起始年份小于截止年份 其主要代码如下: public List findSellI

47、nfoByDate(int beginYear, int beginMonth, int endYear, int endMonth) { List sellList=new ArrayList(); String date=null; for(int i=beginYear;i<=endYear;i++){ if(i==endYear&&i==beginYear){ for(int j=beginMonth;j<=endMonth;j++){ date="'"+i+"-%"+j+"-%'"; sellList.addAll(s

48、ellDAO.findSellInfoByDate(date)); } } else if(i!=endYear){ for(int j=beginMonth;j<=12;j++){ date="'"+i+"-%"+j+"-%'"; sellList.addAll(sellDAO.findSellInfoByDate(date)); } } else{ for(int j=1;j<=endMonth;j++){ date="'"+i+"-%"+j+"-%'"; sellList.addAll(sel

49、lDAO.findSellInfoByDate(date)); } } } for(int i=0;i 创建一个事务管理器,它需要依赖注入sessionFactory对象

51、 PROPAGATION_REQUIRED,readOnly PROPAGATION_REQUIRED 创建事务拦截器,需要依赖注入事务管理器,其中第一了事务的传播属性

52、。由于get开头的方法用于查看数据,因此给了它readOnly的属性。 userManager carManager sellManager

53、me="interceptorNames"> transactionInterceptor 为userManager,carManager,sellManager创建事务代理。由于有些操作涉及多表,比如我的sell保存操作,一方面它保存了一条记录到sell表中,另一方面它更新了car表中的amount列的数据。如果不用事务来处理,可能会出现sell表中有数据了,但car表中数据却没更新,使得数据库中的数据域实际数据不相符合。 7 总结 这个轿车信息

54、管理系统虽然比较简单,但在完成这个系统后,让我对SSH这套框架有了更深入的了解。下面总结下我对这套框架的学习体会: 首先这三个框架都是“半成品”框架,使得我在开发的时候不需要从头开始,一定程度上减少了开发工作量。 对于Struts2,这个框架,他具有很强大的标签功能,在开发页面时,非常轻松,并且也使得页面代码比较简洁。但它的标签页有不足的地方,比如我在使用标签时,如果我的中的其他表格超过了2列,整个中的结构就会错位。去查了它的源代码后,发现Struts2在前后默认添加了

55、d>,这使得在页面上使用时它会独立一行,并且无法设置合并列的属性。 对于Hibernate,它对数据库的映射确实很强大。经过它的映射,所有的表都成为了一个Java对象。并且使用它自带的模板来对数据库处理也非常方便,我不需要再去编写底层的SQL语言,而且模板还是线程安全的。但它的模板也有点缺点,模板不能很好的支持数据库自带一些函数,要使用带函数的sql只能使用session。 对于Spring,其实整个系统,可以不用Spring,也能完成需求。但为什么我还是加入了Spring,因为用它来管理Bean与Action,能让其它的2个框架跟好的工作起来。通过它的IOC与依赖注入机制,很好地实现了系统的松耦合。 以上是我对SSH这套框架的认识。 8 参考文献 《Eclipse,Struts,Hibernate,Spring集成开发宝典》 电子工业出版社 成天河等编著

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!