
Java框架技术第6章 业务组件ActionServlet和Action.ppt
21页第第6 6章章业务组件业务组件ActionServletActionServlet和和ActionAction本课教学内容w6.1 核心控制器ActionServletw6.2 RequestProcessor类w6.3 Action类w6.4 Struts1框架内置的常用Action类6.1 核心控制器ActionServletwActionServlet简介ü ActionServlet的主要功能是:的主要功能是:接收用户的请求;根据用户的不同请求,调用相应的Action进行业务逻辑处理;从模型层(如果需要)获得处理后的数据并传给相应的视图层;选择合适的视图进行响应,并显示给用户ü所有基于所有基于Struts1框架的用户请求首先都提交给核心控制框架的用户请求首先都提交给核心控制器器ActionServlet来进行处理,然后再由它分配之后的工来进行处理,然后再由它分配之后的工作6.1 核心控制器ActionServletwinit()方法ü 当当Web服务器加载服务器加载ActionServlet类后就立即执行它的类后就立即执行它的init()方法进行初始化,做好接收并处理用户请求的准备方法进行初始化,做好接收并处理用户请求的准备。
üStruts1框架的版本不同,框架的版本不同,ActionServlet类中的类中的init()方方法完成初始化的工作也可能不同,这里给出的是法完成初始化的工作也可能不同,这里给出的是Struts1.2版本中的版本中的init()方法的初始化流程方法的初始化流程6.1 核心控制器ActionServletwinit()方法ü初始化流程如下:初始化流程如下:(1)调用initInternal()方法,用于初始化Struts1框架内在的消息资源(2)调用initOther()方法,根据web.xml文件加载ActionServlet的初始化参数(3)调用initServlet()方法,根据web.xml文件加载ActionServlet的URL映射信息并注册DTD文件下面是根据需要进行模块初始化(Initialize modules as needed)(4)调用initModuleConfig()方法,加载并解析默认子应用模块的Struts1框架的配置文件,并创建ModuleConfig对象6.1 核心控制器ActionServletwinit()方法ü初始化流程如下:初始化流程如下:(5)调用initModuleMessageResource()方法,加载并初始化默认子应用模块的消息资源,并创建MessageResources对象。
(6)调用initModuleDataSource()方法,根据Struts1框架配置文件中定义的
就可以了ü举例举例6.2 RequestProcessor类wRequestProcessor简介üRequestProcessor类是在类是在Struts1.1及以后的版本中出及以后的版本中出现的ü从从Struts1.1版本开始,为了减轻核心控制器版本开始,为了减轻核心控制器ActionServlet类的负担,类的负担,ActionServlet的实际处理操的实际处理操作委托给了作委托给了RequestProcessor类中的类中的process()方法,方法,即代码被转移到了即代码被转移到了RequestProcessor类中6.2 RequestProcessor类wprocess()方法üStruts1.2版本的版本的RequestProcessor类中的类中的process()方方法的源码阅读与分析法的源码阅读与分析üprocess()方法的处理流程详见课本方法的处理流程详见课本6.2 RequestProcessor类w扩展RequestProcessor类ü任务描述:任务描述:为确保用户输入的中文信息能在控制台正确输出,可以在自己定义的RequestProcessor类中实现检测用户请求的字符编码是否已经设为UTF-8。
如果是,就进行正常的处理操作,否则退出process()方法的处理操作示例6.3 Action类wAction简介üAction 是在是在HTTP请求的内容和对应的处理该请求的业请求的内容和对应的处理该请求的业务逻辑之间的一个适配器核心控制器务逻辑之间的一个适配器核心控制器ActionServlet将将为每一个请求选择一个合适的为每一个请求选择一个合适的Action,并根据需要创建,并根据需要创建这个这个Action的实例,然后调用该实例的的实例,然后调用该实例的execute()方法6.3 Action类wAction简介ü因为控制器会为多个并发请求共享相同的因为控制器会为多个并发请求共享相同的Action实例,所以实例,所以Action必须以线程安全的方式进行编程,这也就意味着开发人员在设计的必须以线程安全的方式进行编程,这也就意味着开发人员在设计的时候必须遵循下面的规则时候必须遵循下面的规则::一定不要使用实例和静态变量保存和某一特定请求状态相关的信息,但它们却可以用来为相同的action共享全局资源在对其它资源(例如JavaBeans、session 变量等)访问的时候,如果这些资源需要保护,则必须进行同步(synchronized)处理。
ü当一个当一个Action实例第一次被创建的时候,控制器会调用实例第一次被创建的时候,控制器会调用setServlet()方法将不为方法将不为null的的ActionServlet实例传递给这个实例传递给这个Action当RequestProcessor被销毁时,调用被销毁时,调用setServlet(null)方法,以释放方法,以释放分配给这个分配给这个Action的所有资源的所有资源6.3 Action类wAction类的execute()方法üAction类中有两个重载的类中有两个重载的execute()方法其中一个方法其中一个execute()方法用于处理指定的非方法用于处理指定的非HTTP请求,另一个请求,另一个execute()方方法用于处理指定的法用于处理指定的HTTP请求这是请求这是Action类中类中execute()方法的重载,通过请求参数类型进行区分方法的重载,通过请求参数类型进行区分ü举例举例6.3 Action类w创建自己的Actionü为了增强代码的重用性,在编写为了增强代码的重用性,在编写Action类的代码的时候,不要加入类的代码的时候,不要加入过多的业务逻辑处理代码,而是将这部分工作分离出来交给专门的过多的业务逻辑处理代码,而是将这部分工作分离出来交给专门的业务逻辑处理类去完成业务逻辑处理类去完成。
例如前面的登录和注册案例中,在真实的项目中,最后在Action中对数据的处理都要和数据库打交道,登录功能要从数据库中读取帐号和密码,将其与用户输入的帐号和密码进行比较来决定用户是否登录成功;在注册中,Action最终要将用户输入的合法数据保存到数据库中ü这些和数据库相关的操作不要写在这些和数据库相关的操作不要写在Action中,而是单独建立一个专中,而是单独建立一个专门执行数据库业务处理的门执行数据库业务处理的Java Bean类,并在类,并在Action中引用中引用ü举例举例6.4 Struts1框架内置的常用Action类wDispatchActionüDispatchAction类的全名是类的全名是org.apache.struts.actions.DispatchAction,它是继承,它是继承Action类的一个抽象类它会将请求转发给一个类的一个抽象类它会将请求转发给一个public方法,这个方法通过请求参数指定,参数的名称通过配方法,这个方法通过请求参数指定,参数的名称通过配置文件中定义的置文件中定义的ActionMapping的的parameter属性指定属性指定ü举例举例6.4 Struts1框架内置的常用Action类wLookupDispatchActionüLookupDispatchAction是是DispatchAction的子类,它的子类,它的功能和的功能和DispatchAction的功能类似,可以将功能类似的功能类似,可以将功能类似的多个的多个Action代码定义成一个代码定义成一个Action类,在类,在Action类中类中定义多个处理业务逻辑的方法定义多个处理业务逻辑的方法。
üLookupDispatchAction是使用资源文件中消息的是使用资源文件中消息的key作作为请求参数来映射业务处理的方法而为请求参数来映射业务处理的方法而DispatchAction是通过请求参数对业务处理的方法进行选择的是通过请求参数对业务处理的方法进行选择的ü举例举例6.4 Struts1框架内置的常用Action类wMappingDispatchActionüMappingDispatchAction类也是类也是DispatchAction的子类,的子类,和和DispatchAction的功能类似,可以将功能类似的多个的功能类似,可以将功能类似的多个Action代码定义成一个代码定义成一个Action类,在类,在Action类中定义多类中定义多个处理业务逻辑的方法个处理业务逻辑的方法üMappingDispatchAction是使用配置文件中是使用配置文件中
的个数ü举例举例6.4 Struts1框架内置的常用Action类wForwardActionüForwardAction是是Struts1框架提供的一个内置类,用于框架提供的一个内置类,用于完成从一个完成从一个Web资源跳转到另一个资源跳转到另一个Web资源,具体用法资源,具体用法请参考第请参考第5章章5.3.2节ü举例举例6.4 Struts1框架内置的常用Action类wIncludeActionüIncludeAction类的作用是完成引入相应的类的作用是完成引入相应的Web资源资源ü使用使用IncludeAction类可以很容易的将原有的不是基于类可以很容易的将原有的不是基于Struts1框架项目中的框架项目中的JSP页面或页面或Servlet整合到基于整合到基于Struts1框架的框架的Web项目中ü举例举例6.4 Struts1框架内置的常用Action类wSwitchActionü在大型在大型Web应用项目开发中,通常按照功能将项目划分应用项目开发中,通常按照功能将项目划分成多个模块,这样多个小组可以同时进行开发,可以加成多个模块,这样多个小组可以同时进行开发,可以加快项目的开发进度,提高开发效率,也便于项目的管理快项目的开发进度,提高开发效率,也便于项目的管理。
üStruts1框架从框架从1.1版本开始提供了多模块开发的支持,不版本开始提供了多模块开发的支持,不同的模块可以使用独立的同的模块可以使用独立的Struts1框架配置文件、消息资框架配置文件、消息资源文件、源文件、Validator框架配置文件等当项目开发完成后,框架配置文件等当项目开发完成后,各个模块再组装到一起模块之间的切换是通过各个模块再组装到一起模块之间的切换是通过Struts1框架的内置类框架的内置类SwitchAction来完成的来完成的ü举例举例本章结束w 本章总结ü核心控制器类的介绍核心控制器类的介绍üAction类的应用类的应用üStruts1框架内置的常用框架内置的常用Action类介绍类介绍w上机习题。
