知识三(J2EE)

[size=medium]1.[b]MVC的各个部分都有那些技术来实现?如何实现?[/b]
MVC是模型(Model),视图(View)和控制器(Controller) 的缩写,其目的就是实现Web系统的职能分工。 Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。 View层用于与用户的交互,通常用JSP来实现。 Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。


MVC模式的目的就是实现Web系统的职能分工。
MVC模式的好处:
1.各施其职,互不干涉
在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。
2.有利于开发中的分工
在MVC模式中,由于按层把系统分开,那么就能更好的实现开发中的分工。网页设计人员可以进行开发视图层中的JSP,对业务熟悉的开发人员可开发业务层,而其它开发人员可开发控制层。
3.有利于组件的重用
分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视图层也可做成通用的操作界面

[img]http://dl2.iteye.com/upload/attachment/0084/8194/b9c89d42-9a47-3844-86c2-ba3eb6d4c136.jpg[/img]


/*(以前的Jsp页面是把所有的代码都写在Jsp页面中,那样不利于维护)
mvc是框架模式,设计模式是指工厂模式等*/

[b]2、Struts1和Struts2的区别[/b]

一、Servlet依赖性

由于Action在被调用的时候,HttpServletRequest和HttpServletResponse被传递到execute()方法,struts1的Action对Servlet API有依赖 性,但如果在struts2中,Action就不会对容器有依赖性了,因为struts2的Action是由简单的POJO组成,在struts2中,Servlet上下文以简单的Map的形式表现出来,这使得Action可以得到独立的测试,如果需要,struts2也可以访问原始的请求与响应。

二、 Action类
struts1要求action类继承一个基类,struts2 Action要求继承ActionSupport基类

三、验证
struts1和struts2都支持通过validate方法的手动验证,struts1使用ActionForm中的validate方法,而struts2支持通过Validate方法和Xwork校验框架的手动验证

四、[color=red]线程
struts1是单例模式的并且必须是线程安全的,因为仅有一个Action的实例来处理所有请求,而struts2为每一个请求产生一个实例[/color]
五、易测性
struts1一个主要问题是execute方法暴露了Servlet API,一个叫Struts TestCase的第三方扩展,提供了一个struts1测试用的模拟对象,但是struts2中,Action可以经由创建Action实例,设置属性,和调用方法来得到测试

六、获取输出
struts1使用ActionForm来捕获输入,而所有的ActionForm需要继承一个框架依赖的基类,由于javabean不能当作ActionForm来用,开发人员不得不创建冗繁的类来获取出入,不过struts2用Action属性,这避免了需要创建第二个输入对象

七、表达式语音
struts1与JSTL整合,struts2不仅支持jstl 还支持OGNL

八、将绑定值到视图中
在视图层,struts1使用标准的JSP来绑定对象到页面上下文来访问,然而struts2使用一种叫值栈的技术,这使得标签可以访问值而不需将视图与正在呈递的对象类型连接起来,值栈允许重用一些属性名相同但类型不同的视图类型

九、类型转换
通常struts1的ActionForm属性都是string类型的,struts1使用Commons-Beanutils进行类型转换,这些针对每一个类的类型转换无法为每一个实例配置,然而struts2使用OGNL来进行类型转换,框架包含了针对基础类型,常见对象类型与原始类型的转换器

十、Action执行控制
struts1支持每一个模块的请求处理器的分离,但是同一模块下的所有Action必须共享相同的生命周期,struts2支持通过拦截器栈为每一个Action创建不同的生命周期,自定义栈可以视需要对不同的Action使用


[b]3.struts2工作原理[/b]

[img]http://dl2.iteye.com/upload/attachment/0084/8730/40522290-b046-3f20-bd8e-d1169479631f.jpg[/img]
总结:
(a)用户发送http(httpServletRequest)请求,请求web服务器(Tomcat),web服务器加载web部署描述文件(web.xml),执行过滤器ActionContextCleanUp,Other filters,filterDispatcher等等

(b)调用filterDispatcher进入struts2流程中,filterDispatcher询问ActionMapper是否请求Action,如过actionMapper决定调用某个action,filterDispatcher把请求的处理交给ActionProxy,ActionProxy通过配置文件管理器(Configuraction Manager)加载struts.xml 配置文件,找到相应Action(需要调用的action类)

(c)ActionProxy会创建Action Invocation对象先执行struts2中相应的拦截器,在行所请求Action

(d)Action Invocation执行Result找到分发页面

(e)(反向)执行struts2中拦截器或拦截器栈

(f) 响应(HttpServletResponse)给客户端


truts 2框架本身大致可以分为3个部分:
核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。



struts2优势:
与Servlet API(Servlet容器)解耦

3.struts2校验validateXxx()是通过反射技术调用的。


[b]3.拦截器和过滤器的区别[/b]:(过滤器 在struts2中称为拦截器 )
1)拦截器是基于java的反射机制的,而过滤器是基于函数回调
2)拦截器不依赖与servlet容器,过滤器依赖与servlet容器
3)拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求

起作用
4)拦截器可以访问action上下文、值栈里的对象,而过滤器不能
5)在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次

[b]4.反射[/b]
[color=red]是通过一个类的名字去查找一个类,然后通过一个newInstance()方法实例化一个获得的类 [/color]
Object obj = Class.forName("com.spring.test.di.LogicImpl")
.newInstance();
logic = (Logic) obj;


