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

Map<String,Object>   session=context.getSession();

Map<String,Object>   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<String,Object>  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 失效了. ");

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • action中如何接受页面传过来的参数 第一种情况:(同名参数) 例如:通过页面要把id=1 name=tom a...
    清枫_小天阅读 3,002评论 1 22
  • 概述 什么是Struts2的框架Struts2是Struts1的下一代产品,是在 struts1和WebWork的...
    inke阅读 2,276评论 0 50
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,904评论 18 139
  • 1、struts2工作流程 Struts 2框架本身大致可以分为3个部分: 核心控制器FilterDispatch...
    重山杨阅读 1,544评论 0 38
  • 标签 如果要配置的标签,那么必须要先配置标签,代表的包的概念。 包含的属性 name包的名称,要求是唯一的,管理a...
    偷偷得路过阅读 1,395评论 0 0