struts2学习笔记(黑马程序员)
Struts基本配置
- Package标签 name:不同package命名不同 extends:使其具有action功能 namespace:和action标签name值构成访问路径 例如:/hello
- action标签:name:和package中的namespace构成访问路径;class:类的全路径;method:访问的类的方法名
- result标签:name:和类的返回值进行匹配,并跳转到对应的页面;type:页面跳转方式转发和重定向,默认转发
模块化开发:建立多个xml文件进行一定的配置,然后在struts.xml文件中引入
Java类3中创建方式
- 普通的POJO类,不继承父类不实现接口
- 实现Action接口
- 继承ActionSupport方法(最常用)该方法源码其实是实现Action接口的
访问action的3种方法
- 通过method属性访问
Action中创建多个方法
- 通配符
- 动态访问
结果页面配置
1)全局结果页面:
global-results标签中配置全局结果页面,例如访问http://localhost:8080/ex1/order.action 页面会跳转到hello.jsp页面
2)局部结果页面:
如果既配置的全局页面也配置局部的页面,则访问局部的页面,当局部页面没有配置时则访问全局的页面
Result标签中的type属性
针对页面中配置:
- 默认转发操作,值是dispatcher(访问的路径不变,访问的页面的改变)
- 重定向操作,值是redirect(访问的路径变成被访问的页面路径)
针对action的配置:
Chain:转发到action,一般不用,有缓存问题
redirectAction:重定向action
Action获取表单提交数据(3种方式)
使用ActionContext类获取
Map<String Object> get Parameters() 返回一个包含所有HttpServletRequest参数
因为方法不是静态方法,所以要创建ActionContext类的对象,这个ActionContext对象不是new出来的,
Static ActionContext getContext() 获取当前线程的ActionContext对象
实例:
- 创建表单,提交表单到action里面
- 在action中使用
使用ServletActionContext获取request对象(完全解耦合的方法,不用request对象就可以获得)
ServletActionContext
调用request里面的方法结果
调用类里面的静态方法
使用接口注入(不经常用)
让action实现ServletRequestAware接口
操作域对象
Request(常用)、session(经常用于登录)、servletContext(不常用)域对象
Struts2封装获取表单数据方式
原始方式获取表单封装到实体类对象
创建一个POJO
在action类中通过ServletActionContext 获取表单数据,并将获取的数据封装到实体类中
属性封装
直接把表单提交的数据封装到action的属性里面
实现步骤:
- 在action成员变量位置定义变量
首先通过getRequest方法获取到表单的值,action中的变量名称和表单输入项的名称进行比对,如果一样的话就就调用set方法将表单获取的数据放进变量中
注:使用属性封装获取表单数据到属性里面去,不能把数据直接封装到实体类对象里面
模型驱动封装(重点)
使用模型驱动的方式可以直接把表单的数据直接封装到实体类对象中,较方便
实现步骤:
- action实现接口ModelDriven(user为实体类)
- 实现接口里面的方法getModel
- 在action中创建实体类对象
注:
1.前提要求,表单输入项name属性值要跟实体类的属性名称一样
2.在同一个action中,不能同时使用属性封装和模型驱动封装获取同一个表单数据,如果都用的话只会执行模型驱动封装,属性封装获取不到数据(null)
表达式封装(会用)
实现过程:
使用表达式封装可以把表单数据封装到实体类对象里面
第一步,action中声明实体类
第二步,生成实体类变量的get set方法
第三步,在表单输入项的name属性值里面写表达式形式
User.username中的user目的是到action里面找到getUser方法得到对象,user.username会调用user中的set方法把值写进去
模型驱动封装和表达式封装比较
相同点:都将可以把数据封装到实体类对象中
不同点:
1)模型驱动封装ModelDriven中只能封装一个实体类对象;
表达式封装可以封装多个实体类对象
获取数据封装到集合中(会用)
封装到list集合
第一步,在action中声明List
第二步,生成List的get set方法
第三步,在表单输入项里面写表达式
list结果集
封装到map集合
第一步,在action中声明map
第二步,生成map的get set方法
第三步,在表单输入项里面写表达式
结果输出: