• struts1.x 配置文件详解


    struts1.x 配置文件之
    ——struts-config.xml详解

      Struts应用采用两个基于XML的配置文件来配置,分别是web.xml和struts-cofig.xml文件:
           web.xml文件是配置所有web应用的;
           struts-config.xml文件是struts专用的配置文件
    ,事实上也是可以根据需要给这个配置文件起其他名称的.
            Web应用的发布描述文件:web应用发布描述文件可以在应用开发者、发布者和组装者之间传递配置信息,Web容器在启动的时候从该文件中读取配置信息, 根据它来装载和配置web应用。文档类型定义DTD对XML文档的格式做了定义,DTD把XML文档划分为元素、属性和实体;每一种XML文档都有独自的 DTD文件,可以从网上下载。<web-app>元素是web.xml的根元素,其他元素必须嵌入在<web-app>元素之内。要注意的是子元素也是有顺序的比如必须是首先<servlet>,然后<servlet-mapping>最后< taglib>。

           为Struts应用配置Web.xml文件首先最重要的一步是配置ActionServlet,这个用<servlet>标签的 servlet-name属性起一个名字叫action,然后用servlet-class属性指定ActionServlet的类.然后用< servlet-mapping>标签的servlet-name属性指定action,在用url-pattern指定接收范围是*.do的请求.不管应用中包含了多少子应用,都只需要配置一个ActionServlet类来处理应用中的不同的功能,其实这就是不必要的,因为Servlet本 身就是多线程的,而且目前Struts只允许配置一个ActionServlet.声明ActionServlet的初始化参数:< servlet>的<init-param>子元素用来配置Servlet的初始化参数.param-name设置config参数 名.param-value设置struts-config.xml的路径参数值.

            配置欢迎使用清单:如果客户访问Web的时候值是访问了WEB应用的根目录URL.没有具体的指定文件,Web会自动调用Web的欢迎文件.< welcome-file-list>元素来配置的.通过其中的<welcome-file>欢迎页面</welcome- file>来配置.

            配置错误处理:尽管Struts框架功能强大的错误处理机制,但是不能保证处理所有的错误或者异常.当错误发生时,如果框架不能处理这种错误,把错误抛弃 给Web容器,在默认的情况下web容器会想客户端返回错误信息.如果想避免让客户看到原始的错误信息,可以在Web应用发布描述文件中配置< error-page>元素.通过<error-code>404来定义错误的类型.然后通过<location>要处理 错误的JSP页面来对错误进行处理.还可以用<exception-type>来设置异常,然后通过<location>来处理 异常的JSP页面来处理异常.

            配置Struts标签库:这个就和以前学到的JSP自定义标签类似,配置元素为<taglib>来配置.<taglib- uri>这个指定标签库的uri,类似起一个名称.<taglib-location>这个是标签库的位置也就是实际所在的路径.通过 这样的方法引入一个标签库,然后在前台JSP页面就可以通过自己定义的URI来调用标签.

      Struts的核心是struts-config.xml配置文件,在这个文件里描述了所有的Struts组件。

      一、 org.apache.struts.config包

      首先研讨一下org.apache.struts.config包:在struts应用 启动的时候会把Struts配置文件信息读取到内存中,并把它们存放在config包中相关的JavaBean类的实例中.包中的每一个类都和 struts配置文件中特定的配置元素对应,ModuleConfig在Struts框架中扮演了十分重要的角色,它是整个config包的核心,在 Struts运行时来存放整个应用的配置信息.如果有多个子应用都会有一个ModuleConfig对象,它和Struts文件根元素的< struts-config>对应.根元素中包含<form-bean><action><forward> 等元素.

       二、 struts-config.xml文件的结构

       <struts-config>是Struts配置文件的根元素,struts中的所有配置都必须置于该顶层元素(即根元素)之内。与根元素对应的配置类是ModuleConfig类。struts的配置主要有8个,即<struts-config>这个根元素共有8个子元素,它们分别是data-sources、form-bean、 global-exception、global-forwards、action-mapping、controller、message-resources和plug-in。在Struts配置文件中,必须按照DTD指定的顺序(即这里列出来的8个配置的先后顺序)来配置<struts-config>元素的各个子元素,如果颠倒了这些子元素的顺序,会产生错误。

      其中第一个配置<data-source>基本上不再需要,以下是其他7个配置:

    1.       FormBean:在<form-beans>元素中配置。
    2.       Action映射:在<action-mappings>元素中配置。
    3.       全局Forwards:在<global-forwards>元素中配置。
    4.       全局异常(Exception):在<global-exceptions>元素中的配置。
    5.       控制器(Controller):在<controller>元素中配置。
    6.       信息资源:在<message-resources>元素中的配置。

    7.       插件:在<plug-in>元素中配置。

    下面是一个struts-config.xml文件的主要内容:

    <?xml version=”1.0” encoding=”ISO-8859-1”?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
    "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd";>
    <struts-config>
     
      <data-sources>
          <data-source>
          </data-source>
      </data-sources>

      <form-beans>
          <form-bean / >
      </form-beans>

      <global-forwards>
          <forward / >
      </global-forwards>

      <action-mappings>
          <action / >
      </action-mappings>

      <controller / >

      <message-resources / >

      <plug-in />

    </struts-config>

      再次注意:以上各元素的顺序是非常重要的,你的struts-config.xml配置文件必须按照这个顺序进行配置,否则在你的容器启动的时候就会出错。

    三、struts的配置方法

    下面来看看这7个元素的配置方法:
    1、配置Formbean和Action映射
        这两个配置项是Struts配置的核心,一个完整的Struts应用程序都会拥有这两项配置。
        每一个Formbean要在<form-beans>元素中定义一个<form-bean>子元素。下面的代码给出了一个标准的Formbean的配置方法:
    <form-beans>
        <form-bean name="myForm" type="actionform.MyActionForm" />
    </form-beans>

      其中type属性表示Formbean类的全名(包名+类名),一般type属性值需要指定一个org.apache.struts.action.ActionForm类或其子类;而name属性则是我们我们为该type属性所指向的formbean类所取的一个简短易记的名字而已,同时,下面在配置action映射时也需要用到该名字。type属性值还可以指定一个动态form,如org.apache.struts.action.DynaActionForm,或这个类的子类。

      在<form-beans>元素中定义的Formbean一般用于将客户端浏览器提交的数据映射为Java Bean的形式,最终开发人员可以直接使用Java Bean来操作客户端提交的数据。Formbean同时还有验证数据的功能(在validate方法中验证)。Formbean有时还会作为其他用途使用,如使用动态form和LocaleAction类配合使用来进行本地化操作。
      每一个Action映射要在<action-mappings>元素中定义一个<action>子元素。Action映射的主要功能是将Struts动作的访问路径(一般以.do结尾)和Struts动作类相对应;同时可以指定一个Formbean(该formbean必须是上面已经在<form-beans>元素中定义过的<form-bean>)来接收和验证客户端提交的数据。下面的代码给出了一个标准的配置Action动作的方法:

    <action-mappings>
        <action name="myForm" path="/myaction"  scope="request"  validate="true" type="action.MyAction" input="/mystruts/error.jsp">
             <forward name="success" path=" /mystruts/success.jsp" />
        </action>
    </action-mappings>

    <action>元素里的属性比较多,这里需要详细讲解一下:

    <action name="myForm" />:这里的name属性值就是前面在<form-bean name="myForm" />中的name属性值,这两个属性值必须相同;

     <action path="/myaction" />:这里的path属性值指向页面请求中的.do请求,具体的见下面的表单提交的例示;

      <action type="action.MyAction" />:这里的type属性值为工程中的MyAction类的全名(包名+类名); 需要注意的是:这里的包名与类名之间不是以斜杠"/"来区分,而是以一个点号"."来区分。

    <action scope="request" />:这个指定请求的作用域,可以是request,response和page;

    下面是<action />之子元素<forward />元素的说明:

    <forward name="success" />:这里的name属性值指向页面请求的一个业务名,具体的见下面的表单提交的例示;

    <forward path="/mystruts/success.jsp" />:这里的path属性是当用户请求成功后所转向到的页面。下面以一个表单提交为例:

    假定有一个用户登陆页面login.jsp ,用户需要在该页面中输入名字和密码,如果验证通过则进入首页:

    <form action="<%= request.getContextPaht()%>/myaction.do?ProcName=success" method=post>

      name:<input type="text" length="25" id="name"><br />

      password:<input type="password" length="25" id="password"><br />

      <input type="submit" value="submit">

    </form>

    现在来看这个表单form的action属性: action="<%= request.getContextPaht()%>/myaction.do?ProcName=success":这里的myaction.do

    会被struts所截住(当然需要在web.xml配置文件中配置一下),struts会获取到myaction这个请求,然后便会在struts-config.xml文件中的Action映射中寻找name="myaction"的<action />,并根据该action配置中的type属性,在工程中找到处理该请求的Action类,根据上面给出的action配置示例,action.MyAction类将会处理该请求(具体的处理方法见struts开发示例——登录)。当该类处理结束,比如在这里,经验证,用户输入的名字和密码正确,然后就在该类的execute()方法中写类似这样的一句代码:return actionMapping.findForward("success");这里的actionMapping对象是org.apache.struts.action.ActionMapping类的一个实例;struts会根据findMapping(String path)方法中的参数"success",去struts-config.xml文件中的<action name="myForm" path="/myaction" type="action.MyAction" />的子元素(即<forward />)中寻找name="success"的forward配置,在这里,即为<forward name="success" path="/mystruts/success.jsp" />这个forward配置。找到之后,根据该配置的path属性,页面将转发到工程中mystruts目录下的success.jsp这个页面中来。

       2、配置全局Forwards  

      每一个全局的Forwards需要在<global-forwards>元素中定义一个<forward>子元素。全局 Forwards可以被所有的Action、异常处理以及一些Struts标签(如<html:link>)访问。下面的代码给出了一个标准的全局Forward的配置方法:

    <global-forwards>
         <forward name="myforward" path="/mystruts/newProduct.jsp" />
    </global-forwards>

      这里的<forward />配置中的name属性指向<form-beans />中定义的name="myforward"的<form-bean />,path属性值则表示转发后的页面。

      3、配置局部和全局异常(Exception)
        在Struts中处理异常的方法非常多,然后,为了使处理异常的方式更灵活。Struts框架允许以配置的方式来处理异常。
        Struts中的异常配置可分为局部和全局异常。这两种异常配置的方法完全一样,只是配置代码的位置不同。配置局部异常的<exception>元素在<action>元素中,而全局异常的<exception>元素在<global-exceptions >元素中。局部异常的优先级大于全局异常的优先级。
        下面的代码给出了一个标准的全局异常的配置方法:

    <global-exceptions >
        <exception key="error.name.blank"  type="java.lang.Exception" path="/error.jsp"/>
    </global-exceptions>

        其中key属性表示在属性文件中的key,一但Struts Action的execute方法抛出异常,Struts首先会在局部和全局异常中匹配type属性所指定的异常类型。如果匹配成功,就会跳转到path属性所指的Web资源(在本例中是“/error.jsp”)。如果在error.jsp页面中使用<html:errors/>标签显示错误信息,就会输出key属性所对应的值。    
        <exception>元素除了可以使用path属性指定要跳转的Web资源外,也可以使用handler属性指定用于处理异常的类。如下面的代码所示:

    <global-exceptions>
        <exception key="error.email. invalid"  type="java.lang.Exception" handler="exceptions.EmailException"/>
    </global-exceptions>

        其中exceptions.EmailException类必须继承org.apache.struts.action.ExceptionHandler类,而且我们必须覆盖execute方法。  
        ExceptionHandler类的execute方法的定义如下:
            public ActionForward execute( Exception ex, ExceptionConfig ae, ActionMapping mapping,
                               ActionForm formInstance, HttpServletRequest request,
                               HttpServletResponse response) throws ServletException{} ;

      4、配置控制器(Controller)
        控制器可能是这七个配置项上使用最少的一项。它主要用来覆盖一些默认的Struts设置。下面是几个常用的Struts设置:
        (1) maxFileSize:指定在文件上传时的最大文件尺寸。可以使用K、M和G作为单位。如maxFileSize="2M"。maxFileSize的值只能是整数,不能是小数,如maxFileSize=1.2M是不合法的。
        (2) nocache:告诉Struts是否应该缓冲内容。指定为nocache="true”,Struts将不会缓冲内容。默认值为true。
        (3) contentType:指定默认的ContentType字段值,如果要发送的内容的默认格式是HTML,我们可以指定contentType的值为“text/html”。
        下面的代码是一个完成的控制器的配置:
      <controller maxFileSize="2M"  contentType = “text/html”  nocache = “false” />  

      5、配置信息资源
        信息资源使用<message-resources>元素进行配置。下面是一个配置信息资源的例子:
      <message-resources parameter="struts.application" key="global" />
        其中parameter属性表示保存信息资源的属性文件的位置,对于上面的代码来说,属性文件的位置是<Web根目录>"WEB-INF"classes"struts"application.properties。key属性表示application.properties文件的标识。如果没有key属性,这个属性文件就是默认的属性文件。当指定key属性时,在使用这个属性文件时,需要使用相关标签的bundle属性指定这个key值。
        属性文件中的值可以使用Struts标签来获取,如属性文件中的一个key是key.msg.submit。那么使用<bean:message>标签获取这个属性文件中的key值的代码如下:
        <bean:message key="key.msg.submit" bundle=”global”/>
          属性文件也可以用在获得错误信息上,如在validate方法中使用如下的代码来指定错误提示信息:
        errors.add("name",new ActionMessage("error.name.blank"));
        而在JSP页面中可以使用如下的代码来显示这个错误信息:
      <html:errors property="name" bundle="global"/>
      6、配置Struts插件
        Struts之所以强大,在很大程度上取决于它支持通过插件的方式进行扩展,如前面讲的Validator和Tiles,都是以Struts插件形式发布的。Struts插件使用<plug-in>元素进行配置,如下面的代码所示:

    <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
         <set-property property="pathnames" value="/WEB-INF/validator-rules.xml, /WEB-INF/validator.xml" />
    </plug-in>

        其中className属性指定了Struts要调用的插件类名。property属性指定了插件需要的属性名,而value属性指定了相应的属性值。

      四、配置JDBC数据源
      其配置形式如下:

    <data-sources>
    <data-source>
    <set-property property="driverClass" value="fully qualified path of JDBC driver"/>
    <set-property property="url" value="data source URL"/>
    <set-property property=”mincount” value="the minimum number of connections to open"/>
    <set-property property="password" value="the password used to create connections"/>
    <set-property property="user" value="the username used to create connections"/>
    </data-source>
    </data-sources>

      <data-source>的属性及其描述信息如下:

    Key    绑定在ServletContext上的DataSource实例的索引键,若不设定则缺省为Action.DATA_SOURCE_KEY,如果在应用程序中有多于一个的DataSource,则必须设置Key的值。
    DriverClass    所用的JDBC驱动类(必须的)如:com.microsoft.jdbc.sqlserver.SQLServerDriver
    url    所用的JDBC的URL(必须的)如:jdbc:microsoft:sqlserver://xg088:1433
    MaxCount    同时打开的最大连结数,缺省值为2(可选的)
    MinCount    同时打开的最小连结数,缺省值为1(可选的)
    User    连结到数据库的用户名(必须的)
    Password    连结到数据库的密码(必须的)
    Description    关于DataSource的描述信息(可选的)
    ReadOnly    如果设为true,则表示该连结是只读的,缺省为false。(可选的)
    LoginTimeout    创建连结的最大允许时间,以秒为单位。(可选的)
    AutoCommit    如果为true,则每次execute之后会强制回滚。缺省为true。(可选的)


      举例说明:

    <data-sources>
       <data-source>
           <set-property property=”key” value=” value="WILEY_DATA_SOURCE" />
    <set-property property="driverClass" value="org.gjt.mm.mysql.Driver" />
    <set-property property="url" value="jdbc:mysql://localhost/wileyusers" />
    <set-property property="maxCount" value="5"/>
    <set-property property="minCount" value="1"/>
    <set-property property="user" value="sa"/>
    <set-property property="password" value="yourpassword"/>
    </data-source>
    </data-sources>
  • 相关阅读:
    刚装上最新node,npm install报这个错误!求ndoe大神解答!!!
    NodeJS、NPM安装配置与测试步骤(windows版本)
    使用vue框架运行npm run dev 时报错解决
    【转】C 语言吧 · 问题资料大全【转】
    动态嵌入式DLL木马病毒的发现及清除
    上班族最致命的十种生活方式
    如何避免重复包含一个头文件?#ifndef #define #endif #Pragma
    VC编程经验汇总
    C++学习重点分析
    关于内存对齐
  • 原文地址:https://www.cnblogs.com/pricks/p/1496025.html
Copyright © 2020-2023  润新知