1.什么是Struts2?
javaEE三层架构:表现层、业务层、持久层,为了提高开发效率,方便项目管理。
技术结构发展:
1.单独使用jsp/servlet、
2.使用jsp+javabean:(model1模式)、
3.使用:jsp+servlet+javaBean(model2模式)
Model2模式即MVC模式,MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。
存在的问题:
1.控制逻辑复杂且不通用(多个请求得写多个Servlet)。
2.表现(视图)技术单一,只使用jsp,能否使用其它表现层技术(freemarker,pdf、xls)。
3.对请求的参数的解析(需手动单独获取每个参数request.getParameter())。
Struts2 是apache的一个开源项目,它是纯java开发,它是一个非常优秀的MVC框架,基于Model2 设计模型。
2.Struts2的结构优点
解决jsp+servlet+javabean中的问题:
1.将控制逻辑单独封装成通用的控制器
2.原控制逻辑中封装请参数、调用业务逻辑代码抽取出来。
3.支持多视图技术。
(1)控制器
struts2提供前端控制器(Struts2PreparedAndExecutFilter),将控制逻辑封装起来,接收请求。
(2)模型
封装请求参数,进行业务处理。
struts2提供了action接口,根据业务需求开发不同的action,比如:注册用户Action
(3)提供Result接口,支持多视图技术
Result将结果响应给用户。
3.Struts2处理请求的全过程是什么?
1.当客户端浏览器向服务器端发送请求,会被Struts2的核心前端控制器(一个过滤器)所拦截,然后根据struts2.xml配置文件中的内容来决定调用哪个前端控制器action;
2.前端控制器action接收到请求后,会根据请求的method方法名调用函数进行处理;
3.处理完成后,会返回一个逻辑视图名,然后根据struts2.xml中配置的action的result来决定要跳转到哪个前端页面。
4.属性驱动
属性驱动是struts2提供的一种参数绑定机制,如果按照struts指定的开发规则,自动请求的参数设置(赋值)到struts的action类的属性中。
属性驱动开发规则:
1.确定请求参数的名称。
2.在action类中添加属性,属性名和参数名称一致,并且添加 get/set方法。
属性驱动支持不同action类属性类型:包括基本数据类型、list、map、数组、pojo。
重点掌握:1.基本类型 2.pojo 3.数组 4.list
5.模型驱动
问题描述:
使用属性驱动,如果业务方法比较多,添加很多属性及get/set方法,不方便对业务方法进行维护。
解决方案:
将action中接收参数属性及get/set方法单独放到其它pojo中,action只剩下业务方法。可以使用struts2提供模型驱动方法开发action。
Ognl和值栈是实现模型驱动的基础原理。
OGNL是Xwork框架提供的功能,Xwork是struts2基础架构,Xwork是一个ioc容器。
OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目,struts2使用ognl,作为表达式语言。
使用OGNL可以方便向对象中设置属性值,从对象中获取属性值。
模型驱动:
模型驱动是将请求参数绑定到专门的模型对象中,Action实现ModelDriven接口并指定模型对象类型,模型对象类型即为pojo。
6.拦截器
struts2中通过拦截器实现参数绑定、参数校验、类型转换,拦截器就是在action的执行之前或之后进行拦截执行一些代码,就是对action代码的增强。
拦截器的特点:
1.如果使用拦截器可以很方便访问值栈中的数据;
2.filter过滤器,可以拦截所有的请求;而struts2的拦截器只能拦截用户的请求,即action请求。