***为什么要使用框架,框架的优缺点
因为软件系统发展到今天已经很复杂了,特别是服务器端软件,设计到的知识,内容,问题太多。在某些方面使用别人成熟的框架,就相当于让别人帮你完成一些基 础工作,你只需要集中精力完成系统的业务逻辑设计。而且框架一般是成熟,稳健的,他可以处理系统很多细节问题,比如,事物处理,安全性,数据流控制等问题。
还有框架一般都经过很多人使用,所以结构很好,所以扩展性也很好,而且它是不断升级的,你可以直接享受别人升级代码带来的好处。框架一般处在低层应 用平台(如J2EE)和高层业务逻辑之间的中间层。因为某种框架用的人多,而且项目比较大,采用以后熟悉该框架技术的人可以马上和开发团队紧密结合,“规 范”
***什么是框架
框架,即FrameWork。其实就是某种应用的半成品,就是一组零件,供你选用完成你自己的系统。简单说就是使用前人提供的工具,来做你需要做的事情
***mvc模型
MVC模型(Model-View-Controller)是一种架构型的模式,本身不引入新功能,只是帮助我们将开发的结构组织的更加合理,使展示与模型分离、流程控制逻辑、业务逻辑调用与展示逻辑分离。
Model提供要展示的数据。View负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。Controller接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。
***mvc模式开发的工作流程,主要步骤
用户在浏览器中方法JSP页面进行操作的时候整个web应用使用分层开发的内部流程分为8步:
1)用户通过浏览器访问jsp页面也就是view层,在jsp上的所有操作都直接请求控制层 Servlet来完成。
2)控制层获取view层提交过来的参数通过JavaBean对象封装参数,然后将封装好的参数 传递到Model层中的Service中调用Service层进行数据的业务逻辑处理。
3)Service层将控制层传递过来的参数传递到Dao层,然后调用Dao层访问数据库。
4)Dao层根据Service层的参数需求来访问数据库。
5)数据库根据Dao层的操作将数据集返回Dao层。
6)Dao层将获得的数据通过JavaBean对象进行封装,然后将封装好的数据返回给Service 层。
7)Service层将Dao中返回的数据又返回给控制层。
8)控制层将得到的数据转发到对应的jsp页面给用户显示。
***struts2的工作原理和流程
Struts2 可谓站在巨人肩膀上超越,不是简单的对 struts1 的升级,而是 Struts 的下一代产品,是在 struts 1 和 WebWork 的技术基础上进行了合并的全新的Struts 2 框架。Struts 2 以 WebWork 为核心,采用拦截器的机制来处理用户的请求,得业务逻辑控制器能够与 ServletAPI 完全脱离开,所以 Struts 2 可以理解为 WebWork 的更新产品。虽然从 Struts 1 到 Struts 2 有着太大的变化,但是相对于 WebWork, Struts 2 的变化很小。
1、客户端初始化一个指向 Servlet 容器(例如 Tomcat)的请求;
2 、这个 请求 经过 一系 列的 过滤 器( Filter )( 这些 过滤 器中 有一个 叫做ActionContextCleanUp 的可选过滤器,ActionContextCleanUp 延长 action 中属性的生命周期,包括自定义属性,而且对于 Struts2 和其他框架的集成很有帮助);
3、接着 FilterDispatcher 被调用,FilterDispatcher 询问 ActionMapper 来决定这个请求是否需要调用某个 Action ;
4、如果 ActionMapper 决定需要调用某个 Action,FilterDispatcher 把请求的处理交给 ActionProxy ;
5、ActionProxy 通过 Configuration Manager 询问框架的配置文件,找到需要调用的 Action 类;
6 、ActionProxy 创 建 一 个 ActionInvocation 的 实 例 。
7 、ActionInvocation 实例使用命名模式来调用,在调用 Action 的过程前后,涉及到相关拦截器(Intercepter)的调用。
8、一旦 Action 执行完毕,ActionInvocation 负责根据 struts.xml 中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个 Action 链) 一个需要被表示的 JSP 或者 FreeMarker 的模版。在表示的过程中可以使用 Struts2 框架中继承的标签。
***struts2的优点
struts2 是 struts 1 和 WebWork 技术的整合,拥有两大框架的精髓, 细节如下;
1、struts2 依然是基于 J2EE 标准的 MVC 的框架,开发流程清晰,开发人员易学习,培训成本低。
2、struts2 与 struts1 相比解禁了与底层容器的强偶合,控制层可以是一个纯净的 JOPO 类,使得测试成本降低,可维护性增强;而且对前台的参数封装使用强大的 DI 注入方式
3、提供了 struts-default 默认的配置,最大成度上降低了开发人员的配置工作, 而且支持多配置并行开发,使得大型项目分工开发更加容易。
4、引入了 OGNL 进行参数传递,OGNL 提供了在 Struts2 里访问各种作用域中的数据的简单方式,你可以方便的获取 Request,Attribute,Application,Session, Parameters 中的数据。大大简化了开发人员在获取这些数据时的代码量。
5、强大的拦截机制,struts2 中有 18 层拦截过滤设置,对于用户的登录验证、权限验证、文件上传、异常处理等有很好的处理机制,合理使用可以大大的减化工作量。
6、另外还有很多如模块化配置、多视图支持、全局结果与声明式异常配置、可扩充插件机制、对其它开源框架整合的友好支持,等等。
***为什么要使用struts2
先根据上面 struts2 的优点回答几点(这里省略)。
1、struts2 发展很快,积累了大量的资料和解决方案,这将降低开发中使用其它框架造成的未知风险和开发成本。
2、strtus2 支持多配置,可以对大项目进行很好的拆分,并行开发,减少开发周期。
3、struts2 是 J2EE 标准的的 MVC 框架,培训成本低,可以快速度的组建开发团队,而且由于技术通用,在后期的维护中成本也会相对低很多。
***struts2 如何获取 request(session)
对于获取 HttpServletRequest、HttpSession、ServletContext 对象, Strtus2 给提供了两种方式。
第一种,从 ServletActionContext 中获取,以取 Request 为例,ServletActionContext.getRequest(),返回的是一个 HttpServletRequest 对象。
第二种,实现接口;Struts2 提供了 ServletRequestAware,ServletResponseAware,SessionAware,ServletContextAware 接口,重写后会提供重写方法,然后便可以在方法中获取上面对象。
***Struts2 中拦截器与过滤器的区别
1、拦截器是基于 java 反射机制的,而过滤器是基于函数回调的。
2、拦截器不依赖于 servlet 容器,而过滤器依赖于 servlet 容器。
3、拦截器只能对 Action 请求起作用,而过滤器则可以对几乎所有请求起作用。
4、拦截器可以访问 Action 上下文、值栈里的对象,而过滤器不能。
5、在 Action 的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。
org.apache.struts2.dispatcher.FilterDispatcher 是 Struts2 的主要的 Filter,负责四个方面的功能:
(1) 执 行 Actions
(2)清除 ActionContext
(3)维护静态内容
(4)清除 request 生命周期内的 XWork 的 interceptors
***什么是 ValueStack 和 OGNL
ValueStack(值栈)是用来处理客户端请求数据的存储区,数据一般是存放在 ActionContext 中,通过 ThreadLocal 为每个线程创建的(一个对象会对应一个 ValueStack),生命周期是请求级别。
OGNL ( Object-Graph Navigation Language ): 是一种功能强大的表达式语言(Expression Language,简称为 EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。