• 配置文件参考


    SAStruts使用的配置文件说明。

    web.xml

    Servlet容器用的配置文件,放置在WEB-INF目录下。sa-struts-tutorial工程放置在webapp/WEB-INF目录下。

    <?xml version="1.0"?>
    
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
        version="2.4">
    
        <context-param>
            <param-name>sastruts.VIEW_PREFIX</param-name>
            <param-value>/WEB-INF/view</param-value>
        </context-param>
        
        <filter>
            <filter-name>encodingfilter</filter-name>
            <filter-class>
                org.seasar.extension.filter.EncodingFilter
            </filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
        </filter>
    
        <filter>
            <filter-name>s2filter</filter-name>
            <filter-class>
                org.seasar.framework.container.filter.S2ContainerFilter
            </filter-class>
        </filter>
    
        <filter>
            <filter-name>hotdeployfilter</filter-name>
            <filter-class>
                org.seasar.framework.container.hotdeploy.HotdeployFilter
            </filter-class>
        </filter>
    
        <filter>
            <filter-name>routingfilter</filter-name>
            <filter-class>
                org.seasar.struts.filter.RoutingFilter
            </filter-class>
            <init-param>
                <param-name>jspDirectAccess</param-name>
                <param-value>false</param-value>
            </init-param>
        </filter>
            
        <filter-mapping>
            <filter-name>encodingfilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
        <filter-mapping>
            <filter-name>s2filter</filter-name>
            <url-pattern>/*</url-pattern>
            <dispatcher>REQUEST</dispatcher>
            <dispatcher>FORWARD</dispatcher>
            <dispatcher>INCLUDE</dispatcher>
        </filter-mapping>
    
        <filter-mapping>
            <filter-name>hotdeployfilter</filter-name>
            <url-pattern>/*</url-pattern>
            <dispatcher>REQUEST</dispatcher>
            <dispatcher>FORWARD<dispatcher>
            <dispatcher>INCLUDE</dispatcher>
        </filter-mapping>
        
        <filter-mapping>
            <filter-name>routingfilter</filter-name>
            <url-pattern>/*</url-pattern>
            <dispatcher>REQUEST</dispatcher>
        </filter-mapping>
        
        <servlet>
            <servlet-name>action</servlet-name>
            <servlet-class>
                org.apache.struts.action.ActionServlet
            </servlet-class>
            <init-param>
                <param-name>config</param-name>
                <param-value>/WEB-INF/struts-config.xml</param-value>
            </init-param>
            <init-param>
                <param-name>configFactory</param-name>
                <param-value>
                    org.seasar.struts.config.S2ModuleConfigFactory
                </param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
    
        <servlet>
            <servlet-name>s2container</servlet-name>
            <servlet-class>
                org.seasar.framework.container.servlet.S2ContainerServlet
            </servlet-class>
            <load-on-startup>2</load-on-startup>
        </servlet>
        
        <servlet-mapping>
            <servlet-name>action</servlet-name>
            <url-pattern>*.do</url-pattern>
        </servlet-mapping>
        
        <servlet-mapping>
            <servlet-name>s2container</servlet-name>
            <url-pattern>/s2container</url-pattern>
        </servlet-mapping>
        
        <jsp-config>
            <jsp-property-group>
                <url-pattern>*.jsp</url-pattern>
                <el-ignored>false</el-ignored>
                <page-encoding>UTF-8</page-encoding>
                <scripting-invalid>false</scripting-invalid>
                <include-prelude>/WEB-INF/view/common/common.jsp</include-prelude>
            </jsp-property-group>
        </jsp-config>
    </web-app>
    

    JSP页面等表示层的文件的根目录通过sastruts.VIEW_PREFIX指定。根目录放在通过浏览器不能 直接访问的/WEB-INF的文件夹下比较好。

    EncodingFilter是请求参数的编码过滤器。

    S2ContainerFilter是Seasar2对请求以及响应的Servlet用的对象进行操作的过滤器。

    HotdeployFilter是Seasar2对JAVA类变更后进行HOT应用的过滤器。

    RoutingFilter对URL进行美化(Struts的.do之类的扩展名不显示)的过滤器。 默认,禁止对JSP直接访问,如果有此必要将参数jspDirectAccess设置为true。

    filter标签和filter-mapping标签的顺序非常重要。 一定要记住按照上面的顺序进行定义。

    ActionServlet是Struts用的Servlet。

    S2ContainerServlet是Seasar2初始化和终止处理用的Servlet。 为了在ActionServlet之后进行启动,请将load-on-startup的值设置为比ActionServlet的load-on-startup的值更大。

    S2ModuleConfigFactory是实现不使用struts-config.xml进行开发的类。

    jsp-config标签的详细请参照这里

    struts-config.xml

    Struts的配置文件。WEB-INF文件夹下。sa-struts-tutorial工程放在webapp/WEB-INF下。

    <?xml version="1.0"?>
    
    <!DOCTYPE struts-config PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
        "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
    
    <struts-config>
    
        <form-beans>
        </form-beans>
    
        <global-exceptions>
        </global-exceptions>
    
        <global-forwards>
        </global-forwards>
    
        <action-mappings>
        </action-mappings>
        
        <controller
            maxFileSize="1024K"
            bufferSize="1024"
            processorClass="org.seasar.struts.action.S2RequestProcessor"
            multipartClass="org.seasar.struts.upload.S2MultipartRequestHandler"/>
    
        <message-resources parameter="application"
            factory="org.seasar.struts.util.S2PropertyMessageResourcesFactory"/>
    
        <plug-in className="org.seasar.struts.validator.S2ValidatorPlugIn">
            <set-property
              property="pathnames"
              value="/WEB-INF/validator-rules.xml"/>
        </plug-in>
    </struts-config>
    

    controller标签的processorClass属性设为S2RequestProcessor。 通过S2RequestProcessor,按照SAStruts的实现方式对请求进行处理。multipartClass属性设为S2MultipartRequestHandler。 通过S2MultipartRequestHandler,文件上传时发生文件超大的异常的时候,能够得到响应的异常信息。(Struts不能取得)。

    message-resources标签设定为S2PropertyMessageResourcesFactory。 通过S2PropertyMessageResourcesFactory异常信息的变更能及时反映。

    plug-in标签设置为S2ValidatorPlugIn。 通过S2ValidatorPlugIn检测注释的变更能及时反映。

    validator-rules.xml

    在WEB-INF下的validator-rules.xml中对验证进行定义。 对于示例工程sa-struts-tutorial,在webapp/WEB-INF文件夹下。SAStruts是用Struts标准的validator-rules.xml文件, 但是增加了minbytelength、maxbytelength、longRange验证的定义。

    <validator    name="minbytelength"
                classname="org.seasar.struts.validator.S2FieldChecks"
                   method="validateMinByteLength"
             methodParams="java.lang.Object,
                           org.apache.commons.validator.ValidatorAction,
                           org.apache.commons.validator.Field,
                           org.apache.struts.action.ActionMessages,
                           org.apache.commons.validator.Validator,
                           javax.servlet.http.HttpServletRequest"
                  depends=""
                      msg="errors.minbytelength"/>
    
    
    <validator       name="maxbytelength"
                classname="org.seasar.struts.validator.S2FieldChecks"
                   method="validateMaxByteLength"
             methodParams="java.lang.Object,
                           org.apache.commons.validator.ValidatorAction,
                           org.apache.commons.validator.Field,
                           org.apache.struts.action.ActionMessages,
                           org.apache.commons.validator.Validator,
                           javax.servlet.http.HttpServletRequest"
                  depends=""
                      msg="errors.maxbytelength"/>
                      
    <validator       name="longRange"
                classname="org.seasar.struts.validator.S2FieldChecks"
                   method="validateLongRange"
             methodParams="java.lang.Object,
                           org.apache.commons.validator.ValidatorAction,
                           org.apache.commons.validator.Field,
                           org.apache.struts.action.ActionMessages,
                           org.apache.commons.validator.Validator,
                           javax.servlet.http.HttpServletRequest"
                  depends="long"
                      msg="errors.range"/>
    

    app.dicon

    app.dicon是应用启动时最先读入的文件。app.dicon应该放在Class-path定义的路径下,sa-struts-tutorial放在src/main/resources目录下。

    app.dicon
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
    	"http://www.seasar.org/dtd/components24.dtd">
    <components>
        <include path="convention.dicon"/>
        <include path="aop.dicon"/>
        <include path="j2ee.dicon"/>
        <include path="s2jdbc.dicon"/>
    	
        <component name="actionMessagesThrowsInterceptor"
            class="org.seasar.struts.interceptor.ActionMessagesThrowsInterceptor"/>
    </components>
    

    为了读取别的定义文件,使用了标签include,被include文件也可以include别的文件, 支持include嵌套。 以app.dicon为根节点,形成了一棵配置文件树。

    convention.dicon是用于约定定义的文件。

    aop.dicon是调试等常用拦截器的定义文件,包含在s2-framework-xxx.jar中。 拦截器,方法调用前后的AOP的模块。AOP的详细介绍, 请参照这里

    j2ee.dicon是事物拦截器的定义文件,包含在s2-extension-xxx.jar中。

    s2jdbc.dicon是S2JDBC的定义文件。

    为了拦截Action以外发生的信息、 以便于使用ActionMessages(html:errors)来输出而使用了拦截器ActionMessagesThrowsInterceptor。 关于拦截器ActionMessagesThrowsInterceptor的详细信息, 请参照这里

    convention.dicon

    convention.dicon用来定义约定。sa-struts-tutorial工程放置在src/main/resources文件夹下。

    convention.dicon
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
        "http://www.seasar.org/dtd/components24.dtd">
    <components>
        <component
            class="org.seasar.framework.convention.impl.NamingConventionImpl">
            <initMethod name="addRootPackageName">
                <arg>"tutorial"</arg>
            </initMethod>
        </component>
        <component
            class="org.seasar.framework.convention.impl.PersistenceConventionImpl"/>
    </components>
    

    addRootPackageName的tutorial,根据项目的实际填写。 根目录的定义详细,请参照这里

    env.txt

    env.txt用来定义Seasar2的运行环境。sa-struts-tutorial工程放置src/main/resources目录下。

    默认定义了下列运行环境。

    • ut单元测试环境。
    • ct集成测试环境。
    • it综合测试环境。
    • product实际运行环境。没有定义env.txt时的默认的环境。

    env.txt设置为ct的时候,Seasar2能够使用热部署(HOT deploy)。sa-struts-tutorial工程、env.txt设置为ct。

    env.txt为it或product(没有)设置的时候。Seasar2只能进行冷部署(COOL deploy)。 冷部署的时候,当JAVA类进行了修改后只能重启来进行更新。但是相对于热部署而言,执行速度高。

    env.txt为ut的时候,Seasar2为缓部署(WARM deploy)。 缓部署的时候,即不能马上识别JAVA类的更新,也不需要通过重启服务来进行应用部署。 而是利用已部署应用的缓存,使用已经用过的组件来实现高速响应。

    热部署的时候,所有已部署的内容全部破弃,request需要的组件全部重新部署。

    缓部署相对于冷部署的优点是,应用重启快。 例如,冷部署的时候,1个测试实例只使用了一个组件的时候,也重新部署所有的组件。 而缓部署的时候,指重新部署需要的组件,从而测试实例能够高速执行。而且,测试的时候,也不需要热部署。

    env_ut.txt

    在文件env_ut.txt中定义使用S2Unit进行单体测试的环境,sa-struts-tutorial工程中,放置在src/main/resources文件夹中,env_ut.txt的値设置为ut。

    s2container.dicon

    s2container.dicon是Seasar2自己进行定制的配置文件。sa-struts-tutorial工程,放置在src/main/resources目录下。

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
        "http://www.seasar.org/dtd/components24.dtd">
    <components>
        <include condition="#ENV == 'ut'" path="warmdeploy.dicon"/>
        <include condition="#ENV == 'ct'" path="hotdeploy.dicon"/>
        <include condition="#ENV != 'ut' and #ENV != 'ct'" path="cooldeploy.dicon"/>
    </components>
    

    根据include标签的condition属性值,当满足特定的条件时,加载对应的设置文件#ENV是env.txt里定义的值。 条件使用OGNL进行定义。warmdeploy.dicon、hotdeploy.dicon、cooldeploy.dicon文件包含在s2-framework-xxx.jar中。

    根据env.txt里定义的值,通过s2container.dicon里的不同判断条件,来使用Seasar2的不同部署方法。

    creator.dicon

    creator.dicon是自动生成目录包.action等JAVA的配置情报的设定文件。ます。sa-struts-tutorial工程,在src/main/resources目录下。

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
        "http://www.seasar.org/dtd/components24.dtd">
    <components>
        <include path="convention.dicon"/>
        <include path="customizer.dicon"/>
    	
        <component
            class="org.seasar.framework.container.creator.ActionCreator"/>
        <component
            class="org.seasar.struts.creator.FormCreator"/>
        <component
            class="org.seasar.framework.container.creator.ServiceCreator"/>
        <component
            class="org.seasar.framework.container.creator.DtoCreator"/>
        <component
            class="org.seasar.framework.container.creator.InterceptorCreator"/>
    </components>
    

    action、form、service等等不同的包对应的Creator进行了定义。

    customizer.dicon

    customizer.dicon是对Creator生成的配置信息进行定制的设定文件。sa-struts-tutorial工程在src/main/resources目录下。

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
        "http://www.seasar.org/dtd/components24.dtd">
    <components>
        <include path="default-customizer.dicon"/>
    	
        <component name="actionCustomizer"
            class="org.seasar.framework.container.customizer.CustomizerChain">
            <initMethod name="addAspectCustomizer">
                <arg>"aop.traceInterceptor"</arg>
            </initMethod>
            <initMethod name="addAspectCustomizer">
                <arg>"actionMessagesThrowsInterceptor"</arg>
            </initMethod>
            <initMethod name="addCustomizer">
                <arg>
                    <component
                        class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/>
                </arg>
            </initMethod>
            <initMethod name="addCustomizer">
                <arg>
                    <component
                        class="org.seasar.struts.customizer.ActionCustomizer"/>
                </arg>
            </initMethod>
        </component>
    	
        <component name="formCustomizer"
            class="org.seasar.framework.container.customizer.CustomizerChain"/>
            
        <component name="serviceCustomizer"
            class="org.seasar.framework.container.customizer.CustomizerChain">
            <initMethod name="addAspectCustomizer">
                <arg>"aop.traceInterceptor"</arg>
            </initMethod>
            <initMethod name="addCustomizer">
                <arg>
                    <component
                        class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/>
                </arg>
            </initMethod>
        </component>
    </components>
    

    为了对action和Servic的配置进行定制, 追加了actionCustomizer和serviceCustomizer的定义。

    aop.traceInterceptor是追踪用的日志输出的拦截器,在aop.dicon里进行了定义。

    actionMessagesThrowsInterceptor是对action以外,用ActionMessages(html:errors)来对信息进行输出的拦截器,已经在app.dicon里进行了定义。

    TxAttributeCustomizer是为了实现自动事物处理而进行的定制。 詳細请参考这里

    ActionCustomizer是Action被部署时, 对Struts的配置信息进行自动更新的类,也是SAStruts里最重要的类。

    jdbc.dicon

    jdbc.dicon是定义数据库连接的配置文件。sa-struts-tutorial工程在src/main/resources目录下。

    jdbc.dicon的详细信息,请参照这里

    s2jdbc.dicon

    S2JDBC使用的配置文件。sa-struts-tutorial工程在src/main/resources目录下。

    s2jdbc.dicon的详细信息,请参照这里

    log4j.properties

    log4j使用的配置文件sa-struts-tutorial工程在src/main/resources目录下。

    log4j.category.org.seasar=DEBUG, C
    log4j.additivity.org.seasar=false
    
    log4j.category.tutorial=DEBUG, C
    log4j.additivity.tutorial=false
    
    log4j.appender.C=org.apache.log4j.ConsoleAppender
    log4j.appender.C.Target=System.out
    log4j.appender.C.ImmediateFlush=true
    log4j.appender.C.layout=org.apache.log4j.PatternLayout
    log4j.appender.C.layout.ConversionPattern=%-5p %d [%t] %m%n
    
    log4j.rootLogger=INFO, A1
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
    

    tutorial部分的定义,设置为根目录名。 根目录的详细信息,请参照这里

    Tomcatのserver.xml

    使用Tomcat,在GET请求出现文字乱码的时候,conf/server.xml的Connector标签如下所示进行定义。

    <Connector port="8080" ... useBodyEncodingForURI="true"...
    

    使用Tomcat,URL出现乱码的时候。、conf/server.xml的Connector如下所示进行定义。UTF-8 的部分,根据encodingfilter的设定进行调整。

    <Connector port="8080" ... URIEncoding="UTF-8"...
    

    Tomcatのcontext.xml

    使用Tomcat,热部署的情况下, 保存在Session里的ActionForm或者Dto可能失效 这是因为,Tomcat对Session进行序列化,Seasar2不能进行访问的情况下不能进行反向序列化。

    为了部队Seesion进行序列化,反向序列化, 去掉conf/context.xml的标签Manager的注释。

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <Manager pathname="" />
    

    消息资源

    应用程序使用的消息,在xxx.properties里定义。sa-struts-tutorial工程在src/main/resources目录下有application(_ja).properties文件。

    多语言对应的时候使用xxx_ja.properties。xxx部分,在struts-config.xml的标签message-resources的parameter属性里设定。

    <message-resources parameter="xxx"
        factory="org.seasar.struts.util.S2PropertyMessageResourcesFactory"/>
    

    推荐使用PropEdit进行多语言properties文件设定

  • 相关阅读:
    ios状态栏
    RGBA设置颜色
    应用程序的生命周期(转)
    UIViewController的生命周期
    UIViewController的创建
    UIButton
    NSUserDefaults
    打印结构体
    iOS 界面间的传值 属性传值 代理传值
    如何安装Homebrew
  • 原文地址:https://www.cnblogs.com/aggavara/p/2716402.html
Copyright © 2020-2023  润新知