Class<imessage> msgclass = (Class<imessage>) Class.forName(msgclassname);
IMessage msg = msgclass.newInstance();
[b]


反射的好处,其实就一句话:高类聚低耦合。把代码动态化,提高了代码的灵活度减少了代码量!
反射的缺点,代码灵活度增大了,自然会带来效率的问题,因此,大量使用反射会带来效率低的问题!

其实在我们实际项目中,随着许多框架的使用,我们程序员很少在手动实现反射,但我们又无时无刻在使用反射,比如JD[color=red]BC数据库连接第一句代码[/color]就在用反射,[color=red]框架的使用,大量配置文件的出现[/color],也是在使用反射去创建类对象,只是我们在使用时并没有手动去实现反射,这些工作都由框架来实现了!

4.struts2的核心jar包 [/b]
1。Commons-logging.jar -------------- 用于通用日志处理
2。Freemarker.jar -------------- 表现层框架,定义了struts2的可视组件主题
3。Ognl.jar -------------- OGNL表达式语言,struts2支持该EL
4。Struts2-core.jar -------------- struts2 2.0.11.2的核心库
5。Xwork.jar -------------- webwork的核心库
如要整合其他框架,则需要添加相应的xxx-plugin.jar如:
整合spring需要将这个jar包导入]。struts2-spring-plugin.jar ---struts2的spring插件

5.struts2 文件上传
jsp页面 [color=red]method必须设置成post,enctype 为multipart/form-data [/color]


[b]谈谈你对spring - IOC的理解[/b]
1.什么(what): 控制反转,可以通过xml配置文件来构造bean,并且配置bean之间的依赖关系
2.优点:
1).易于扩展,还可以与其它框架整合;
2)解耦,提高灵活性和可维护性
3)轻量级(包括哪些……)
3.缺点
缺少[color=red]IDE重构操作[/color]的支持,如果在Eclipse要对类改名,那么你还需要去XML文件里手工去改了,这似乎是所有XML方式的缺憾所在。
4,怎么用(how):写好bean之后,配置applicationContext.xml
5.可以使用容易提供的众多服务,如事务管理,消息服务等
6.容器提供单例模式支持

[b]1、哪些地方需要spring来配置?[/b]

1)主要的三大类型: DAO service Action ,
2) 其它特别的类:某些工厂类,比如hibernate的sessionfactory bean、 事务管理的类 transactionmanager、任务调度


[b]IoC的优缺点:[/b]
优点:解耦,提高灵活性和可维护性。
缺点:缺少IDE重构操作的支持,如果在Eclipse要对类改名,那么你还需要去XML文件里手工去改了,这似乎是所有XML方式的缺憾所在。

[color=green][b]spring[/b][/color]

1.spring概况
Spring是一个开源框架, 是一个轻量级的控制反转(IoC inversion of control )和面向切面(AOP aspect of progress)的容器框架

2.轻量级

1)文件jar包本身比较小,依赖包较少
2)易于扩展,随时可以不要;可以加入很多组件 (比如权限控制 spring-security、crobjob定时任务等);可以与struts hibernate整合
3)Spring是非侵入式的(通过反射机制引用),通过配置文件反射的机制控制其它的类

3.为什么要用spring

1)解耦:IOC,Inversion of Control; 控制反转
a)传统的方式,类与类直接引用依赖性高,不好扩展 b)实例间bean的赋值与传递,传统方式会导致new多个dao,
spring ioc解决以上问题.
2)(总体上)简化编程,提高效率 ,利于扩展
3) AOP : Aspect-Oriented Programming 面向切片编程

4.Ioc: Inverse of control,控制反转;
[/size]

[img]http://dl2.iteye.com/upload/attachment/0085/2565/d718be8e-16a0-312a-8a51-79dd92af5097.jpg[/img]


[size=medium]DI:Depedency Injection 依赖注入
IoC和DI是从不同角度描述同一件事情,即DI模式是Ioc的具体实现方式,通过引入IoC容器,利用依赖关系注入,实现对象的解耦。

[b]AOP(aspect of progress)[/b]

Spring对AOP支持使我们在用户权限控制、事务处理方面节省了很多工作量用户权限控制、事务处理


一、[b]spring工作原理[/b]:
1.spring mvc将所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作。
2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.
3.DispatcherServlet将请求提交到目标Controller
4.Controller进行业务逻辑处理后,会返回一个ModelAndView
5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象
6.视图对象负责渲染返回给客户端。
[img]http://dl2.iteye.com/upload/attachment/0085/6819/dca8f257-b86c-3a59-8ab0-a3cbc68fe1aa.png[/img]

二、为什么要用spring:

AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务 (比 如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。

IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词倒置所表明的,IOC 就像反过来的JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每一个对象都是用其协作对象构造的。因此是由容器管理协作对象(collaborator)。

Spring即使一个AOP框架,也是一IOC容器。 Spring 最好的地方是它有助于您替换对象。有了 Spring,只要用 JavaBean属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。


[b]
数据库事务的四大特性:[/b]
数据库事务必须具备ACID特性,[color=red]ACID是Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性)[/color]的英文缩写。


[/size]


</imessage></imessage>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值