java及数据库面试题 包含ssh_第1页
java及数据库面试题 包含ssh_第2页
java及数据库面试题 包含ssh_第3页
java及数据库面试题 包含ssh_第4页
java及数据库面试题 包含ssh_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 写出从数据库表 Custom 中查询 No、Name、Num1、Num2 并将 Name 以姓名显示、计算出的和以总和显示的 SQL。SELECT No , Name AS 姓名 ,Num1 ,Num2,(Num1+Num2) AS 总和FROM Custom2. 何为“事务处理”,谈谈你对它的理解。事务处理是指一个单元的工作,这些工作要么全做,要么全部不做。作为一个逻辑单元,必须具备四个属性:自动性、一致 性、独立性和持久性。自动性是指事务必须是一个自动的单元工作,要么执行全部数据的修改,要么全部数据的修改都不执行。一致性是指当事务完成时,必须使所 有数据都具有一致的状态。在关系型数据库中,所有的规则必须应用到事务的修改上,以便维护所有数据的完整性。所有的内部数据结构,在事务结束之后,必须保 证正确。独立性是指并行事务的修改必须与其他并行事务的修改相互独立。一个事务看到的数据要么是另外一个事务修改这些事务之前的状态,要么是第二个事务已 经修改完成的数据,但是这个事务不能看到正在修改的数据。3. 常用的数据结构有哪些?请枚举一些。(不少于 5 个)链表、堆栈、二叉树、队列、图、堆,集合。4. 什么是 OOP?什么是类?请对比类和对象实例之间的关系。OOP 是Object_oriented Programming(面向对象编程)的缩写。这主要是为了区别于以前的面向过程的程序设计!指的是用对象的观点来组织与构建系统,它综合了功能抽象和 数据抽象,这样可以减少数据之间的耦合性和代码的出错几率。使用面向对象编程技术可以使得软件开发者按照现实世界里人们思考问题的模式编写代码,可以让软 件开发者更好地利用代码直接表达现实中存在的对象,将问题空间直接映射到解空间!类:即 class 在面向对象的程序设计中,专门用“类”来表示用户定义的抽象数据类型(user_defined abstract type)。它将具有相同状态、操作和访问机制的多个对象进行了抽象。类具有继承、数据隐藏和多态三种主要特性。利用类的这三种特性可以更好地表示现实世 界中事物。类是同一类对象实例的共性的抽象,对象是类的实例化。对象通常作为计算机模拟思维,表示真实世界的抽象,一个对象就像一个软件模块,可以为用户 提供一系列的服务可以改变对象的状态、测试、传递消息等。类定义了对象的实现细节或数据结构。类是静态的,对象是动态的,对象可以看作是运行中的类。类 负责产生对象,可以将类当成生产对象的工厂(Object factory).5. 有一组数字(3,10,6,8,98,22),请编程排序(升降序皆可),语言不限,算法不限,但须注明是何种算法。/下面使用简单的冒泡法进行排序!#include “iostream.h” template class CBubbleprivate: type *pArray; int size;public:CBubble(type a,int sizeArray);void sort();void display();template CBubble:CBubble(type a,int sizeArray) pArray=a; size=sizeArray/sizeof(type);templatevoid CBubble:sort() type temp; for(int i=0;ipArrayj+1)/升序temp=pArrayj+1;pArrayj+1=pArrayj;pArrayj=temp;templatevoid CBubble:display()for(int i=0;i $50BREAKELSECONTINUEEND如果平均价格少于 $30,WHILE 循环就将价格加倍,然后选择最高价。如果最高价少于或等于 $50,WHILE 循环重新启动并再次将价格加倍。该循环不断地将价格加倍直到最高价格超过 $50USE pubsGOWHILE (SELECT AVG(price) FROM titles) $50BREAKELSECONTINUEENDCREATE PROCEDURE au_infolastname varchar(40),firstname varchar(20)ASSELECT au_lname, au_fname, title, pub_nameFROM authors a INNER JOIN titleauthor taON a.au_id = ta.au_id INNER JOIN titles tON t.title_id = ta.title_id INNER JOIN publishers pON t.pub_id = p.pub_idWHERE au_fname = firstnameAND au_lname = lastnameGOEXECUTE au_info Dull, Ann或者EXECUTE au_info lastname = Dull, firstname = Ann创建存储过程 CREATE PROCEDURE titles_sum TITLE varchar(40),SUM money OUTPUTASSELECT SUM = SUM(price)FROM titlesWHERE title LIKE TITLEGODECLARE TOTALCOST moneyEXECUTE titles_sum The%, TOTALCOST OUTPUTselect TOTALCOSTgoCREATE PROCEDURE Oakland_authorsASSELECT au_fname, au_lname, address, city, zipFROM authorsWHERE city = Oaklandand state = CAORDER BY au_lname, au_fnameGOsp_helptext Oakland_authorsALTER PROCEDURE Oakland_authorsASSELECT au_fname, au_lname, address, city, zipFROM authorsWHERE state = CAORDER BY au_lname, au_fnameGOsp_helptext Oakland_authors提交事务后,所有书籍支付的版税增加 10%。begin transaction MyTransactionupdate royschedset royalty = royalty * 1.10commit transaction MyTransactionrollback transaction MyTransactionselect royalty from royschedselect trancount1.创建试验实验表create table temptrigger( id_temp varchar(2) not null primary key,temp_name varchar(10) null,temp_age int null)goinsert temptrigger values(01,张三,10)insert temptrigger values(02,李四,11)insert temptrigger values(03,王五,12)insert temptrigger values(04,赵六,11)select * from temptrigger go2.创建 insert , update 触发器create trigger temptrigger_modifyon temptriggerfor insert,updateasbeginif (select temp_age from inserted) 15beginrollback transactionprint 年龄不能超过 15 岁!endendinsert temptrigger values(04,大朋,17)insert temptrigger values(05,大朋,17)insert temptrigger values(05,大朋,14)update temptrigger set temp_age=18 where id_temp = 01update temptrigger set temp_age=9 where id_temp = 01-3.创建 delete 触发器drop trigger temptrigger_deletecreate trigger temptrigger_deleteon temptriggerfor deleteasbeginprint rowcountif rowcount 1beginrollback transactionprint 一次删除记录不能多于 1 条endenddelete from temptriggerdelete from temptrigger where id_temp=01创建聚集索引 create clustered index clindx_titleid on roysched(title_id)sp_help roysched创建非聚集索引 create nonclustered index unclindx_titleid on roysched(title_id)sp_help roysched查看索引统计 dbcc show_statistics(roysched,titleidind)更新索引统计 update statistics authors重建索引 dbcc dbreindex(roysched,unclindx_titleid)删除索引 drop index roysched.unclindx_titleid-sp_help roysched1创建 ssn(社会保险号)的基于 varchar 的自定义数据类型。用于存储 11 位社会保险号(999-99-999)的列。该列不能为 null。use pubs exec sp_addtype ssn , varchar(11) , NOT NULL查看创建的数据类型sp_help ssn使用创建的数据类型 create table mytable( myid varchar(2) primary key, myssn ssn)4-删除创建的数据类型drop table mytableexec sp_droptype ssn批是包含一个或多个 Transact-SQL 语句的组,从应用程序一次性地发送到 Microsoft SQL Server 执行。批作为一个整体执行,以 GO 命令结束。批处理是客户端作为一个单元发出的一个或多个 SQL 语句的集合。每个批处理编译为一个执行计划。触发器触发器是在对表进行插入、更新或删除操作时自动执行的存储过程触发器通常用于强制业务规则触发器可以确保数据的完整性和一致性事务是用户定义的一个操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位(构成单一逻辑工作单元的操作集合)如果某一事务成功,则在该事务中进行的所有数据更改均会提交,成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有数据更改均被清除锁 是在多用户环境中对数据访问的限制封锁就是事务 T 在对某个数据对象(如表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务 T 就对该数据对象有了一定的控制,在事务 T 释放它的锁之前,其它的事务不能更新此数据对象。(锁蕴含的基本概念是用户需要对表的排它访问)从程序员的角度 看:分为乐观锁和悲观锁。乐观锁:完全依靠数据库来管理锁的工作。悲观锁:程序员自己管理数据或对象上的锁处理。子查询:一个 SELECT 语句嵌套在另一个 SELECT 语句中。 索引 是一个数据库对象,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单,然后根据指定的排序次序排列这些指 针 优点提高查询执行的速度。 强制实施数据的唯一性。 提高表之间联接的速度。 缺点 存储索引要占用磁盘空间。数据修改需要更长的时间,因为索引也要更新。视图是一种虚拟表,通常是作为来自一个或多个表 的行或列的子集创建的。视图本质上讲,就是保存在数据库中的 select 查询视图并不是数据库中存储的数据值的集合。对最终用户的好处 结果更容易理解 获得数据更容易对开发人员的好处 限制数据检索更容易 维护应用程序更方便存储过程使用一个名称存储的预编译 T-SQL 语句和流程控制语句的集合由数据库开发人员或数据库管理员编写用来执行管理任务或应用复杂的业务规则 优点执行速度更快首次运行时,进行优化和编译得到执行计划并将该计划存储在系统表中,以后直接运行。实现多个程序共享应用程序逻辑组件式编程能够屏蔽数据库的结构,实现更高的安全性减少网络流通量数据库设计和建模必要性好的数据库结构有利于:-节省数据的存储空间-能够保证数据的完整性-方便进行数据库应用系统的开发设计不好的数据库结构将导致-数据冗余、存储空间浪费-内存空间浪费不管数据库的大小和复杂程度如何,可以用下列基本步骤来设计数据库:收集信息标识对象设计数据模型标识每个对象 存储的信息类型标识对象之间的关系数据模型是一种标识实体类型及其实体间联系的模型。典型的数据模型由网状模型、层次模型和关系模型。什么是规范化从关系数据库的表中,除去冗余数据的过程称为规范化。 精简数据库的结构 从表中删除冗余的列 标识所有依赖于其它数据的数据三级范式第一范式的定义: 如果一个表中没有重复组(即行与列的交叉点上只有一个值,而不是一组值),则这个表属于第一范式(常记成 1NF)。简而言之:”每一字段只存储一个值”。 例如:职工号,姓名,电话号码组成一个表(一个人可能有一个办公室电话 和一个家里电话号码) 第二范式的定义:如果一个表属于 1NF,任何属性只依赖于关键字,则这个表属于第二范式(常记成 2NF )。简而言之:必须先符合 1NF 的条件,且每一行都能被唯一的识别。 将 1NF 转换成 2NF 的方法是添加主键。学号,课程名,成绩第三范式的定义:如果一个表属于 2NF,且不包含传递依赖性,则这个表是第三范式(常记成 3NF)。满足 3NF 的表中不包含传递依赖。简而言之:没有一个非关键属性依赖于另一个非关键属性。学号,课程号,成绩,学分学号,姓名,所在系,系名 称,系地址什么是类与对象?所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。类是具备某些共同特征的实体的集合,它是一种抽象的概念,用程序设计的语言来说,类是一种抽象的数据类型,它是对所具有相同特征实体的抽象。属性与方法?不同对象具有相同特点,就可能抽象为一定的类,那么这些特点基本上可以分为两类,一类是描述对象静态状态的,就是对象的属性,在程序设计中,可以称之为变 量;另一类是描述对象的动作,就是对象的方法,在程序设计中我们称之为函数。属性和方法是一个对象所具备的两大基本要素,也是我们后面编程工作的核心。什么是封装?只要有足够的方法,就没必要直接去操作对象属性,只要调用这些方法就可以实现要完成的任务,这种现象称为封装,它通过对象方法对其属性的操作把对象属性封装在一个对象内部,对象与外界打交道全部通过其自身的方法来实现,有效的把对象属性隐藏在对象内部。编写 java 文件的注意事项?在记事本中编写 java 文件,在保存时一定要把文件名和扩展名用双引号括起来,否则将默认保存为文本文件,如果要保存的 java 文件名为 Program1.java,则在保存时在文件名文本框中一定要输入”Program1.java”。如何编译 java 程序?单击开始|运行命令,在命令行上输入 cmd,按回车键(在 window98 中输入command,按回车键),即可打开一个命令窗口,将目录转换到编写 java 源程序所在的目录,输入 javac filename.java如何执行 java 程序?同样在命令窗口中输入 java filename,基本数据类型?Java 的数据类型可以划分为 4 大类:整数,浮点数,字符型,布尔型。其中整数可以划分为:byte,short,int,long.浮点数可以划分为float,double.常见 struts 面试题(2009-02-17 09:10:33)标签:杂谈分类:饭碗1. Struts 的工作原理在 Struts 中,用户的请求一般以*.do 作为请求服务名,所有的*.do 请求均被指向 ActionSevlet, ActionSevlet 根据 Struts-config.xml 中的配置信息,将用户请求封装成一个指定名称的 FormBean,并将此 FormBean 传至指定名称的 ActionBean,由 ActionBean 完成相应的业务操作,如文件操作,数据库操作等。每一个*.do 均有对应的 FormBean 名称和 ActionBean 名称,这些在Struts-config.xml 中配置。2. Struts 优点与缺点Struts 是开源软件,使开发者能更深入的了解其内部实现机制。Struts 优点:业界”标准”(很多成功案例),学习资源丰富。Struts 的优点主要集中体现在两个方面:Taglib 和页面导航。a、利用 Struts 提供的 taglib 可以大大节约开发时间。b、维护扩展比较方便。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。c、表现与逻辑分离d、表单验证解决了请求数据的验证问题,增强了系统健壮性。e、便于团队开发Struts 缺点:a、大量的使用标签,对于初学者难度较大。b、ActionForms 使用不便、无法进行单元测试(StrutsTestCase 只能用于集成)3. Struts 提供了几个标签库?都是什么标签库?Struts 提供了五个标签库,即:HTML、Bean、Logic、Template 和 Nested。HTML 标签 用来创建能够和 Struts 框架和其他相应的 HTML 标签交互的 HTML输入表单Bean 标签 在访问 JavaBeans 及其属性,以及定义一个新的 bean 时使用Logic 标签 管理条件产生的输出和对象集产生的循环Template 标签 随着 Tiles 框架包的出现,此标记已开始减少使用Nested 标签 增强对其他的 Struts 标签的嵌套使用的能力, , , , , , , , , 参考: struts Logic 标签说明, , , 4. Tiles 框架是什么?Tiles 框架为创建 Web 页面提供了一种模板机制,它能将网页的布局和内容分离。5.谈谈 HashMap 和 Hashtable 的区别。答: HashMap 是轻量级的(线程不安全的,效率高的)集合,Hashtable 是重量级的(线程安全的,效率低的)集合。都属于 Map 接口的类,实现了将惟一键映射到特定的值上。HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。6.什么是中间件?中间件就是程序中可织入的,可重用的,与业务逻辑无关的各种组件。中间件(middleware)是基础软件的一大类,属于可复用软件的范畴。顾名思义,中间件处于操作系统软件与用户的应用软件的中间。中间件在操作系统、网络和数据库之上,应用软件的下层,总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。在众多关于中间件的定义中,比较普遍被接受的是 IDC 表述的:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。分类:数据访问中间件,远程调用中间件,消息中间件,交易中间件,对象中间件。举例:1,RMI(Remote Method Invocations, 远程调用)第 3 页 共 33 页2,Load Balancing(负载均衡,将访问负荷分散到各个服务器中)3,Transparent Fail-over(透明的故障切换)4,Clustering(集群,用多个小的服务器代替大型机)5,Back-end-Integration(后端集成,用现有的、新开发的系统如何去集成遗留的系统)6,Transaction 事务(全局/局部)全局事务(分布式事务)局部事务(在同一数据库联接内的事务)7,Dynamic Redeployment(动态重新部署,在不停止原系统的情况下,部署新的系统)8,System Management(系统管理)9,Threading(多线程处理)10,Message-oriented Middleware 面向消息的中间件(异步的调用编程)11,Component Life Cycle(组件的生命周期管理)12,Resource pooling(资源池)13,Security(安全)14,Caching(缓存)7.你对 MVC 的理解,MVC 有什么优缺点?结合 Struts,说明在一个 Web 应用如何去使用?答:MVC 设计模式(应用观察者模式的框架模式)M: Model(Business process layer),模型,操作数据的业务处理层,并独立于表现层(Independent of presentation)。V: View(Presentation layer),视图,通过客户端数据类型显示数据,并回显模型层的执行结果。C: Controller(Control layer),控制器,也就是视图层和模型层桥梁,控制数据的流向,接受视图层发出的事件,并重绘视图MVC 框架的一种实现模型模型二(Servlet-centric):JSP+Servlet+JavaBean,以控制为核心,JSP 只负责显示和收集数据,Sevlet,连接视图和模型,将视图层数据,发送给模型层,JavaBean,分为业务类和数据实体,业务类处理业务数据,数据实体,承载数据,基本上大多数的项目都是使用这种 MVC 的实现模式。StrutsMVC 框架(Web application frameworks)Struts 是使用 MVC 的实现模式二来实现的,也就是以控制器为核心。Struts 提供了一些组件使用 MVC 开发应用程序:Model:Struts 没有提供 model 类。这个商业逻辑必须由 Web 应用程序的开发者以JavaBean 或 EJB 的形式提供第 1 页 共 33 页View:Struts 提供了 action form 创建 form bean, 用于在 controller 和view 间传输数据。此外,Struts 提供了自定义 JSP 标签库,辅助开发者用 JSP 创建交互式的以表单为基础的应用程序,应用程序资源文件保留了一些文本常量和错误消息,可转变为其它语言,可用于 JSP 中。Controller:Struts 提供了一个核心的控制器 ActionServlet,通过这个核心的控制器来调用其他用户注册了的自定义的控制器 Action,自定义 Action 需要符合Struts 的自定义 Action 规范,还需要在 struts-config.xml 的特定配置文件中进行配置,接收 JSP 输入字段形成 Action form,然后调用一个 Action 控制器。Action 控制器中提供了model 的逻辑接口。8.类的核心特性有哪些?类具有封装性、继承性和多态性。封装性:类的封装性为类的成员提供公有、缺省、保护和私有等多级访问权限,目的是隐藏类中的私有变量和类中方法的实现细节。继承性:类的继承性提供从已存在的类创建新类的机制,继承(inheritance)使一个新类自动拥有被继承类(父类)的全部成员。多态性:类的多态性提供类中方法执行的多样性,多态性有两种表现形式:重载和覆盖。9.、请说出几个常用的异常类答:NullpointException(空指针异常)ClassNotFoundException(类找不到异常)ClassCastException(类型转换异常)IllegalArgumentException(非法参数异常)ArithmeticException(算术异常)NumberFormatException(数据格式异常)IndexOutOfBoundsException(数组下标越界异常)IllegalStateException(非法语句异常)Hibernate 工作原理及为什么要用?原理:1.读取并解析配置文件2.读取并解析映射信息,创建 SessionFactory3.打开 Sesssion4.创建事务 Transation5.持久化操作6.提交事务7.关闭 Session8.关闭 SesstionFactory为什么要用:1. 对 JDBC 访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。2. Hibernate 是一个基于 JDBC 的主流持久化框架,是一个优秀的 ORM 实现。他很大程度的简化 DAO 层的编码工作3. hibernate 使用 Java 反射机制,而不是字节码增强程序来实现透明性。4. hibernate 的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。2 Hibernate 是如何延迟加载?1. Hibernate2 延迟加载实现:a)实体对象 b)集合(Collection)2. Hibernate3 提供了属性的延迟加载功能当 Hibernate 在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。3Hibernate 中怎样实现类之间的关系?(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、4 说下 Hibernate 的缓存机制1. 内部缓存存在 Hibernate 中又叫一级缓存,属于应用事物级缓存2. 二级缓存:a) 应用及缓存b) 分布式缓存条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非 关键数据c) 第三方缓存的实现5 Hibernate 的查询方式Sql、Criteria,object comptositionHql:1、 属性查询2、 参数查询、命名参数查询3、 关联查询4、 分页查询5、 统计函数6 如何优化 Hibernate?1.使用双向一对多关联,不使用单向一对多2.灵活使用单向一对多关联3.不用一对一,用多对一取代4.配置对象缓存,不使用集合缓存5.一对多集合使用 Bag,多对多集合使用 Set6. 继承类使用显式多态7. 表字段要少,表关联不要怕多,有二级缓存撑腰7 Struts 工作机制?为什么要使用 Struts?工作机制:Struts 的工作流程:在 web 应用启动时就会加载初始化 ActionServlet,ActionServlet 从struts-config.xml 文件中读取配置信息,把它们存放到各种配置对象当 ActionServlet 接收到一个客户请求时,将执行如下流程.-(1)检索和用户请求匹配的 ActionMapping 实例,如果不存在,就返回请求路径无效信息;-(2)如果 ActionForm 实例不存在,就创建一个 ActionForm 对象,把客户提交的表单数据保存到 ActionForm 对象中;-(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用 ActionForm的 validate()方法;-(4)如果 ActionForm 的 validate()方法返回 null 或返回一个不包含ActionMessage 的 ActuibErrors 对象, 就表示表单验证成功;-(5)ActionServlet 根据 ActionMapping 所包含的映射信息决定将请求转发给哪个 Action,如果相应的 Action 实例不存在,就先创建这个实例,然后调用Action 的 execute()方法;-(6)Action 的 execute()方法返回一个 ActionForward 对象,ActionServlet 在把客户请求转发给 ActionForward 对象指向的 JSP 组件;-(7)ActionForward 对象指向 JSP 组件生成动态网页,返回给客户; 为什么要用:JSP、Servlet、JavaBean 技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts 便应运而生。基于 Struts 开发的应用由 3 类组件构成:控制器组件、模型组件、视图组件8 Struts 的 validate 框架是如何验证的?在 struts 配置文件中配置具体的错误提示,再在 FormBean 中的 validate()方法具体调用。9 说下 Struts 的设计模式MVC 模式: web 应用程序启动时就会加载并初始化 ActionServler。用户提交表单时,一个配置好的 ActionForm 对象被创建,并被填入表单相应的数 据,ActionServler 根据 Struts-config.xml 文件配置好的设置决定是否需要表单验证,如果需要就调用 ActionForm 的 Validate()验证后选择将请求发送到哪个 Action,如果 Action 不存在,ActionServlet 会先创建这个对象,然后调用 Action 的 execute()方法。Execute()从 ActionForm 对象中获取数据,完成业务逻辑,返回一个 ActionForward 对 象,ActionServlet 再把客户请求转发给 ActionForward 对象指定的 jsp 组件,ActionForward 对象指定的 jsp生成动 态的网页,返回给客户。10 spring 工作机制及为什么要用?1.spring mvc 所有的请求都提交给 DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作。2.DispatcherServlet 查询一个或多个 HandlerMapping,找到处理请求的Controller.3.DispatcherServlet 请求提交到目标 Controller4.Controller 进行业务逻辑处理后,会返回一个 ModelAndView5.Dispathcher 查询一个或多个 ViewResolver 视图解析器,找到 ModelAndView对象指定的视图对象6.视图对象负责渲染返回给客户端。为什么用:AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务 (比如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词 倒置 所表明的,IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每一个对象都是用其协作对象构造的。因此是由容器管理协作对象(collaborator)。Spring 即使一个 AOP 框架,也是一 IOC 容器。 Spring 最好的地方是它有助于您替换对象。有了 Spring,只要用 JavaBean 属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,如图 1 所示。组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写 的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。Spring 框架的功能可以用在任何 J2EE 服务器中,大多数功能也适用于不受管理的环境。Spring 的核心要点是:支持不绑定到特定 J2EE 服务的可重用业务和数据访问对象。毫无疑问,这样的对象可以在不同 J2EE 环境 (Web 或 EJB)、独立应用程序、测试环境之间重用。IOC 和 AOP控制反转模式(也称作依赖性介入)的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器(在 Spring 框架中是 IOC 容器) 负责将这些联系在一起。在典型的 IOC 场景中,容器创建了所有对象,并设置必要的属性将它们连接在一起,决定什么时间调用方法。下表列出了 IOC 的一个实现模式。Spring 框架的 IOC 容器采用类型 2 和类型 3 实现。面向方面的编程面向方面的编程,即 AOP,是一种编程技术,它允许程序员对横切关注点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化。AOP 的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块中。AOP 和 IOC 是补充性的技术,它们都运用模块化方式解决企业应用程序开发中的复杂问题。在典型的面向对象开发方式中,可能要将日志记录语句放在所有方法和 Java 类中才能实现日志功能。在 AOP 方式中,可以反过来将日志服务模块化,并以声明的方式将它们应用到需要日志的组件上。当然,优势就是 Java 类不需要知道日志服务的存在,也不需要考虑相关的代码。所以,用 Spring AOP 编写的应用程序代码是松散耦合的。AOP 的功能完全集成到了 Spring 事务管理、日志和其他各种特性的上下文中。IOC 容器Spring 设计的核心是 org.springframework.beans 包,它的设计目标是与 JavaBean 组件一起使用。这个包通常不是由用户直接使用,而是由服务器将其用作其他多数功能的底层中介。下一个最高级抽象是 BeanFactory 接口,它是工厂设计模式的实现,允许通过名称创建和检索对象。BeanFactory 也可以管理对象之间的关系。BeanFactory 支持两个对象模型。 单态 模型提供了具有特定名称的对象的共享实例,可以在查询时对其进行检索。Singleton 是默认的也是最常用的对象模型。对于无状态服务对象很理想。 原型 模型确保每次检索都会创建单独的对象。在每个用户都需要自己的对象时,原型模型最适合。bean 工厂的概念是 Spring 作为 IOC 容器的基础。IOC 将处理事情的责任从应用程序代码转移到框架。正如我将在下一个示例中演示的那样,Spring 框架使用 JavaBean 属性和配置数据来指出必须设置的依赖关系。BeanFactory 接口因为 org.

温馨提示

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

评论

0/150

提交评论