zoukankan      html  css  js  c++  java
  • struts.xml的配置

    <?xml version="1.0" encoding="UTF-8"?>
    <!--第一行必须这样写,这句话必须放在第一行-->
    <!-- -->
    <!--验证文件,xsd和dtd是xml的验证文件,struts的配置文件是要dtd的,文件来源:
            jar包中struts-core______struts-2.3.dtd
            -->
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
    
        
        <!-- 更改Struts默认后缀,这是其中一种方式,还有一种方式是新建配置文件 -->
        <constant name="struts.action.extension" value="action"/>
        
        
        <!--struts标签下有个package标签, extends="struts-default"一般要与
            jar包中struts-core____struts-default.xml中的package中的name属性一致-->
        <package name="proejctPackage" namespace="/project" extends="struts-default">
        
            <!-- name="list"是url中请求的名字
                class="com.kaishengit.action.HomeAction"对应的类的完全限定名
                method表示请求Action中的方法,不写默认为execute
                    result中写请求的响应地址,分为success等..-->
            <action name="list" class="com.kaishengit.action.HomeAction" method="list">
                <result name="success">/WEB-INF/views/list.jsp</result>
            </action>
        </package>
        
        
        <!-- <param name="actionName">list</param> 表示重定向list.action中,不用写list.action
            当修改了后缀为其他的时候,也不用在这里修改,struts会自动更换
            
            
            namespace命名空间,没有定义的时候默认的就是/
                package中的属性namespace 请求的url要这样写localhost/task/home.action
                result中的<param name="namespace">/project</param> 表示重定向的位置是
                localhost/project/list.action
                
                
                传参:只要name值不是actionName,namespace,suppressEmptyParameters,parse,anchor这
                    五个值都会自动当参数传过去
                    <param name="id">${projectId}</param> -->
        <package name="taskPackage" namespace="/task" extends="struts-default">
        
            <action name="home" class="com.kaishengit.action.HomeAction">
                <result type="redirectAction">
                    <param name="actionName">list</param>
                    <param name="namespace">/project</param>
                    <param name="id">${projectId}</param>
                </result>
                <!-- 
                <result type="redirect">index.jsp</result>
                <result name="success">/WEB-INF/views/home.jsp</result>
                 -->
            </action>
            
            
            <!--使用通配符,了解即可 -->
            <action name="*_*" class="com.kaishengit.action.{1}Action" method="{2}">
                <result>/WEB-INF/views/list.jsp</result>
            </action>
         
        </package>
        
    </struts>    

     过滤器中  给struts.xml配置 ,不用在程序中写死哪些需要过滤,哪些不需要

    <interceptor-ref name="login">
                <param name="namespace">/admin</param>
                <param name="actionNames">home,login</param>
                <param name="sessionName">curr_Admin</param>
    </interceptor-ref>

    这时候就要在LoginInterceptor中修改

    private List<String> actionNameList = new ArrayList<String>();
            private String namespace;
            private String actionNames;
            private String sessionName;
            
            @Override
            public String intercept(ActionInvocation invocation) throws Exception {
                ActionProxy proxy = invocation.getProxy();
                String namespace = proxy.getNamespace();
                String actionName = proxy.getActionName();
                
                if(this.namespace.equals(namespace) && actionNameList.contains(actionName)) {
                    return invocation.invoke();
                } else {
                    ActionContext actionContext = invocation.getInvocationContext();
                    Map<String, Object> session = actionContext.getSession();
                    
                    Object currAdmin = session.get(sessionName);
                    if(currAdmin == null) {
                        return Action.LOGIN;
                    } else {
                        return invocation.invoke();
                    }
                }
            }
    
        //要生成他们的get和set 其中actionNames的要修改成
            public void setActionNames(String actionNames) {
                if(actionNames.indexOf(",") != -1) {
                    String[] array = actionNames.split(",");
                    for(String name : array) {
                        actionNameList.add(name);
                    }
                } else {
                    actionNameList.add(actionNames);
                }
            }

    配置文件越来越大,导致修改不便,查看不容易

    每个模块的放在一个.xml中,例如struts-admin.xml

    <package name="AdminPackage" namespace="/admin" extends="basePackage">
                
    </package>

    struts.xml成了主配置文件,里面是一些公共的配置,还有对其他.xml的导入

    <struts>
        
        <!-- 更改Struts默认后缀 -->
        <constant name="struts.action.extension" value="action"/>
        <!--<constant name="struts.multipart.maxSize" value="10485760"/>是修改默认文件上传大小限制-->
        <constant name="struts.multipart.maxSize" value="10485760"/>
    <!--导入其他xml配置-->    
        <include file="struts-admin.xml"/>
        <include file="struts-product.xml"/>
        <include file="struts-file.xml"/>
        <include file="struts-json.xml"/>
        
        <package name="basePackage" extends="struts-default" abstract="true">
            <interceptors>
                <interceptor name="myTimer" class="com.kaishengit.interceptor.TimerInterceptor"/>
                <interceptor name="login" class="com.kaishengit.interceptor.LoginInterceptor"/>
                <interceptor-stack name="myStack">
                    <interceptor-ref name="defaultStack"/>
                    <interceptor-ref name="login">
                        <param name="namespace">/admin</param>
                        <param name="actionNames">home,login</param>
                        <param name="sessionName">curr_Admin</param>
                    </interceptor-ref>
                </interceptor-stack>
            </interceptors>
            
            <default-interceptor-ref name="myStack"/>
            
            <global-results>
                <result name="login" type="redirectAction">
                    <param name="actionName">home</param>
                    <param name="namespace">/admin</param>
                    <param name="error">1002</param>
                </result>
            </global-results>
        </package>
    </struts>
  • 相关阅读:
    ASP.NET中常用服务器端与客户端交互!
    使用WebDeployment Project改善VS2005发布网站问题 (一) 基础
    MSN改密码
    Ajax学习(一)
    Visual Studio2005 + Visual SourceSafe 2005 实现团队开发、源代码管理、版本控制
    手把手教你如何配置和编译ogre 1.7.0 + cegui 0.7.1
    What's Coming in the June 2010 DirectX SDK
    黄仁勋:相信你正在做的事。
    [转载] 翻译 西川善司著针对3D游戏爱好者的”METAL GEAR SOLID 4”图形讲座(下)
    glPushAttrib里的各个BIT都save了些什么
  • 原文地址:https://www.cnblogs.com/itliucheng/p/4459584.html
Copyright © 2011-2022 走看看