Struts2 拦截器 默认Action 一些常量的设置 Result常用的结果类型

默认Action

在当你进行调用Action的时候,如果这个action不存在,默认Action就起到了作用,配置会调用默认的action! 在src文件夹内的struts.xml文件内,写入.

<default-action-ref name="defaultAction" />
    <action name="defaulsuccesstAction" class="com.zking.dome.struts.DefaultAction"></action>

一些常量的设置

    <!-- 指定由spring负责action对象的创建 -->
    <constant name="struts.objectFactory" value="spring" />
    <!-- 所有匹配*.action的请求都由struts2处理 -->
    <constant name="struts.action.extension" value="action" />
    <!-- 是否启用开发模式 -->
    <constant name="struts.devMode" value="true" />
    <!-- struts配置文件改动后,是否重新加载 -->
    <constant name="struts.configuration.xml.reload" value="true" />
    <!-- 设置浏览器是否缓存静态内容 -->
    <constant name="struts.serve.static.browserCache" value="false" />
    <!-- 请求参数的编码方式 -->
    <constant name="struts.i18n.encoding" value="utf-8" />
    <!-- 每次HTTP请求系统都重新加载资源文件,有助于开发 -->
    <constant name="struts.i18n.reload" value="true" />
    <!-- 文件上传最大值 -->
    <constant name="struts.multipart.maxSize" value="104857600" />
    <!-- 让struts2支持动态方法调用 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <!-- Action名称中是否还是用斜线 -->
    <constant name="struts.enable.SlashesInActionNames" value="false" />
    <!-- 允许标签中使用表达式语法 -->
    <constant name="struts.tag.altSyntax" value="true" />
    <!-- 对于WebLogic,Orion,OC4J此属性应该设置成true -->
    <constant name="struts.dispatcher.parametersWorkaround" value="false" />

拦截器


Result返回结果类型

  • dispatcher(默认) 转发
    • 底层使用RequestDispatcher转发请求
  • redirect 重定向到Action
    • 底层使用sendRedirect将请求重定向
  • redirectAction action跳action
    • 重定向到action
    • chain type=”chain”表示请求转发至另一个action
    • 举例:
 <package name="default" extends="struts-default">
      <!--第一个action-->     
      <action name="名字" class="com.zking.dome.sd">
         <!--   结果类型-->
         <result name="succeed" type="redirectAction">
            <!-- name不能改变   值,填写你需要跳转的Action的name-->
            <param name="actionName">beibiao</param>
         </result>        
      </action>

      <!--被跳转的action-->
      <action name="two名字" class="com.zking.dome.two">
         <result name="succeed" type="dispatcher" >
            test.html  
         </result>
      </action>

   </package>  

拦截器

简介:

拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。 

拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。

拦截器栈(Interceptor Stack)
拦截器栈(Interceptor Stack)类似于过滤器链。拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器栈的拦截器就会按其之前定义的顺序被调用。
也可以叫做拦截器链(Interceptor Stack),拦截器栈一词更明确的表名了连接器链的实现方式。
Struts2的拦截器和Filter类似。在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept方法后,会执行Action的execute方法。
当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器


区别
拦截器,它和过滤器,组成核心的组件,它与过滤器的区别,在于,过滤器,几乎过滤所有的,而它只专注于,action的拦截。


工作原理图
interceptor


操作流程

  • 第一种:实现Interceptor接口,然后重写

public class Test implements Interceptor {
    private static final long serialVersionUID = 1L;

    @Override
    public void destroy() {
        //销毁 时触发
    }

    @Override
    public void init() {
      //建立时  触发
    }

    @Override
    public String intercept(ActionInvocation arg0) throws Exception {
        // 编写  拦截  语句
        //放行
        return arg0.invoke(); ;
    }

}
  • 第二种: 继承AbstractInterceptor类,实现intercept()方法 推荐使用
public class Login_Interceptor  extends AbstractInterceptor{

    private static final long serialVersionUID = 1L;

    @Override  //拦截器
    public String intercept(ActionInvocation arg0) throws Exception {

       ActionConfig actionconfig=arg0.getProxy().getConfig();
       Map<String, String> map=actionconfig.getParams();

       if(session.get("user")!=null){//当是,登录的           
            return arg0.invoke(); 放行
        }

        //返回的字符串,和action 的映射值一样,取调用对应的结果
        return "defeated";
    }



}

在struts.xml配置引用拦截器

打开src文件夹内的struts.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <!-- 让struts2支持动态方法调用 附加 2.3.3 默认关闭     常量 修改-->
  <constant name="struts.enable.DynamicMethodInvocation" value="true" />
  <!-- 通过  常量  修改编码 -->
  <constant name="struts.custom.i18n.encoding" value="UTF-8"/>
  <!-- 修改 常量   开发模式     及时反馈(更新 服务) -->
  <constant name="struts.devMode" value="true"></constant>

   <package name="default" extends="struts-default">  

   <!-- 拦截器 -->
   <interceptors>
       <!-- 单个拦截器   登录-->
       <interceptor name="login_interceptor" class="com.interceptor.Login_Interceptor"></interceptor>
        <!-- 单个拦截器   编码-->
       <interceptor name="encoding_interceptor" class="com.interceptor.Encoding_Interceptor"></interceptor>
       <!-- 拦截器 栈 --> 
       <interceptor-stack name="my_interceptor">  <!--  加入拦截器栈 -->
            <!-- 把 单个  拦截器 放入 栈中, 必须,先  放入 默认的  defaultStack 拦截器,否者,所有的action都无法进入 -->
           <interceptor-ref name="defaultStack"></interceptor-ref>
           <interceptor-ref name="login_interceptor"></interceptor-ref>
           <interceptor-ref name="encoding_interceptor"></interceptor-ref>
       </interceptor-stack>

   </interceptors>

   <!-- 设定,默认的拦截器,可以是  拦截器栈,也可以是单个,   触发,条件,当你的action没有配置,拦截器时,就会引用 -->
   <!-- <default-interceptor-ref name="my_interceptor"></default-interceptor-ref> -->



      <!-- 引入 拦截器栈  因为我的拦截器栈,已经引用了默认的拦截器,所以就不必,在action中引用,直接引用栈即可 -->
      <action name="interceptor_inn" class="com.interceptor.inn">       
         <interceptor-ref name="my_interceptor"></interceptor-ref>         
      </action> 


 <!-- 引入 单个拦截器  -->
 <!-- 如果是设定单个  拦截器,必须,先  放入 默认的  defaultStack 拦截器,否者,所有的action都无法进入。再放入再引入,自己的拦截器 -->
      <action name="interceptor_inn" class="com.interceptor.inn"> 
      <!--默认拦截器-->
      <interceptor-ref name="defaultStack"></interceptor-ref>      
      <!--己身写的拦截器-->
         <interceptor-ref name="my_interceptor"></interceptor-ref>         
      </action> 


   </package>  

</struts>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值