struts

/xml配置文件/struts2的配置/struts.xml
<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
    
    
    
    
<!--下面这一段要剪切到web.xml    
 配置前端控制器  拦截所有的浏览器请求 -->
  <filter>
      <filter-name>strust2_3</filter-name>
      <!-- 在整个项目下搜资源:ctrl+shift+t -->
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  
  <filter-mapping>
      <filter-name>strust2_3</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  
  
  
<!-- 如果整合spring框架,必须用下面的--> 
    <filter>
          <filter-name>struts2</filter-name>
          <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
          <init-param>
              <param-name>struts.objectFactory</param-name>
              <param-value>spring</param-value>
          </init-param>
          <init-param>
                  <param-name>struts.convention.package.locators</param-name>
                  <param-value>web</param-value>
          </init-param>
  </filter>
  <filter-mapping>
          <filter-name>struts2</filter-name>
          <url-pattern>/*</url-pattern>
  </filter-mapping>
    <!-- 配置前端控制器 完毕--> 
    
    
    
    
    
    
<struts>
    
    
    <!-- 可以覆盖前面加载的配置文件内容,下面这句表示只过滤.action页面-->
    <!-- <constant name="struts.action.extension" value="action"></constant> -->
    
    <!-- 上传时文件稍大会报错,需要配置大小限制
    <constant name ="struts.multipart.maxSize" value ="100000000"/> -->
    
    <!-- 使用动态方法
    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> -->
    
    <!-- name: 包名 对于咱们来说意义不大 作用:给别人继承用  
    extends: 继承  默认值:默认基层struts2提供的一个包 包名:struts-default
             继承哪个包 那这个包下的所有东西都有一份
    
    namespace: 名称空间   和浏览器访问地址相关
    abstract:抽象的 默认是false 如果写成了true 代表当前的pageage下面不能出现action 他们2个是互斥的
             该包只能被用来继承
    -->
    <!-- <package name="test1" extends="struts-default" namespace="/">
         做action的地址访问路径 
             name:action的名字  和浏览器访问地址相关
            
             namespace和action的name:组成了当前action的访问地址,比如/user/add
            和/user/delete两个页面,可以放在同一个package,该package
            的namespace是/user,两个action的name分别是/add和/delete。
            name不能有层级关系,比如name=/add/one不会处理/user/add/one。
                 
             class:全限定名
             method: 可以不写 默认就是执行叫一个execute的方法,不用写括号和参数。。。
        
         <action name="hello" class="cn.itcast.action.ActionDemo1" >
             result: 接收返回值              
            name:action执行方法返回abc,则会返回abc对应的/jsp/demo.jsp
             <result name="abc">/jsp/demo.jsp</result>
         </action>
    </package> -->
    
    
    
    
    <!-- 引入外部的action配置  -->
    <include file="struts_user.xml"></include> 
    
    
    <!-- action的3种创建方式 -->
    <package name="test3" extends="struts-default" namespace="/">
    
        <!--全局结果页面global-results:如下配置的话,该package处理的所有方法
        只要返回success就会跳转/error.jsp,某action覆盖它则该action走自己的;
        result的type定义跳转页面的方式,常见的有:
        dispatcher:默认,请求转发
        redirect:重定向
        chain:请求转发到action,比如<result name="a" type="chain">b</result>
            表示返回值为a的请求,用<result name="b">处理,如果
            <result name="b">/index.jsp</result>,则返回/index.jsp
        redirectAction:重定向到action        
        stream:文件下载,这个没用过                                -->
        <global-results>
            <result name="success" type="redirect">/error.jsp</result>
        </global-results>
        
        <action name="hello2" class="cn.itcast.action.ActionDemo2" >
            <result name="success">/jsp/demo.jsp</result>
        </action>
        
        <action name="hello3" class="cn.itcast.action.ActionDemo3" >
            
        </action>
        
        <!-- action的3种访问方式 -->
        <!-- method方式 -->
        <action name="product_save" class="cn.itcast.action.ActionDemo4" method="save" >
         </action>
         <action name="product_delete" class="cn.itcast.action.ActionDemo4" method="delete" >
         </action>
         <action name="product_update" class="cn.itcast.action.ActionDemo4" method="update" >
         </action>
         <action name="product_find" class="cn.itcast.action.ActionDemo4" method="find" >
         </action>
         
         <!-- 通配符方式(掌握)  
                 *: save
                    delete
                    update
                    find
                    
                 {1} :第一个星号的值
         
         -->                 
         <action name="product_*" class="cn.itcast.action.ActionDemo4" method="{1}" ></action>
         
        <action name="*_*" class="cn.itcast.action.{1}"  method="{2}" ></action>
         
         <!-- 动态方法方式(了解) 
                 1 动态方法方式默认是关闭的  需要开启   default.properties
                 2 页面要使用特殊写法,比如/user!add
         -->
         <action name="product" class="cn.itcast.action.ActionDemo4" ></action>
             
    </package>
    
    
    
    
    
    

    
    
    
    
    <package name="CustomerDao1" extends="struts-default" namespace="/">
    
        <!-- 拦截器的配置方法1 -->
        <interceptors>
            <interceptor name="i1" class="com.interception.I1"></interceptor>
            <interceptor name="i2" class="com.interception.I2"></interceptor>
        </interceptors>    
        
        <action name="Customer_*" method="{1}_action" class="com.web.action.CustomerAction">
            <result name="{1}">/index.jsp</result>
            
            <!-- 拦截器的引用方法1,这里引入自定义拦截器后,
            必须手动引入默认拦截器defaultStack -->
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <interceptor-ref name="i2"></interceptor-ref>
            <interceptor-ref name="i1"></interceptor-ref>
        </action>
    </package>    
    
    
    <package name="A" extends="struts-default" namespace="/">
    
        <!-- 拦截器的配置方法2 -->
        <interceptors>
            <interceptor name="i1" class="com.interception.I1"></interceptor>
            <interceptor name="i2" class="com.interception.I2"></interceptor>
            
            <interceptor-stack name="myStack">
                <interceptor-ref name="defaultStack"></interceptor-ref>
                <interceptor-ref name="i1"></interceptor-ref>
                <interceptor-ref name="i2"></interceptor-ref>
            </interceptor-stack>
        </interceptors>        


        <action name="a_*" class="com.action.A"  method="a{1}">
            <result name="login">/1.jsp</result>
            <result name="zhucefailed">/3.jsp</result>
            <result name="zhucesuccess">/3.jsp</result>            
            <result >/2.jsp</result>

            <!-- 拦截器的引用方法2-->
            <interceptor-ref name="myStack"></interceptor-ref>
        </action>    
    </package>
    
    
    <!--
    使用这个拦截器可以拦截部分方法,例如这里拦截a_*的所有方法,除了a1,a2方法(用来登陆)。
    也就是说没有登录的情况下,a_*的所有页面都打不开,包括不存在的页面,通过a1打开登陆ui,
    提交到a2登陆成功情况下session获得user,此时可以通过所有的拦截器。这种情况下似乎不能用第二种拦截器引用方法。
    public class I1 extends MethodFilterInterceptor {

    @Override
    protected String doIntercept(ActionInvocation arg0) throws Exception {
        Object user = ServletActionContext.getRequest().getSession().getAttribute("user");
        if (user == null) {
            ServletActionContext.getContext().put("result1", "FUCKYOU");
            return "login";
        } else {
            return arg0.invoke();
        }
    }-->
    <package name="A" extends="struts-default" namespace="/">
        <interceptors>
            <interceptor name="i1" class="com.interception.I1"></interceptor>
            <interceptor name="i2" class="com.interception.I2"></interceptor>            
        </interceptors>        


        <action name="a_*" class="com.action.A"  method="a{1}">
            <result  name="login">/1.jsp</result>
            <result name="zhucefailed">/WEB-INF/3.jsp</result>
            <result name="zhucesuccess">/WEB-INF/3.jsp</result>            
            <result name="index">/index.jsp</result>
            <result name="fff">/WEB-INF/2.jsp</result>
            <result type="redirectAction">a_f</result>

            <interceptor-ref name="i1">            
                <!--excludeMethods这个参数,只能用于继承MethodFilterInterceptor 类的拦截器上-->
                 <param name="excludeMethods">a1,a2</param>
            </interceptor-ref>
            <interceptor-ref name="i2"></interceptor-ref>
            <interceptor-ref name="defaultStack"></interceptor-ref>
        </action>    
    </package>
    
    <!--上面配置的都是局部拦截器,即每个action要用的拦截器在自己里面配置,
    全局拦截器可以使该package下所有action都使用此拦截器。    首先配置一个package,让它继承struts-default。然后配置自己的拦截器和global-results,因为这里会拦截下很多请求,需要处理。如果action没有配置局部拦截器,则走全局;如果配置了局部,就只走局部,不走全局。-->
    <package name="all" extends="struts-default">
        <interceptors>
            <!-- 自定义的拦截器 -->
            <interceptor name="mi" class="cn.me.MyInterceptor"></interceptor>
            <!-- 定义拦截器栈 -->
            <interceptor-stack name="ms">
                <!-- 默认拦截器 -->
                <interceptor-ref name="defaultStack"></interceptor-ref>
                <!-- 自定义拦截器 -->
                <interceptor-ref name="mi"></interceptor-ref>
            </interceptor-stack>
        </interceptors>
        <!-- 默认拦截器 -->
        <default-interceptor-ref name="ms"></default-interceptor-ref>
        <!-- 全局结果集 -->
        <global-results>
            <result name="login">/index.jsp</result>
        </global-results>
    </package>
    <!--接下来就就跟平常写配置文件没啥区别了,只是让其它包继承自我们自己的加了拦截器的包就可以了-->
    <package name="Struts" extends="all">
        <action name="Test" class="con.me.action.TestAction">
            <result name="success">/success.jsp</result>
            <result name="erroe">/error.jsp</result>
        </action>
    </package>


    
</struts>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值