1、Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图数据进行交互。
2、WEB层框架都是基于前端控制器的模式:传统的开发方式是,有一次请求就会对应一个Servlet,这样会导致出现很多Servlet。而Struts2将所有的请求都先经过一个前端控制器,在前端控制器中实现框架的部分功能,剩下的再提交到具体的Action中。而Struts2中的前端控制器是由过滤器来实现的。前端核心过滤器是:StrutsPrepareAndExecuteFilter,这个过滤器有两个功能:预处理和执行。在预处理中主要就是加载配置文件的,对应的是过滤器中的init方法。而执行是用来执行一组拦截器完成的部分功能,对应的是过滤器中的doFilter方法。
3、使用Struts2都是从页面发起请求到服务器,再由服务器处理请求响应到页面的过程。
4、Struts2的执行流程:从客户端发送请求过来,先经过前端控制器(核心过滤器:StrutsPrepareAndExecuteFilter)过滤器中执行一组拦截器,完成部分功能代码。拦截器完成以后,就会执行目标Action,在Action中返回一个结果视图,根据Struts.xml中配置的Result进行页面跳转。
6、Action的三种编写方式
(1)Action是一个POJO类
(2)Action实现一个Action接口
(3)Action继承ActionSupport类(常用)
7、Action的访问方式
(1)通过配置method属性
(2)通配符的配置(常用)
(3)动态访问方法
8、Struts2中访问Servlet API的三种方式
(1)通过ActionContext类访问
ActionContext context = ActionContext.getContext();
context.put("name","zju");
context.getAppication().put("name","zju");
context.getSession().put("name","zju");
(2)通过特定的接口访问
ServletRequestAware、ServletResponseAware、SessionAware、ServletContextAware
(3)通过ServletActionContext访问
Struts2框架提供了ServletActionContext类,该类包含了几个常用的静态方法:
1)static HttpServletRequest getRequest():获取Web应用的HttpServletRequest对象
2)static HttpServletResponse getResponse():获取Web应用的HttpServletResponse对象
3)static ServletContext getServletContext():获取Web应用的ServletContext对象
4)static PageContext getPageContext():获取Web应用的PageContext对象
总结:2和3中的的Action都和Servlet的API耦合,不利于程序解耦,所以优先考虑使用ActionContext。
Struts2是通过访问Servletd的API接收前端页面传过来的数据,接收过来的数据封装到一个JavaBean中,然后将JavaBean传到业务层。
9、Struts2数据的封装分为两大类
(1)属性驱动
<1>只需要提供属性的set方法
<2>通过表达式直接封装到对象中
一般以JavaBean来实现,所封装的属性和表单的属性一 一对应,JavaBean将成为数据传递的载体。
(2)模型驱动
通过实现ModelDriven接口来实现接收请求参数,Action类必须实现ModelDriven接口,并且重写getModel()方法,这个方法返回的就是Action所使用的数据模型对象。
模型驱动方式采用JavaBean模型来传递数据,JavaBean的属性和表单的属性一 一对应,JavaBean将成为数据传递的载体。
10、Struts2中封装集合类型的数据
在实际的开发中,有些时候我们需要批量插入用户或者批量插入其他对象,在Action中需要接收这多个Action中封装的对象,然后传递给业务层。那么这个时候就需要将前端表单数据封装到集合中。我们经常用List和Map这两个集合。
11、OGNL表达式