Struts2第二节

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  request=(Map) context.get("request");

Map   session=context.getSession();

Map   application=context.getApplication();

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  parameters = actionContext.getParameters();

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 失效了. ");

}

你可能感兴趣的:(Struts2第二节)