struts2(2)

Action类的三种写法 1. 配置文件学习完成,下面的重点是Action类的三种写法 * Action类就是一个POJO类

  • 什么是POJO类,POJO(Plain Ordinary Java Object)简单的 Java对象.简单记:没有继承某个类,没有实现接口,就是POJO的类。
  • Action类可以实现Action接口 * Action接口中定义了5个常量,5个常量的值对应的是5个逻辑视 图跳转页面(跳转的页面还是需要自己来配置),还定义了一个方法, execute方法。 * 大家需要掌握5个逻辑视图的常量 * SUCCESS – 成功. * INPUT – 用于数据表单校验.如果校验失败,跳转INPUT视 图. * LOGIN – 登录. * ERROR – 错误. * NONE – 页面不转向.
  • Action类可以去继承ActionSupport类(开发中这种方式使用 多) * 设置错误信息 Action的访问 访问同一个action中的不同方法的3中方式 1. 通过标签中的method属性,访问到Action中的具体的方 法。 * 传统的配置方式,配置更清晰更好理解!但是扩展需要修改配置文 件等! * 具体的实例如下: * 页面代码 * 添加 图书
    * 删 除图书
    • 配置文件的代码
    • Action的代码 public String add(){ System.out.println(“添加图书”); return NONE; } public String delete(){ System.out.println(“删除图书”); return NONE; }
  1. 通配符的访问方式:(访问的路径和方法的名称必须要有某种联系.) 通配 符就是 * 代表任意的字符 * 使用通配符的方式可以简化配置文件的代码编写,而且扩展和维护 比较容易。 * 具体实例如下: * 页面代码 添 加订单 删除订单
    * 配置文件代码 *
    * Action的代码 public String add(){ System.out.println(“添加订单”); return NONE; } public String delete(){ System.out.println(“删除订单”); return NONE; }
    • 具体理解:在JSP页面发送请求, http://localhost/struts2_01/order_add.action,配置文件中的order_* 可以匹配该请求,就相当于变成了add,method属性的值使用{1}来代 替,{1}就表示的是第一个号的位置!!所以method的值就等于了 add,那么就找到Action类中的add方法,那么add方法就执行了!
  2. 动态方法访问的方式(有的开发中也会使用这种方式) * 如果想完成动态方法访问的方式,需要开启一个常量, struts.enable.DynamicMethodInvocation = false,把值设置成true。 * 注意:不同的Struts2框架的版本,该常量的值不一定是true或者 false,需要自己来看一下。如果是false,需要自己开启。 * 在struts.xml中开启该常量。 *
    • 具体代码如下 * 页面的代码 * 添加商品 * 删除商品
      • 配置文件代码 *
      • Action的类的代码 public class ProductAction extends ActionSupport{ public String add(){ System.out.println(“添加订单”); return NONE; } public String delete(){ System.out.println(“删除订单”); return NONE; } } 在Struts2框架中使用Servlet的API 1. 在Action类中也可以获取到Servlet一些常用的API * 需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接 收到,然后保存到三个域对象中,后再显示到JSP的页面上。 * 提供JSP注册的页面,演示下面这三种方式

        注册页面

        姓名:

        密码:
  3. 完全解耦合的方式 * 如果使用该种方式,Struts2框架中提供了一个类,ActionContext 类,该类中提供一些方法,通过方法获取Servlet的API * 一些常用的方法如下 * static ActionContext getContext() - 获取ActionContext对象实例 * java.util.Map<java.lang.String,java.lang.Object> getParameters() – 获取请求参数,相当于 request.getParameterMap(); * java.util.Map<java.lang.String,java.lang.Object> getSession() – 获取的代表session域的Map集合,就相当于操 作session域。 * java.util.Map<java.lang.String,java.lang.Object> getApplication() – 获取代表application域的Map集合 * void put(java.lang.String key, java.lang.Object value) – 注意:向request域中存入值。
  4. 使用原生Servlet的API的方式 * Struts2框架提供了一个类,ServletActionContext,该类中提供了 一些静态的方法 * 具体的方法如下 * getPageContext() * getRequest() * getResponse() * getServletContext()

Struts2框架的数据封装 1. 为什么要使用数据的封装呢?
* 作为MVC框架,必须要负责解析HTTP请求 参数,并将其封装到Model对象中 * 封装数据为开发提供了很多方便 * Struts2框架提供了很强大的数据封装的功 能,不再需要使用Servlet的API完成手动封装 了!!
2. Struts2中提供了两类数据封装的方式? * 第一种方式:属性驱动 > 提供对应属性的set方法进行数据的封 装。 * 表单的哪些属性需要封装数据,那么在 对应的Action类中提供该属性的set方法即可。 * 表单中的数据提交,最终找到Action类 中的setXxx的方法,最后赋值给全局变量。
* 注意0:Struts2的框架采用的拦截器完 成数据的封装。 * 注意1:这种方式不是特别好:因为属性 特别多,提供特别多的set方法,而且还需要手动将
数据存入到对象中. * 注意2:这种情况下,Action类就相当 于一个JavaBean,就没有体现出MVC的思想, Action类又封装数据,又接收请求处理,耦合性 较高。
> 在页面上,使用OGNL表达式进行数据封 装。 * 在页面中使用OGNL表达式进行数据的 封装,就可以直接把属性封装到某一个JavaBean 的对象中。 * 在页面中定义一个JavaBean,并且提 供set方法:例如:private User user; * 页面中的编写发生了变化,需要使用 OGNL的方式,表单中的写法:
* 注意:只提供一个set方法还不够,必 须还需要提供user属性的get和set方法!!! > 先调用get方法,判断一下是否有 user对象的实例对象,如果没有,调用set方法把 拦截器创建的对象注入进来,
* 第二种方式:模型驱动 > 使用模型驱动的方式,也可以把表单中的 数据直接封装到一个JavaBean的对象中,并且表 单的写法和之前的写法没有区别! > 编写的页面不需要任何变化,正常编写 name属性的值 > 模型驱动的编写步骤: * 手动实例化JavaBean,即:private User user = new User(); * 必须实现ModelDriven接口,实现 getModel()的方法,在getModel()方法中返回 user即可!! 技术分析之Struts2把数据封装到集合中《扩 展》 1. 封装复杂类型的参数(集合类型 Collection 、 Map接口等) 2. 需求:页面中有可能想批量添加一些数据,那 么现在就可以使用上述的技术了。把数据封装到 集合中 3. 把数据封装到Collection中 * 因为Collection接口都会有下标值,所有页
面的写法会有一些区别,注意: > * 在Action中的写法,需要提供products的集 合,并且提供get和set方法。
4. 把数据封装到Map中 * Map集合是键值对的形式,页面的写法 > * Action中提供map集合,并且提供get和set 方法

猜你喜欢

转载自blog.csdn.net/qq_40977337/article/details/89639809