ognl表达式编写-Struts2框架(二):封装方法&其他介绍&注入方式详解

2022-12-29 13:28:25 浏览数 (2)

框架(一):入门xml配置及action编写

   框架(三):OGNL表达式与值栈

   框架(四):控制器&其他OGNL标签&拦截器

   待更新

  文章目录

  1、第一章内容回顾

   的框架的概述

   什么是

   是一个基于MVC设计模式的web层的框架。

   常见的web层框架

   Web层框架

   基于前端控制器模型

   的入门程序

   下载的开发包

   解压开发环境

   创建web项目,引入jar包

   struts/apps/struts-blank.war/WEB-INF/lib/*.jar

   编写JSP页面

   编写Action类

   配置Action类

   配置核心过滤器

   的执行流程

   请求->核心过滤器()->执行一组拦截器(完成部分的功能)->Action->Result.

   的常见配置

   配置文件的加载顺序

   后配置的配置文件中的常量的值会覆盖先配置的配置文件的常量的值。

   Action的配置

   配置

   name :包名

   :继承

   :名称空间,与action中name共同决定访问路径

   :用于其他包的继承

   action的配置

   name :与共同决定访问路径

   class :Action类的全路径

   method :执行Action中的某个方法,默认值。

   配置(.)

   设置的常量

   配置

   分模块开发的使用

   的Action的访问

   Action的编写

   Action是POJO类

   Action实现Action接口

   Action继承类

   Action的访问

   通过method属性配置

   通过通配符的方式配置

   动态方法访问的方式

  2、访问的API的方式 方式一:完成解耦合的方式

  概述

  在使用的框架的过程中,发现和的API是解耦合的。在实际开发中,经常使用到的API,比如进行登录,将用户的信息保存到中,有的时候需要向页面输出一些内容,用到对象。涉及到的API的访问。

  编写JSP

代码语言:javascript复制
            账号:
            密码:

  编写Action

   public class ActionDemo1 extends ActionSupport{

代码语言:javascript复制
        public String login(){
            ActionContext context = ActionContext.getContext();
            Map parameters = context.getParameters();
            for (String key : parameters.keySet()) {
                Object[] values = (Object[]) parameters.get(key);
                System.out.println("key=" key "===" "values=" "===" Arrays.toString(values));
                context.put("commonInfo", Arrays.toString(values) "by common");
                context.getSession().put("sessionInfo", Arrays.toString(values) "by session");
                context.getApplication().put("applicationInfo", Arrays.toString(values) "by application");
            }
            return "loginSuccess";
        }
    }

  编写页面

代码语言:javascript复制
        成功跳转!
        ${commonInfo }
        ${sessionInfo }
        ${applicationInfo }

  注意:

  1、这种方式只能获得代表、、的数据的Map集合,不能操作这些对象的本身的方法。

  2、注意filter的配置!!!

  方式二:使用原生的方式(*)

  编写JSP

  编写Action

  注意:

  1、这种方式可以操作域对象的数据,同时也可以获得对象的方法。

  2、这种方式不仅能使用的方法多,而且贴近之前编写的习惯

  方式三:接口注入的方式

  编写JSP

  编写Action

  注意:

  1、是单例的,多个程序访问同一个只会创建一个的实例。Action是多例的,一次请求ognl表达式编写,创建一个Action的实例(不会出现线程安全的问题)。

  2、这种方式每次要使用一个对象都要重写一个方法,而且还要额外实现一个接口,比较麻烦

  3、的结果页面的配置

  结果页面的配置包括:全局结果页面、局部结果页面

  全局结果页面

   全局结果页面:全局结果页面指的是,在包中配置一次,其他的在这个包中的所有的action只要返回了这个值,都可以跳转到这个页面。

   针对这个包下的所有的action的配置都有效。

  局部结果页面

   局部结果页面:局部结果页面指的是,只能在当前的action中的配置有效。

   针对当前的action有效。

  result标签的配置

   result标签用于配置页面的跳转。在result标签上有两个属性:

   name属性 :逻辑视图的名称。默认值:

   type属性 :页面跳转的类型。

   :默认值,请求转发。(Action转发JSP)

   :重定向。(Action重定向JSP)

   chain :转发。(Action转发Action)

   :重定向。(Action重定向Action)

   stream :中提供文件下载的功能。

  4、的数据封装方式 方式一:属性驱动-提供set方法的方式(不常用)

  框架是一个web层框架,web层框架(框架:软件的半成品,完成一部分功能)。提供了数据封装的功能。

  编写页面

  编写Action

  方式二:属性驱动-页面提供表达式方式

  编写JSP

  编写Action

  注意

  1、页面提供表达式的方式来封装数据很简单,就是在页面的name多了个前缀 对象名.属性,使用的是OGNL表达式

  2、Action类中一定要提供get和set方法,因为Struts底层就是有拦截器来实现数据封装,封装的前提是要获取到这个对象,如果不提供get方法,那么底层每次都要创建一个对象,并附上一个属性值,到最后就创建了n个对象,这样的话输出这个对象也只有一个属性值

  方式三:模型驱动-采用模型驱动的方式

  编写JSP

  编写Action

  注意

   模型驱动方式最常用的方式:

   缺点:只能同时向一个对象中封装数据。

   使用第二种可以向多个对象中同时封装数据

   属性驱动使用的拦截器是Paramsognl表达式编写,模型驱动使用的是

  5、的INPUT逻辑视图的配置

  关于INPUT逻辑视图

   Action接口中提供了五个逻辑视图的名称:

  

   ERROR

   LOGIN

   INPUT :input在某些拦截器中会使用。

   NONE

  INPUT的配置

  在.xml的中:/regist.jsp

  在JSP中:添加标签库,。并在下方添加错误信息提示,

  6、的复杂类型的数据封装 封装到List集合中

  编写JSP

  编写Action

  注意:

  1、在进行数据封装的时候,底层使用的实例化对象没有用到重写构造方法,使用的是默认的

  2、get、set方法,其后第一个字母必须大写,否则无法初始化

  封装到Map集合中

  编写JSP

  编写Action

  7、CRM综合练习:保存客户代码实现

  保存操作流程

   点击左侧的菜单页面页面:

   跳转到添加页面(经过Action):

   在添加页面中输入指定的信息,点击【保存】

   将数据提交到ActionDAO

   最终回到列表页面

  第一步:修改菜单页面上链接

代码语言:javascript复制
        - 新增客户

  第二步:编写Action中的saveUI的方法

   public String saveUI(){

代码语言:javascript复制
        return "saveUI";
    }

  第三步:配置页面跳转

  第四步:修改添加页面

  第五步:完成保存操作

   编写Action

   编写

   @Override

代码语言:javascript复制
    public void save(Customer customer) {
        dao.save(customer);
    }

   编写Dao

   @Override

代码语言:javascript复制
    public void save(Customer customer) {
        Session session = HibernateUtils.getCurrentSession();
        Transaction transaction = session.beginTransaction();
        System.out.println(customer);
        session.save(customer);
        transaction.commit();
    }

  第六步:配置页面的跳转

本文共 1470 个字数,平均阅读时长 ≈ 4分钟

0 人点赞