【学习笔记】JavaWeb框架篇--Struts2第一天

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)使用表达式封装可以把数据封装到不同的实体类中

猜你喜欢

转载自www.cnblogs.com/duosl/p/9304329.html