- 3
- 0
- 约 27页
- 2017-01-01 发布于重庆
- 举报
第6讲:Action处理多个请求 3.4.1动态方法调用 3.4.2定义逻辑Action 3.4.3在配置文件中使用通配符 温故 要点回顾 获取Web元素的方法 依赖于ActionContext容器的Map类型Web元素的获取 依赖于框架注入的Map类型Web元素的获取 在JSP网页中使用Web元素 JSP脚本元素 Struts2标签和OGNL表达式 本讲要点与教学目标 让Action处理多个请求 动态方法调用(DMI) 【1、Action定义】 在Action中可以不用execute()方法处理业务,而使用自定义方法,其格式如下: public String methodName() throws Exception{ ...... } 说明:methodName是任意合法的方法名,在一个Action中可以定义多个这样的方法,以处理不同的业务 动态方法调用(DMI) 【2、Action请求】 动态方法调用(DMI) 案例1:Action处理多个请求(登录/注册) 【案例要求】 使用同一个Action完成用户登录和用户注册业务 【基本思路】 Action组里创建login方法,返回值分别为“login_ok”和“login_input” Action组里创建reg方法,返回值分别为“reg_ok”和“reg_input” 案例1:Action处理多个请求(登录/注册) 1、定义数据模型User,用于获取请求参数(略) 2、定义UserAction,实现ModelDriven、SessionAware接口(登录成功时把用户信息写到session中) 案例1:Action处理多个请求(登录/注册) 案例1:Action处理多个请求(登录/注册) 用户登录login.jsp 案例1:Action处理多个请求(登录/注册) 用户注册regist.jsp 案例1:Action处理多个请求(登录/注册) 登录成功log_succ.jsp 案例1:Action处理多个请求(登录/注册) 注册成功reg_succ.jsp 案例1:Action处理多个请求(登录/注册) struts.xml配置 定义逻辑Action 【问题】虽然多个请求可以共用同一个Action类,但 1、在请求Action的指定方法时必须使用actionName!methodName的形式,个性化的东西往往给人带来麻烦,我们追求的“通用性” 2、对于不同业务方法返回的字符串不能相同,如“log_succ”、“reg_succ” 【解决方案】定义逻辑Action,即针对一个Action类的每一个业务方法在struts.xml定义一个独立的Action,由于配置文件的这种Action定义不对应一个独立的Action类,因此称为逻辑定义。 定义逻辑Action 【如何定义逻辑Action?】 1、每个方法业务方法对应于struts.xml中一个action定义项 2、action定义时设置method属性,其值为Action类中对应的业务方法名 案例2:逻辑Action定义 1、仅修改上一个案例的struts.xml文件 案例2:逻辑Action定义 2、修改login.jsp和regist.jsp中的请求方式 案例2:逻辑Action定义 【说明】 如果使用逻辑Action定义,在Action类的不同业务方法中可以返回相同的值。 案例2:逻辑Action定义 配置文件可对应修改如下 : 在配置文件中使用通配符 【问题】 如果针对一个Action类定义多个逻辑Action,会使配置文件看起来很臃肿 【解决方法】 Struts2框架的配置文件中支持通配符的使用。 【使用通配符】 在action的name属性中使用*作通配符,它可以匹配任意一个字符串,在action元素的result元素中都可以使用{n}与其呼应,其中n是表示匹配name中第几个*的一个整数 如果有一个请求匹配了“*”,则其后的{n}将被自动替换成相同的内容。 案例3:使用通配符 1、为了使用通配符,将上例中reg_succ.jsp的文件名改为regist_succ.jsp,将log_succ.jsp文件名改为login_succ.jsp 2、Action配置进行如下修改: 3、测试运行 案例3:使用通配符 通配符的匹配过程分析 1、请求action 2、首先在配置文件中找全名匹配的action 3、如果未找到,则顺序查找包含“*”的action进行匹配 4、如果找到匹配的action,则将其后配置中的{n}用匹配的字符串进行自动替换。 案例3:使用通配符 【团队开发中“约定优于配置”原则】 约定项目名、Ac
原创力文档

文档评论(0)