struts2学习笔记(黑马程序员)

Struts基本配置

  1. Package标签 name:不同package命名不同 extends:使其具有action功能  namespace:action标签name值构成访问路径 例如:/hello

struts2学习笔记(黑马程序员)

  1. action标签:name:package中的namespace构成访问路径;class:类的全路径;method:访问的类的方法名

struts2学习笔记(黑马程序员)

  1. result标签:name:和类的返回值进行匹配,并跳转到对应的页面;type:页面跳转方式转发和重定向,默认转发

struts2学习笔记(黑马程序员)

模块化开发:建立多个xml文件进行一定的配置,然后在struts.xml文件中引入

struts2学习笔记(黑马程序员)

Java类3中创建方式

  1. 普通的POJO类,不继承父类不实现接口
  2. 实现Action接口

struts2学习笔记(黑马程序员)

  1. 继承ActionSupport方法(最常用)该方法源码其实是实现Action接口的

struts2学习笔记(黑马程序员)

访问action的3种方法

  1. 通过method属性访问

Action中创建多个方法

struts2学习笔记(黑马程序员)

  1. 通配符

struts2学习笔记(黑马程序员)

  1. 动态访问

结果页面配置

1)全局结果页面:

global-results标签中配置全局结果页面,例如访问http://localhost:8080/ex1/order.action       页面会跳转到hello.jsp页面

struts2学习笔记(黑马程序员)

2)局部结果页面:

如果既配置的全局页面也配置局部的页面,则访问局部的页面,当局部页面没有配置时则访问全局的页面

   struts2学习笔记(黑马程序员)

Result标签中的type属性

针对页面中配置:

  1. 默认转发操作,值是dispatcher(访问的路径不变,访问的页面的改变)

struts2学习笔记(黑马程序员)

struts2学习笔记(黑马程序员)

  1. 重定向操作,值是redirect(访问的路径变成被访问的页面路径)

struts2学习笔记(黑马程序员)

struts2学习笔记(黑马程序员)

针对action的配置:

Chain:转发到action,一般不用,有缓存问题

struts2学习笔记(黑马程序员)

redirectAction:重定向action

struts2学习笔记(黑马程序员)

struts2学习笔记(黑马程序员)

Action获取表单提交数据(3种方式)

使用ActionContext类获取

Map<String Object> get Parameters()   返回一个包含所有HttpServletRequest参数

因为方法不是静态方法,所以要创建ActionContext类的对象,这个ActionContext对象不是new出来的,

Static ActionContext getContext()  获取当前线程的ActionContext对象

实例:

  1. 创建表单,提交表单到action里面
  2. 在action中使用

struts2学习笔记(黑马程序员)

使用ServletActionContext获取request对象(完全解耦合的方法,不用request对象就可以获得)

 

ServletActionContext

调用request里面的方法结果

调用类里面的静态方法

struts2学习笔记(黑马程序员)

使用接口注入(不经常用)

让action实现ServletRequestAware接口        

struts2学习笔记(黑马程序员)

操作域对象

Request(常用)、session(经常用于登录)、servletContext(不常用)域对象

struts2学习笔记(黑马程序员)

Struts2封装获取表单数据方式

原始方式获取表单封装到实体类对象

创建一个POJO

struts2学习笔记(黑马程序员)

在action类中通过ServletActionContext 获取表单数据,并将获取的数据封装到实体类中

struts2学习笔记(黑马程序员)

属性封装

直接把表单提交的数据封装到action的属性里面

实现步骤:

  1. 在action成员变量位置定义变量

首先通过getRequest方法获取到表单的值,action中的变量名称和表单输入项的名称进行比对,如果一样的话就就调用set方法将表单获取的数据放进变量中

struts2学习笔记(黑马程序员)

注:使用属性封装获取表单数据到属性里面去,不能把数据直接封装到实体类对象里面

模型驱动封装(重点)

使用模型驱动的方式可以直接把表单的数据直接封装到实体类对象中,较方便

实现步骤:

  1. action实现接口ModelDriven(user为实体类)

struts2学习笔记(黑马程序员)

  1. 实现接口里面的方法getModel
  2. 在action中创建实体类对象

struts2学习笔记(黑马程序员)

注:

1.前提要求,表单输入项name属性值要跟实体类的属性名称一样

struts2学习笔记(黑马程序员)

struts2学习笔记(黑马程序员)

2.在同一个action中,不能同时使用属性封装和模型驱动封装获取同一个表单数据,如果都用的话只会执行模型驱动封装,属性封装获取不到数据(null)

表达式封装(会用)

实现过程:

使用表达式封装可以把表单数据封装到实体类对象里面

第一步,action中声明实体类

struts2学习笔记(黑马程序员)

第二步,生成实体类变量的get set方法

struts2学习笔记(黑马程序员)

第三步,在表单输入项的name属性值里面写表达式形式

struts2学习笔记(黑马程序员)

User.username中的user目的是到action里面找到getUser方法得到对象,user.username会调用user中的set方法把值写进去

模型驱动封装和表达式封装比较

相同点:都将可以把数据封装到实体类对象中

不同点:

1)模型驱动封装ModelDriven只能封装一个实体类对象;

struts2学习笔记(黑马程序员)

表达式封装可以封装多个实体类对象

struts2学习笔记(黑马程序员)

struts2学习笔记(黑马程序员)

获取数据封装到集合中(会用)

封装到list集合

第一步,在action中声明List

struts2学习笔记(黑马程序员)

第二步,生成List的get set方法

struts2学习笔记(黑马程序员)

第三步,在表单输入项里面写表达式

struts2学习笔记(黑马程序员)

list结果集

struts2学习笔记(黑马程序员)

封装到map集合

第一步,在action中声明map

struts2学习笔记(黑马程序员)

第二步,生成map的get set方法

struts2学习笔记(黑马程序员)

第三步,在表单输入项里面写表达式

struts2学习笔记(黑马程序员)

结果输出:

struts2学习笔记(黑马程序员)