1、第5讲:Action获取Web元素,3.3.2通过ActionContext获取 3.3.3通过ServletActionContext获取 3.3.4框架注入,温故,要点回顾 获取Web请求参数的方法 简单类型属性自动填充 复杂类型属性自动填充,即属性驱动 基于模型驱动的请求参数获取,作业中注意的问题: 表单中的文本框名称一定要与定义的javaBean属性相对应 第二种方法和第三种方法的不同之处: 视图中文本框的书写方式 Action类的声明方式 第二种方法只声明数据模型引用变量,有setter/getter方法;而第三种方法除了声明变量外还要用new运算符创建此对象,无setter/get
2、ter方法,但实现了getModel方法。,本讲要点与教学目标,【教学要点】 1、依赖于容器的Map类型Web元素获取 2、依赖于容器的真实类型Web元素获取 3、依赖注入的Map类型Web元素获取 【教学目标】了解request、session、application等Web元素的获取方法,掌握和理解Struts2框架注入的方式获取Web元素的方法。,Action中获取Web元素的方法,1.依赖于容器(ActionContext)获取Map类型的Web元素 2.依赖于容器(ServletActionContext)获取真实类型的Web元素 3.依赖于Struts2框架注入(IoC-控制反转)
3、获取Map类型的Web元素(只用这种方法) 4.依赖于Struts2框架注入(IoC-控制反转)获取真实类型的Web元素(不讲,自学),Action对Web请求的处理中,仅获取Web请求参数是不够的,还需要获取request、session、application等Web元素的信息。Struts2框架中获取Web元素的方法有四种:,通过ActionContext获取Map类型Web元素,【ActionConext】是Action执行的上下文,提供一系列相关方法用于访问保存在HttpRequest、HttpSession、ServletContext中的信息,并将其存储在Map中。 【Actio
4、nConext对象获取】 通过ActionConext类的静态方法getContext() 【ActionConext常用方法】 public Object get(String key):获取ActionConext中指定键名的元素对象 public Map getSession():获取session元素对象 public Map getApplication():获取application元素对象 【Map常用方法】 public void put(String key,Object value):向Map对象中添加一个具有键名标识的元素 public Object get(Object
5、 key):从Map对象中获取指定的元素,通过ActionContext获取Map类型Web元素,【在Action中获取Web元素的方法】1.获取ActionContext对象ActionContext ac= ActionContext.getContext(); 2.通过ActionContext对象获取Map类型的Web元素Map s=ac.getSession();或: Map s=( Map )ac.get (“session“);3.使用Map对象的put/get方法添加/获取属性s.put(“username“,“lucky“); 【JSP中获取Web元素属性方法】 1.通过JS
6、P脚本元素2.通过Struts2框架标签和OGNL表达式,案例1:通过ActionContext获取Web元素,【基本思路】采用模型驱动的方式获取用户登录信息 【基本步骤】 1.创建视图:用户登录页login1.jsp; 2.模型创建:创建数据模型User.java;创建ActionLoginAction1.java 3.创建视图:登录成功页success1.jsp 4.struts.xml配置,【案例说明】 以“用户登录”业务为例,在登录Action中获取Map类型的request、session、application元素,并对其属性进行设置,在JSP视图中输出各元素的属性值。,案例1:通
7、过ActionContext获取Web元素,【用户登录页】,案例1:通过ActionContext获取Web元素,【数据模型User.java】,public class Userprivate String username;private String password;/此处省略getter和setter方法 ,案例1:通过ActionContext获取Web元素,【LoginAction1.java】,案例1:通过ActionContext获取Web元素,案例1:通过ActionContext获取Web元素,【success1.jsp】,案例1:通过ActionContext获取Web
8、元素,【success1.jsp】,案例1:通过ActionContext获取Web元素,【struts.xml配置】,/success1.jsp/login1.jsp,案例1:通过ActionContext获取Web元素,【简单总结】(1)在Action中声明Map类型变量(2)通过ActionContext对象获取指定Web元素(3)通过put()方法为Web元素添加属性,通过get()方法获取Web元素的属性值(4)在JSP中通过Struts2标签获取属性值,格式:,通过ServletActionContext获取Web元素,【问题】 通过ActionContext获取的Web元素是Ma
9、p形式的,这对于习惯了Servlet编程的开发人员可能不太习惯 【解决方法】Struts2框架中可以通过ServletActionContext类 获取 ServletAPI对象 【ServletActionContext的常用方法】 public static HttpServletRequest getRequest():获取请求对象public static ServletContext getServletContext():获取应用程序对象 【思考】如何获取HttpSession的方法?,案例2:真实类型Web元素的获取,【基本思路】1、在Action中使用真实类型的Web元素,即通
10、过ServletActionContext获取HttpServletRequest、HttpSession、ServletContext类型的Web元素。2、在视图中输出Web元素属性的方法不变。 【说明】本案例课件中仅给出Action的定义,其它参考案例1,案例2:真实类型Web元素的获取,【LoginAction2.java】,Session、request、application为真实类型对象,案例2:真实类型Web元素的获取,【LoginAction2.java】,案例2:真实类型Web元素的获取,【LoginAction2.java】【说明】此种方式将Action组件与Servlet
11、容器紧密耦合,不利于整个框架的设计,不推荐使用。,依赖于框架注入获取Map类型Web元素,【相关概念】DI:Dependency Injection依赖注入IoC:Inversion of Control控制反转两个概念表达相同的思想,即:当我们想得到某个对象时,不需要我们主动创建这个对象,或主动去获取这个对象,而是等待系统把这个对象自动交给我们,我们只是被动接受。我们需要的对象我们不去主动创建,而让系统自动填充的,叫依赖注入;本来是我们控制去获取这个对象,结果控制权交给了系统,我们被动接受,叫控制反转。,依赖于框架注入获取Map类型Web元素,【依赖注入的相关接口】Action中通过实现相关
12、接口,Web元素即可由框架自动注入,这组接口以Aware(知道,明白)结尾RequestAware:Map类型的request元素ServletRequestAware:HttpServletRequest类型ServletResponseAware:HttpServletResponse类型SessionAware:Map类型的session元素ApplicationAware:Map类型的application元素CookiesAware:Map类型的Cookie元素,依赖于框架注入获取Map类型Web元素,【依赖注入的Web元素获取方法】1.创建Action时实现Web元素相关接口2.在
13、Action中声明Map类型的私有变量3.在Aware接口的实现方法中为变量赋值,案例3:依赖注入的Map类型Web元素获取,【基本思路】1、创建Action实现RequestAware、SessionAware、ApplicationAware三个接口,声明三个Map类型的私有变量,三个接口的实现方法分别对三个变量赋值,从页获取Web元素。2、在视图中输出Web元素属性的方法不变。 【说明】本案例课件中仅给出Action的定义,其它参考案例1,案例3:依赖注入的Map类型Web元素获取,【LoginAction3.java】,注意下面的三个方法,案例3:依赖注入的Map类型Web元素获取,【LoginAction3.java】,小结,获取Web元素的方法 依赖于ActionContext容器的Map类型Web元素的获取 依赖于ServletActionContext容器的ServletAPI元素获取 依赖于框架注入的Map类型Web元素的获取 在JSP网页中使用Web元素 JSP脚本元素 Struts2标签和OGNL表达式,作业,上机调试本讲案例3,掌握依赖注入的Web元素获取与使用方法,