为Structs应用配置Webxml文件
第一步:配置ActionServlet
<servlet> <servletname>action</servletname> <servletclass>orgappache structsActionServlet</servletclass></servlet><servletmapping> <servletname>action</servletname> <uripattern>*do</urlpattern></servletmapping>
注意:不管应用中包含多少个子应用都只需配置一个ActionServlet因为ActionServlet支持多线程目前的Structs框架只允许在应用中配置一个ActionServlet
第二步初始化参数对Servlet的运行环境进行初始化配置
<servlet> <servletname> action</servletname> <servletclass> orgappache structsActionServlet </servletclass> <initparam><paramname>config</paramname><paramvalue>/WEBINF/structsconfigxml</paramvalue></initparam> </servlet>
表 Struts中用到的初始化参数
参数名 含义/默认值 config 以相对路径的方式指明 Struts应用程序 的配置文件位置 如不设置则默认值为/WEBINF /strutsconfigxml config/sub 以相对路径的方式指明子应用程序 的配置文件位置一般来说 很少用到子应用程序 在此不多描述 debug 设置Servlet的debug级别 控制日志记录的详细程度 默认为 记录相对最少的日志信息 detail 设置Digester的debug级别 Digester是Struts框架所使用的 用来解析xml配置文件的一个框架 通过该设置可以查看不同详细 等级的解析日志默认为 记录相对最少的日志信息
第三步配置欢迎清单
当客户访问Web应用时如果仅仅给出Web应用的Root URL没用指定具体的文件名Web容器会自动调用Web应用的欢迎文件
<welcomefilelist><welcomefile>welcomejsp</welcomefile><welcomefile>indexjsp</welcomefile> </welcomefiellist>
说明
可以包含多个子元素首先查找第一个文件
由于元素中不能配置Servlet映射因此不能直接把Structs的Action作为欢迎文件可以采用一种变通的方法来实现在欢迎文件中调用Structs Action
首先在Structs配置文件中为被调用的Action创建一个全局的转发项例如
<globalforwards> <forward name=”welcome” path=”HelloWorddo”/></globalforwords>
创建一个welcomejsp的文件最后在webxml文件中把welcomejsp文件配置为欢迎文件代码如下
<welcomefilelist><welcomefile>welcomejsp</welcomefile> </welcomefilelist>
第四步配置错误处理
<errorpage> <errorcode></errorcode> <location>/commom/jsp</location></errorpage><errorpage> <errorcode></errorcode> <location>/commom/jsp</location></errorpage>
也可以为Web容器捕获的Java异常配置需要设置子元素它用于指定Java异常类Web容器可能捕获如下异常RuntimeException或Error ServletException或它的子类IOException或它的子类
<errorpage> <exceptiontype>javaioIOException </exceptiontype> <location>/common/system_ioerrorjsp </location></errorpage>
第五步配置Structs标签库
使用客户化的标签库要配置它们
<taglib> <taguri>/WEBINF/structshtmltld <taguri> <tagliblocation> /WEBINF/structshtmltld </tagliblocation> </taglib>
用于指定标签库的相对或者绝对URI地址Web应用根据这一URI来访问标签库
指定标签描述文件在文件资源系统中的物理位置
Structs配置文件
Structs框架在启动时会读入其配置文件根据它来创建和配置各种Structs组件
()元素
元素是Structs配置文件的根元素元素有个子元素它的DTD定义如下 <!ELEMENT structsconfig(datasources?formbean?globalexeception?globalforward?actionmappingcontroller?messageresources*plugin*)>
在Struts配置中必须按照以上的DTD指定的先后顺序来配置元素的各个子元素如果颠倒了这些元素的配置文件中的位置在Structs应用启动时会生成错误
元素
元素包含零个一个或者多个子元素用于配置特定的数据源它可以包含多个子元素用于设置数据源的各种属性
配置了数据源后就可以在Action类中访问数据源在orgapachestructsactionAction类中定义了getDataSource(HttpRequrst)方法它用于获取数据源对象的引用
DataSource dataSource; Connection connection; dataSource =getDataSource(request); connection=dataSourcegetConnection();
也可以在配置文件中声明多个数据源此时需要为每一个数据源分配唯一的key值通过改值来标识特定的数据源
()元素
元素用来配置多个ActionForm Bean包含多个子元素每个包含多个属性ClassName nametype
<formbeans> <formbean name="HelloForm" type="helloHelloForm"/></formbeans>
注意配置动态ActionForm Bean还必须配置元素的元素
<formbeans> <formbean name="HelloForm" type="helloHelloForm"/> <formbean name="userForm" type="orgapachestructsactionDynaAction"> <fromproperty name="firstname" type="javalangString"/> <formproperty name="secondname" type="javalangString"> <formproperty name="age" type="javaInteger" initial=""> </formbeans>
()元素
用于配置异常处理元素可以包含零个或者多个元素
元素用来设置java异常和异常处理类orgapachestructsactionException Hander之间的映射
()元素
元素用来声明全局的转发关系有零个或多个元素组成元素用于把一个逻辑映射到特定的URL
属性 描 述 className 和元素对应的配置类 默认为orgapachestructs actionActionForWard name 转发路径的逻辑名 此项时必须的 path 指定或者重定向的URI 此项时必须的 必须以”/”开头 redirect 此项是true表示是执行重定向的操作 此项是false时 表示请求转发
<globalforwards> <forward name="forward" path="/Actiondo"/><forward name="forward" path="/Actiondo"/> </globalforwards>
如果jspjsp把请求转发给Action可以使用以下代码
<html:link forward=”forward”>
或者
<logic:forward name=”forward”>
如果Action的execute()方法把请求转发给JSPjsp可以使用一下代码
return(mappingfindForward(“forward”))
()元素
元素包含零个或者多个元素元素描述了从特定的请求路径到相应的Action类的映射
()元素
元素用于配置ActionServlet
()< messageresources>元素
元素用于配置Resource BundleResource Budle用于存放本地化消息文件
Structs标签
HTML标签
标签名 描述
base 包装HTML的base元素
button 包装HTML的 button类型的input元素
cancel 包装HTML cancel 按钮
checkbox 包装HTML checkbox 类型的输入域
errors 有条件地显示一些error消息显示ActionErrors信息
file 包装HTML文件上传输入域
form 定义HTML form 元素
frame 包装HTML frame 元素
hidden 包装HTML hidden 输入域
html 包装 HTML中的 html 元素
image 包装 "image"类型的输入域
img 包装HTML的 img 元素
javascript 包装根据ValidatorPlugIn提供的校验规则所提供的javascript校验脚本
link 包装超链接
messages 有条件地显示一些提示信息显示ActionMessages信息
multibox 包装多选输入框
option 包装一个选择输入框
options 包装一批选择输入框
optionsCollection 包装一批选择输入框集
password 包装密文输入框
radio 包装单选输入框
reset 包装“重置”功能的按钮
rewrite 包装一个URL
select 包装一个选择输入框
submit 包装一个提交按钮
text 包装一个文本输入框
textarea 包装一个备注输入框
ActionForm
ActionForm 的要求
创建一个ActionForm 并不困难但是你的类必须符合一些要求
ActionForm 必须扩展自orgapachestrutsActionForm基类ActionForm 是不能实
例化的
ActionForm 必须为每个应该从请求中收集的HTML控件定义一个公共属性
(Struts 要求每个属性都要mutator 和accessor Struts 则没有如此严格)
ActionForm还可能要符合一些可选的要求:
如果你要求ActionForm 在传递属性到Action之前校验它们你就必须实现validate
方法如果想在组装前初始化属性必须实现reset 它在ActionForm 组装前被调用
动态ActionForm
ActionForm 作为类型转换器
ActionForm的一个强制点是应该使用String 和boolean属性实际上这意味着属性
必须得从一种转换到另一种类型大部分应用也需要一些属性比如电话号码或者数量以一种格式化的方式出现
核心Java 包提供一些工具来做这种事情但是要清楚地将他们集成到应用中仍然是一个挑战
Struts开发人员经常在ActionForm中包含helper方法来进行类型转换helper 方法
可以有很多种实现方式
ActionForm 作为防火墙
当请求提交时ActionServlet 使用一个自动组装机制来从请求参数中设置请求的
ActionForm属性这让你可以通过控制哪个ActionForm 属性被暴露来控制哪个请求参数
是可接受的这也意味着如果你的ActionForm 的粗心设计你可能失去控制哪个参数可以接受的能力ActionForm一定不能包含看起来像是一个JavaBean属性但不能从HTTP请求设置的属性方法
ActionForm 可以嵌套其它bean
因为Struts标签扩展和自动组装机制都支持点号语法来从ActionForm访问其它bean这是一个方便的方式可以通过ActionForm来组装存在的bean在JSP页面你可以象这样引用一个嵌套的bean
<html:textpropety="valuestelephoneText"size=""maxlength=""/>
分发(Dispatch )
Struts 开发人员通常使用同一个Action处理相关的操作一个通常做法来选择操作是在
HTML表单中使用隐藏属性BaseForm 的dispatch 属性也可用作这个目的
public void setDispatch(String dispatch);public String getDispatch();
Struts 配置提供连个级别嵌套的ActionForward:
Global (全局) ActionForward对整个应用中的所有Action 对象均有效
Local (局部) ActionForward 则在ActionMapping 元素中定义
仅对那些在这个ActionMapping中调用的Action对象有效从Action 对象内部来看forward 通常像这样来选择
ActionForward forward = mappingfindForward("continue"); |