大大毛 的笔记

  DDM's Note

哪怕没有办法一定有说法,
就算没有鸽子一定有乌鸦,
固执无罪 梦想有价,
让他们惊讶.

posts - 14, comments - 23, trackbacks - 0, articles - 58
   :: 首页 ::  :: 联系 ::  :: 管理

精通Struts笔记--04.01

Posted on 2006-08-02 11:42 大大毛 阅读(753) 评论(0)  编辑  收藏 所属分类: Struts

   Struts应用的配置
      Struts的配置是两个文件web.xml以及struts配置文件

       1.web.xml
         配置ActionServlet,其方法与配置普通的Servlet一致,涉及的元素是<servlet> (名称,类,参数),<servlet-mapping> (servlet所要处理的URL),<taglib> (客户化标签库)
这里 ActionServlet配置
      可以看到,<servlet>标签与<servlet-mapping>相对应,由于Struts只支持配一个ActionServlet,因此只能出现一对。
      ActionServlet支持用户类,只需要改变这里的<servlet-class>即可使用自定义类;
      <servlet>/<init-param>标签中,config代表Struts配置文件所在的位置,这里需要注意 config/moduleA的写法,它代表着一个模块moduleA以及支持该模块的配置文件
      <init-param>可以具有多个,在这里可以保存一些客户化的参数,使用servlet.getInitParameter("paramname")的方式即可以取得。
      <url-parttern>代表该servlet所要处理的URL,支持通配符,*.do代表所有以 .do 为后缀的请求都交由该servlet来处理

标签库配置
      <taglib-uri>:指定标签库的相对或绝对URI地址,即在JSP页面中引用标签时,需与之对应;
      <taglib-location>:指定标签库的物理位置,即实际存放在什么地方。

欢迎文件配置
      <welcome-file>:web应用的欢迎文件,即只输入了应用的根目录时响应的文件,按先后顺序查找;
      该元素不能被配置成Action,如果有此需要的话则应在这里配置一个JSP,并在JSP里面<logic:forward name="key" />进行跳转

错误代码配置
      <error-page>:指定web出错后的处理页面,常见的错误多是404:找不到目录或文件,500:服务器内部错误;
      <error-code>:指定需要处理的错误号;
      <location>:指定出错后跳转的处理页面,这里可以设置JSP页面。

异常捕获配置
      捕获的异常:
         RuntimeException 或 Error
         ServletException
         IOException


      
2.Struts配置文件
         Struts配置的相关类位于org.apache.struts.config包中,其中ModuleConfig接口是整个树的顶点,各种配置信息都放入ModuleConfig的实现类中(由于存在着多模块,因此会有多个实现)。因此从ModuleConfig接口中可以取得各种配置信息,当然需要先通过selectModule()来选择需要操作的具体实现。
         还需要注意的一点就是在Struts配置文件里面DTD文件严格定义了各个元素出现的先后顺序。
datasources元素
      <data-sources>:配置应用的数据源,可以包含多个<data-source>子标签
      <data-source>:数据源的参数,由于可以有多个数据源,因此<data-source>有一个属性 key 用于区分,如果没有 key 属性,Struts将此做为缺省的数据源,该缺省数据源实际上也是有 key 值的,对应于Globals.DATA_SOURCE_KEY的值,实际值是 "org.apache.struts.action.DATA_SOURCE"字串。
         :key 属性的值不允许重复,自行指定key属性后,在Action中操作为 this.getDataSource(request,key),在其它地方则需要从ServletContext(application范围)中用 (DataSource)getAttribute(key),参数key的值与该属性值完全相同,因此在配置文件中该属性应该具有一定的区别性,如"datasource.other"等,以避免在引用时出现麻烦,另外如果在配置文件中各个data-source都配置了key属性,那么在应用仅能通过对应的key值进行调用,而不会存在着缺省数据源("org.apache.struts.action.DATA_SOURCE");
         :使用Myeclipse插件配DBCP时还需要手工修改
几处

这里 form-beans元素(普通)
      <form-beans>:配置ActionForm,可以包含多个<form-bean>子标签
      <form-bean>:ActionFormBean的参数。
         className:该标签对应的配置类,Struts中与之对应的类是"org.apache.struts.config.FormBeanConfig",有需要时也可自行指定
         name:该ActionForm的唯一标识符
         type:ActionForm的类名

form-bean元素(动态)
      <form-bean>:动态的ActionForm的type="org.apache.struts.action.DynaActionForm"或子类;
      <form-property>:配置ActionForm的成员属性
         name:属性名称
         type:属性类型,必须是对象类型。如果是Java简单数据类型需要使用包装类
         inital:初始值,可缺省,与类的属性可以不用初始化的特性相同
      另:这个动态ActionForm还很有些名堂,现在只能逐步推进了

这里 global-exceptions元素
      <global-exception>:配置全局异常处理,可以包含多个<exception>子标签,其配置方法与局部(Action)异常配置相同,但是作用域不同,类似于Java类的成员属性与同名方法形参作用域之间的关系,对照想想setter就清楚了
      <exception>:配置异常处理
         className:与<exception>标签对应的配置类,缺省是"org.apache.struts.config.ExceptionConfig";
         handler:异常处理类,缺省是"org.apache.struts.action.ExceptionHandler";
         key:描述异常的消息在资源文件中的key;
         bundle:资源文件,可缺省;
         path:Struts捕获到指定类型的异常后,转发的处理路径;
         scope:ActionMessages实例的存放范围,缺省为"request",还可取值"session";
         type:异常的类型

