Struts 2是一个MVC框架,以WebWork框架的设计思想为核心,吸收了Struts 1的部分优点,同时做了相当的改进。
1.什么是MVC?
model:包括实体类(entity)、数据访问层(dao)、业务逻辑层(service)
view: 界面显示层 一般为 JSP、HTML等。
controller: 控制层。包括servlet 、action等。
2.struts2中编写action的方式。
1)不继承任何类也不实现任何接口;
2)实现Action接口;
3)继承ActionSupport类(常用)。
3.请简单描述struts2的访问过程。
1)通过访问页面或者点击按钮、超链接等途径发送请求;
2)web.xml中的过滤器StrutsPrepareAndExecuteFilter进行过滤;
3)在struts2.xml中的相应的package中找到相对应的action,通过反射机制寻找该action对应的实现类,调用相应的方法;
4)根据方法的返回值在struts.xml中的该action节点下的result节点中匹配相应的name属性,并跳转到相应的页面。
下面附详细图解:
4. struts.xml中基本的配置介绍。
在struts.xml中有三个重要的配置:package、action、result。
1)package:类似于代码中的包的概念,要配置action,要先配置package。
属性介绍:name:该属性的值与功能没有任何关系,只是用来区分不同包下的action,在一个文件中可以写多个action,但name属性的值不能相同;
extends:值为:struts-default ;
namespace:该属性值与action里面的name属性值构成了该action的访问路径。
2)action:配置action的访问路径。
属性介绍:name:该属性值与package里面的namespace属性值构成了该action的访问路径。
class:该属性值为该action所对应的实现类;
method: 该属性值为该action需要调用的方法,默认执行action中的excute()方法。
3)result:配置返回时要跳转的页面。
属性介绍: name:表示action可能的返回值,一般的有success,error,input, login,none 等;在该属性的内部可以配置要跳转的页面;
type :默认为dispatcher,表示请求转发;也可设置为redirect,表示页面重定向(可以参考大神博客:https://www.cnblogs.com/LuckyBao/p/6010832.html)。
5. action中如何获取到request对象?
1)使用ActionContext类获取:ActionContext.getContext()
2)使用ServletActionContext类:ServletActionContext.getRequest();
该类还可以获取到response对象:ServletActionContext.getResponse();
3)使用接口注入方式:实现ServletRequestAware接口,重写setServletRequest方法(一般不用);
注意:Action中的全局变量(有set方法)都可以在转发的页面获取到,可以认为是存在request范围内。
6.action中获取session的两种方法。
1) Map<String, Object> session = ActionContext.getContext().getSession();
2) HttpSession session = ServletActionContext.getRequest().getSession();
7.action中获取表单数据的方法。
1)通过传统的request.getParameter() 方法;
2)在action中给每一个表单定义一个全局变量;--属性封装
3)表达式封装 :
a. 表单的name属性要加上对象名,如:user.username;
b. 在action中定义一个对象,并重写setter和getter方法;
4)模型驱动封装:表单的name属性与实体类的对象的属性名一致
a.实现ModelDriven<T>接口;
b.定义一个模型对象 T obj=new T();
c.重写接口中的getModel() 方法,return obj;
8.表达式封装和模型驱动封装的比较:
相同点:都可以把表单数据封装到对应的实体对象中;
不同点:1)使用模型驱动只能把一个表单中的数据封装到一个对象中去,在一个action中不能使用模型驱动把数据封装到不同的实体类对象中去;
2)使用表达式封装可以把数据封装到不同的实体类中。