美文网首页
Struts2第二节

Struts2第二节

作者: 莫要戏言 | 来源:发表于2017-07-31 16:09 被阅读0次

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

    }

    相关文章

      网友评论

          本文标题:Struts2第二节

          本文链接:https://www.haomeiwen.com/subject/oudrlxtx.html