Action 类
1. action VS Action 类
1). action: 代表一个 Struts2 的请求.
2). Action 类: 能够处理 Struts2 请求的类.
> 属性的名字必须遵守与 JavaBeans 属性名相同的命名规则.
属性的类型可以是任意类型. 从字符串到非字符串(基本数据库类型)之间的数据转换可以自动发生
> 必须有一个不带参的构造器: 通过反射创建实例
> 至少有一个供 struts 在执行这个 action 时调用的方法
> 同一个 Action 类可以包含多个 action 方法.
> Struts2 会为每一个 HTTP 请求创建一个新的 Action 实例, 即 Action 不是单例的, 是线程安全的.
关于 Struts2 请求的扩展名问题
1). org.apache.struts2 包下的 default.properties 中配置了 Struts2 应用个的一些常量
2). struts.action.extension 定义了当前 Struts2 应用可以接受的请求的扩展名.
3). 可以在 struts.xml 文件中以常量配置的方式修改 default.properties 所配置的常量.
在 Action 中访问 WEB 资源
1). 什么是 WEB 资源 ?
HttpServletRequest, HttpSession, ServletContext 等原生的 Servlet API。
2). 为什么访问 WEB 资源?
B\S 的应用的 Controller 中必然需要访问 WEB 资源: 向域对象中读写属性, 读写 Cookie, 获取 realPath ....
3). 如何访问 ?
I. 和 Servlet API 解耦的方式: 只能访问有限的 Servlet API 对象, 且只能访问其有限的方法(读取请求参数, 读写域对象的属性, 使 session 失效...).
> 使用 ActionContext> 实现 XxxAware 接口
> 选用的建议: 若一个 Action 类中有多个 action 方法, 且多个方法都需要使用域对象的 Map 或 parameters, 则建议使用Aware 接口的方式
> session 对应的 Map 实际上是 SessionMap 类型的! 强转后若调用其 invalidate() 方法, 可以使其 session 失效!
II. 和 Servlet API 耦合的方式: 可以访问更多的 Servlet API 对象, 且可以调用其原生的方法.
> 使用 ServletActionContext
> 实现 ServletXxxAware 接口.
Struts2的Action对象中使用Map类型request,session,application
1、声明private Maprequest;private Mapsession;private Mapapplication;
2、产生ActionContext实例ActionContext context=ActionContext.getContext();
3、获取request,session和application
Map
Map
Map
4、存值
String info="星期一";
request.put("info",info);
session.put("info",info);
application.put("info",info);
5、JSP页面取值
request范围内的info值:request.getAttribute("info");
session范围内的info值:session.getAttribute("info");
application范围内的info值:application.getAttribute("info");
**获取请求参数
//. 获取请求参数对应的 Map, 并获取指定的参数值.
//键: 请求参数的名字, 值: 请求参数的值对应的字符串数组//注意: 1. getParameters 的返回值为在 Map, 而不是 Map
// 2. parameters 这个 Map 只能读, 不能写入数据, 如果写入, 但不出错, 但也不起作用!
Map
System.out.println(((String[])parameters.get("name"))[0]);
parameters.put("age", 100);
**注销session
if(sessionMap instanceof SessionMap){
SessionMap sm = (SessionMap) sessionMap;
sm.invalidate();
System.out.println("session 失效了. ");
}