这里 global-forwards元素
      <global-forwards>:配置全局forward,可包含多个<forward>子标签。
      <forward>:配置forward
         className:与<forward>标签对应的配置类,缺省为"org.apache.struts.action.ActionForward";
         contextRelative:缺省值为"false",表示path相对于应用;当取值为"true"时,表示path属性给出的是相对于当前上下文的URL,如果配置用于子模块之间切换的forward,则此项需设为"true";
         name:名称;
         path:转发的路径,必须以"/"打头
         redirect:缺省值为"false",表示请求转发,取值"true"时,表示重定向,子模块切换用的forward,此项需设为"true" 

action-mappings元素
      <action-mappings>:配置Action,可包含多个<action>子标签
      <action>:配置Action
         className:标签对应的配置类,缺省为"org.apache.struts.action.ActionMapping"
         attribute:name属性所对应的ActionForm实例的 key ,通过这个attribute操作它,如 (LoginForm)request.getAttribute("loginForm"); ;
         input:输入URL,转发到该 Action 时如果 ActionForm.validate() 检验失败,Action 将把请求转发到该URL,请看 ;
         name:与Action对应的ActionForm的 name ,与<form-bean>标签的name属性相匹配;
         path:Action的访问路径,必须以"/"打头,不需要后缀
         scope:与Action对应的ActionForm的存在范围,缺省是"session",可取值"request";
         validate:是否需要调用ActionForm的 validate() 方法进行检验,缺省是"true",可取值"false",ActionForm将不会对提交的数据进行表单校验;
         parameter:可附加的参数,在Action中可以用 mapping.getParameter() 来获取;
         roles:指定允许调用该Action的安全角色,与容器设置的安全角色匹配,由容器来判断;
         unknown:表示是否处理用户发出的所有无效的Action URL,默认为"false";
         type:Action的类名;
         forward:指定转发的URL,相当于使用ForwardAction
         include:指定包含的URL,相当于使用IncludeAction
         <exception>:Action局部异常捕获,参看<global-exceptions>小节
         <forward>:Action局部forward,参看<global-forwards>小节
      注意:
         <action>标签的type,forward,include三种属性互斥。

controller元素
      <controller>:配置ActionServlet
         className:标签的配置类,缺省为"org.apache.struts.config.ControllerConfig";
         contentType:指定响应结果的内容类型和字符编码,如果在Action和JSP中设置将会覆盖掉该设置;
         locale:指定是否把 Locale 对象保存到session中,默认值为"false";
         nochache:是否在客户端缓存,缺省为"false",可选"true",struts将在响应中加入特定的头参数以防止页面被缓存
         processorClass:指定负责处理 Request 的类,缺省为"org.apache.struts.action.RequestProcessor",如果有多模块则应在各模块指定自己的处理类;
         bufferSize:指定上传文件的输入缓冲,默认为"4096";
         tempDir:指定处理上传文件的临时工作目录,Servlet容器可以自行分配。

message-resources元素
      <messge-resources>:配置资源文件,这个标签与以上的几个有点不同,他本身可以存在多个
         className:标签的配置类,缺省为"org.apache.struts.config.MessageResourcesConfig";
         factory:资源的工厂类,缺省为"org.apache.struts.util.PropertyMessageResourcesFactory";
         key:指定 Resource Bundle 存放在 ServletContext 中的 key,缺省为Globals.MESSAGES_KEY的值 "org.apache.struts.MESSAGE" ,可以自行指定key,使用如resource.bundle01加以区别,可通过 (MessageResources)servletContext.getAttribute(key) 拿到,Struts提供的客户化标签中常常可以见到一个 bundle 属性,该属性即对应于这里的 key 值;
         null:指定如何处理未知的消息,缺省为"true",返回空字串,可选"false",将返回类似"???key???"的字串;
         parameter:资源文件的存放路径。

plug-in元素
      <plug-in>:配置插件,className属性指定具体的插件类,struts配置文件中可配置多个插件,初始化顺序由书写顺序决定
      <set-property>:设置插件的属性,可具有多个,该插件类必须实现与本属性对应的setter/getter,在Struts初始化时自动set。
      插件必须实现 org.apache.struts.action.PlugIn 接口,该接口具有两个方法:
public void init(ActionServlet servlet,ApplicationConfig config) throws ServletException;
      init方法将于Struts应用启动时被调用,是一个初始化客户资源的接口,而且由Struts传入的参数也便于设置各种环境。

public void destroy();
      destroy方法于Struts应用关闭时调用,是一个释放客户资源的接口。


      多应用模块的配置
      多应用模块的划分有助于应用的并行开发,提高效率。
      步骤:
         1.为每个子应用创建单独的 Struts 配置文件;
         2.在 web.xml 中配置每个子应用的信息,参看 这里
         3.应用中实现切换:<forward> 或 在<action>标签中使用 SwitchAction 来实现切换

只有注册用户登录后才能发表评论。


网站导航:
 

i am ddm