Struts控制器
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ACCP V4.0
ActionServlet 控制总线
ActionServlet实际也是一个从HttpServlet派生的类,该类 扩展了doGet和doPost方法,这两个方法都会调用其扩展 的process方法,并且该类还扩展了init方法 扩展的init方法做了如下事情:
初始日志等文件,初始web.xml的ServletConfig 初始ModuleConfig来读取strutus-config.xml 初始资源文件和数据源配置 初始插件(Plugin) 对多个子模块进行初始化
<html:submit property="method">
复写protected Map getKeyMethodMap()
Map的Put("资源名","方法名")
ACCP V4.0
本章小结
本章主要介绍了Struts框架中的控制器的实现过 程,其基本处理流程是
1. 2. 3. 4. 5. 6. 7. 用户首先提交请求,由ActionServlet负责接收 然后调用RequestProcess的Proccess方法 Proccess方法负责提取struts-config.xml中的配置信息 接着对缓存等初始化,并创建ActionForm 然后找到相应的Action然后执行Action的execute方法 并返回ActionForward 再由proccess方法根据<forward>标签进行转发页面
ACCP V4.0
struts-config.xml
Struts中通过struts-config来完成对应用程序的执 行配置工作.其配置范围包括:
数据源<data-sources> 视图组件配置<form-beans> 全局异常处理<global-exceptions> 全局转向<global-forwards> 控制器组件映射<action-mapping> 控制器扩展<controller> 资源文件<message-resources> 插件扩展<plug-in>
ACCP V4.0
LookupDispatchAction
编写资源文件按钮的标题文字 Action必须从 必须从LookupDispatchAction继承 必须从 继承 Action标签的 标签的parameter="method" 标签的 通过<bean:message>建立按钮与资源的对应关 系
如果要通过ActionForward来重定向,我可以设置其<forward>,其标 签通过name 和path来设置其要映射的路径.然后我们可以通过 ActionMapping的findForward(name)指明name然后找到path.
ACCP V4.0
Struts工作流程
制作:何双江
ACCP V4.0
ACCP V4.0
ForwardAction组件
在JSP中我们虽然可以直接<jsp:forwad>进行请求重定向. 但是在Struts中我们推荐先把请求发往控制器, ForwardAction和该标签类似. 控制器的优势
1. 可以提前加载资源和配置文件 2. 可以方便的包含Validate验证表单 3. 符合MVC设计
使用ForwardAction组件:
1. 视图:<html:link path="/action/faction"/> 2. struts-config.xml <action path="/faction" parameter="要转发的 web组件" type="org.apache.struts.actions.ForwardAction" … 此时将会自动把请求发给parameter指定的web组件中.
ACCP V4.0
配置数据源
数据源DataSource是JDBC2.0中定义的用来访问数据 库的对象.通常由服务器(通常数据库提供了数据链 接的资源池)来配置和实现和数据库的链接,而用户 只需借助DataSource来获取其他JDBC接口来操作数 据库. 配置数据源通过<data-source>标签配置,该标签的 type属性指定了数据源的类型,如果在Tomcat下我们 可以使用 mons.dbcp.BasicDataSourc来指定 数据源(该类在common\lib\commons-dbcp-1.2.1.jar 中),因此可以直接使用.key 属性指定了数据源的名 称.
ACCP V4.0
本章目标
Struts框架的处理流程 struts-config.xml ActionServlet 控制总线 RequestProccess 请求消息处理器 Action 逻辑功能扩展模块 内置Action实行默认扩展处理
ACCP V4.0
Struts框架处理模型
消息总线 Action Servlet
ACCP V4.0
内置Action组件
虽然我们可以由用户来扩展Action组件的逻辑, 在Struts框架中还内置了一组Action供我们直接使 用.内置Action组件包括:
org.apache.struts.actions.ForwardAction org.apache.struts.actions.IncludeAction org.apache.struts.actions.SwitchAction org.apache.struts.actions.DispatchAction org.apache.struts.actions.LookupDispatchAction
attribute 属性名 className 映射类名,默认ActionMapping input 输入表单的URL path以/开头指定Action的路径 name 指定formBean的名称 parameter 可以通过mapping.getParameter scope request或session范围 type Action的类型 validate 指定执行form的validate方法 role 表示可以使用Action的角色
Struts控制器
作者:何双江
ACCP V4.0
引言
就如同我们在硬件设备中常见的控制总线一般 (如:主板的控制总线),任何在总线上设备只 要发出对CPU的请求,就会首先把请求提交给控 制总线,再由控制总线把最终指令传递给处理器, 再由处理器处理后把处理结果返回给终端设备. 再WEB程序设计中沿用了这一设计思路.Struts 正是这一设计思路的体现框架.
Struts工作流程
根据上图所示,其基本处理流程描述如下:
1. 2. 3. 4. 5. 6. 7. 用户首先提交请求,由ActionServlet负责接收 然后调用RequestProcess的Proccess方法 Proccess方法负责提取struts-config.xml中的配置信息 接着对缓存等初始化,并创建ActionForm 然后找到相应的Action然后执行Action的execute方法 并返回ActionForward 再由proccess方法根据<forward>标签进行转发页面
IncludeAction和SwitchAction于ForwardAction组件类似
ACCP V4.0
DispatchAction组件
我们在使用Action的时候只能一次实现一个逻辑 功能,如果我们希望在一个Action中实现多个逻 辑我们需要自己写过多代码. 比如我们在一个Form中完成对数据的插入,删除 等操作,那么一个Form就需要完成多个逻辑. 这样我们可以通过扩展DispatchAction组件来完 成我们的功能逻辑,只是方法签名可以取任意的 方法名当参数必须和execute方法一致. 调用方法可以通过url的param中提供method如:
struts-config.xml
Action 处理逻辑 Action Action Action
en Action Action Servlet Servlet Servlet JSP
请求 处理器 RequestProccess
Action Action Action Form Form Action Form Form
ACCP V4.0
Action 逻辑功能扩展模块
Action类为用户提供了逻辑功能的扩展,我们可 以继承Action类并实现execute方法,在该方法中 调用特定的模型组件的功能. Action类的创建是由RequestProcess类的 processActionCreate方法来创建的,其创建后先 放入缓存,然后只要使用就从缓存中读取. execute方法的返回值是一个ActionForward类, 该类是<forward>标签的逻辑抽象.我们通常通过 ActionMapping的findForwad方法从<forwad>标 签中读取重定向信息.
当ActionServlet在接收到Http请求的时候开始执行process 方法,该方法的最主要工作就是获取RequestProcess类 的实例并调用其process方法.
ACCP V4.0
RequestProcess
RequestProccess组件的目的是为了对请求的数 据进行包装处理,如把数据请求放入缓存,把数 据请求最终产生ActionForm对象,最后把创建 Action对象,在执行其execute方法并把 ActionForm传入execute供逻辑代码获取页面数据. 我们可以在 <controller>标签中指定 RequestProcess,其属性contentType指定MIME 类型,processorClass指定RequestProcess的类 型,这里我们可以自己进行扩展实现.
ACCP V4.0
配置数据源
<datasource>提供了<setproperty>来设置数据源 的属性,该标签通过property 来说明属性,value来 设置值. 可以设置的属性包括:autoCommit driverClass maxCount minCount user password url 配置后,我们可以在Action中使用如下代码来访 问数据源:
ACCP V4.0
控制器类图
HttpServlet +doGet() +doPost()
ActionServlet +process() 1..1 Action +execute() 0..* 1..* RequestProcess +process() 1..*
<<接口>>ModuleConfig
javax.sql.DataSource ds=this.getDataSource(request,key); Connection con=ds.getConnection();
ACCP V4.0
配置视图组件Form
我们可以在<form-beans>下配置多个<formbean>用来描述我们的ActionForm,然后通过 name属性指定form的名称以便以后于控制器 Action进行映射;type属性指定ActionForm的类 型(注:包名.类名). 例: <form-beans>
http://.../.../XXX.do?method=login&name=caterpillar&password=1234
ACCP V4.0
LookupDispatchAction
LookupDispatchAction和DispatchAction类似,由 于我们在使用DispatchAction的时候只能通过link 直接的方式在method中设置方法名,所以带来了 不灵活性. LookupDispatchAction中提供了可以在<form>标 签中定义多个submit提交,并指定每个submit一 个资源标示,并要求用户复写getKeyMethodMap 方法返回资源和方法的对于关系.这样用户可以 直接在form中完成多个提交起到调用不同函数的 作用,这相当于事件了.
<form-bean name="helloForm" type="com.hesj.struts.HelloForm" />
</form-beans>
ACCP V4.0
控制器组件映射
配置了视图组件,我们要做的就是把视图组件和控制器组件关联起来. 我们可以通过<action-mappings>标签完成这个映射过程. 对于每一个Action我们可以根据<action>标签来完成.action包含的属 性包括:
accpv40lookupdispatchaction编写资源文件按钮的标题文字action必须从lookupdispatchaction继承action标签的parametermethod通过建立按钮与资源的对应关复写protectedmapgetkeymethodmapmap的put资源名方法名accpv40本章小结本章主要介绍了struts框架中的控制器的实现过程其基本处理流程是再由proccess方法根据标签进行转发页面accpv40英汉对照autocommit自动提交bean果核这里指组件datasource数据源global全局accpv40