zoukankan      html  css  js  c++  java
  • Struts2第四天:Struts2的拦截器和标签库

    目录

    1.Struts2的拦截器(******)

    1.1什么是拦截器

    1.2Struts2的执行流程

    1.3拦截器入门:

    1.3.1编写拦截器类

    1.3.2对拦截器进行配置

    2.Struts2的标签库

    2.1通用标签库

    2.2判断标签

    2.3遍历标签

    2.2UI标签库(方便数据回显)


     

    1.Struts2的拦截器(******)

    1.1什么是拦截器

    • Interceptor:拦截器,起到拦截Action的作用。
      • Filter:过滤器,过滤从客户端向服务器发送的请求。
      • Interceptor:拦截器,拦截是客户端对Action的访问。更细粒度化的拦截。(拦截Action中的具体的方法)。
    • Struts2框架核心的功能都是依赖拦截器实现。

    1.2Struts2的执行流程

    客户端向服务器发送一个Action的请求,执行核心过滤器(doFilter)方法。在这个方法中,调用executeAction()方法,在这个方法内部调用dispatcher.serviceAction();在这个方法内部创建一个Action代理,最终执行的是Action代理中的execute(),在代理中执行的execute方法中调用ActionInvocation的invoke方法。在这个方法内部递归执行一组拦截器(完成部分功能),如果没有下一个拦截器,就会执行目标Action,根据Action的返回的结果进行页面跳转。

    1.3拦截器入门:

    1.3.1编写拦截器类

    1. 编写一个类实现Interceptor接口或者继承AbstractInterceptor类。
    /**  
    
    *   
    
    * 项目名称:Struts2day04  
    
    * 类名称:InterceptorDemo1  
    
    * 类描述:拦截器入门  
    
    * 创建人:yangyangyang  
    
    * 创建时间:2018年12月1日 上午11:32:47  
    
    * 修改人:yangyangyang  
    
    * 修改时间:2018年12月1日 上午11:32:47  
    
    * 修改备注:  
    
    * @version   
    
    *   
    
    */
    
    
    
    public class InterceptorDemo1 extends AbstractInterceptor {
    
    
    
          /* (non-Javadoc)
    
           * @see com.opensymphony.xwork2.interceptor.AbstractInterceptor#intercept(com.opensymphony.xwork2.ActionInvocation)
    
           */
    
          @Override
    
          public String intercept(ActionInvocation invocation) throws Exception {
    
               System.out.println("拦截器1执行了。。。。");
    
               String object=invocation.invoke();
    
               System.out.println("拦截器1执行结束。。。。");
    
               return object;
    
          }
    
    
    
    }

    1.3.2对拦截器进行配置

    1. 第一种定义拦截器进行配置
    <package name="demo1" extends="struts-default" namespace="/">
    
            <!-- 定义拦截器 -->
    
            <interceptors>
    
                   <interceptor name="InterceptorDemo1" class="com.albertyy.interceptor.InterceptorDemo1"></interceptor>
    
                   <interceptor name="InterceptorDemo2" class="com.albertyy.interceptor.InterceptorDemo2"></interceptor>
    
            </interceptors>
    
           
    
            <action name="actionDemo1" class="com.albertyy.action.ActionDemo1">
    
                  <result>/demo1/demo1.jsp</result>
    
                 
    
                  <!-- 引入拦截器(一旦引入自定义拦截器,默认拦截器栈的拦截器就不执行了) -->
    
                   <interceptor-ref name="defaultStack"></interceptor-ref>
    
                   <interceptor-ref name="InterceptorDemo1"></interceptor-ref>
    
                   <interceptor-ref name="InterceptorDemo2"></interceptor-ref>
    
            </action>
    
        </package>
    
    1. 第二种定义一个拦截器栈的方式
    
    <package name="demo1" extends="struts-default" namespace="/">
    
            <!-- 定义拦截器 -->
    
            <interceptors>
    
                   <interceptor name="InterceptorDemo1" class="com.albertyy.interceptor.InterceptorDemo1"></interceptor>
    
                   <interceptor name="InterceptorDemo2" class="com.albertyy.interceptor.InterceptorDemo2"></interceptor>
    
                   <!-- 定义拦截器栈 -->
    
                  <interceptor-stack name="myStack">
    
                        <interceptor-ref name="defaultStack"></interceptor-ref>
    
                         <interceptor-ref name="InterceptorDemo1"></interceptor-ref>
    
                         <interceptor-ref name="InterceptorDemo2"></interceptor-ref>
    
                  </interceptor-stack>
    
            </interceptors>
    
           
    
           
    
            <action name="actionDemo1" class="com.albertyy.action.ActionDemo1">
    
                  <result>/demo1/demo1.jsp</result>
    
                 
    
                  <!-- 引入拦截器(一旦引入自定义拦截器,默认拦截器栈的拦截器就不执行了) -->
    
                  <interceptor-ref name="myStack"></interceptor-ref>
    
            </action>
    
        </package>
    

    2.Struts2的标签库

    2.1通用标签库

    2.2判断标签

    1. <s:if>、<s:elseif>、<s:else>
    <body>
    
    <s:set var="i" value="5" scope="request"/>
    
    <s:if test="#request.i>3">
    
          i 大于 3
    
    </s:if>
    
    <s:elseif test="#request.i<3">
    
          i 小于 3
    
    </s:elseif>
    
    <s:else>
    
          i 等于 3
    
    </s:else>
    
    </body>

    2.3遍历标签

    1. <s:iterator>


     

    <body>
    
    <s:iterator var="i" value="{'aa','bb','cc'}">
    
          <s:property value="#i"/>
    
    </s:iterator>
    
    <hr/>
    
    <s:iterator var="entry" value="#{'aaa':'111','bbb':'222','ccc':'333'}">
    
          <s:property value="#entry.key"/>--<s:property value="#entry.value"/>
    
    </s:iterator>
    
    <hr/>
    
    <s:iterator var="i" begin="1" end="10" step="1">
    
          <s:property value="#i"/>
    
    </s:iterator>
    
    <hr/>
    
    <s:iterator var="i" begin="100" end="300" step="5" status="status">
    
          <s:if test="#status.count % 3 == 0">
    
               <font color="red"><s:property value="#i"/></font>
    
          </s:if>
    
          <s:else>
    
               <s:property value="#i"/>
    
          </s:else>
    
    </s:iterator>
    
    </body>
    
    
    • 其他常用的标签
      • <s:property/>
      • <s:debug/>
      • <s:date />----在页面上进行日期格式化。

     

    2.2UI标签库(方便数据回显)


     

    <body>
    
    <h1>UI标签</h1>
    
    <h3>传统的表单</h3>
    
    <form action="${ pageContext.request.contextPath }/uiAction.action" method="post">
    
          <input type="hidden" name="id"/>
    
          用户名:<input type="text" name="name"/><br/>
    
          密码:<input type="password" name="password"><br/>
    
          年龄:<input type="text" name="age"><br/>
    
          性别:<input type="radio" name="sex" value="男">男
    
          <input type="radio" name="sex" value="女">女<br/>
    
          籍贯:<select name="city">
    
               <option value="">-请选择-</option>
    
               <option value="北京">北京</option>
    
               <option value="上海">上海</option>
    
               <option value="深圳">深圳</option>
    
               <option value="韩国">韩国</option>
    
          </select><br/>
    
          爱好:<input type="checkbox" name="hobby" value="basketball"/>篮球
    
          <input type="checkbox" name="hobby" value="football"/>足球
    
          <input type="checkbox" name="hobby" value="volleyball"/>排球
    
          <input type="checkbox" name="hobby" value="pingpang"/>乒乓球<br/>
    
          介绍:<textarea name="info" cols="8" rows="2"></textarea><br/>
    
          <input type="submit" value="提交"/>
    
    </form>
    
    
    
    <s:debug></s:debug>
    
    <h3>UI标签的表单</h3>
    
    <s:form action="uiAction" namespace="/" method="post" >
    
          <s:hidden name="id" />
    
          <s:textfield name="name" label="用户名"/>
    
          <s:password name="password" label="密码" showPassword="true"/>
    
          <s:textfield name="age" label="年龄"/>
    
          <s:radio list="{'男','女'}" name="sex" label="性别"/>
    
          <s:select list="{'北京','上海','深圳','韩国'}" name="city" label="籍贯" headerKey="" headerValue="-请选择-"/>
    
          <s:checkboxlist list="#{'basketball':'篮球','football':'足球','volleyball':'排球','pingpang':'乒乓球'}" name="hobby" label="爱好"/>
    
          <s:textarea name="info" cols="8" rows="2" label="介绍" ></s:textarea>
    
          <s:submit value="提交"/>
    
    </s:form>
    
    </body>
    
    

     

    源码:链接: https://pan.baidu.com/s/152UdVQAfPprTOUvP6ZzDrQ 提取码: vx6e 复制这段内容后打开百度网盘手机App,操作更方便哦

    总结

    • Struts2的拦截器
      • Struts2的拦截器概念
        • 拦截器:拦截对Action的访问,拦截到Action的具体的方法。
      • Struts2的执行流程
        • 请求-à核心过滤器à创建ActionProxy,调用proxy.execute方法。在这个内部àActionInvocation.invoke()在这个方法内部,递归执行一组拦截器àActionàResultà拦截器后面的代码
      • Struts2的拦截器
      • CRM的登录案例:
        • 权限拦截器
    • Struts2的标签库
      • 通用标签
        • if、elseif、else、iterator、property、date、debug
      • UI标签(数据回显)
        • 表单标签:
  • 相关阅读:
    连通分量板子
    2017年7月17日
    强连通缩点— HDU1827
    马拉车代码
    表达式求值
    Gym-100883F、Gym-101095B状态压缩小结
    矩阵快速幂小结-Hdu2604
    3月27日
    简单移动端自适应轮播图
    上了热搜榜前端工程师面试内幕
  • 原文地址:https://www.cnblogs.com/yangxianyang/p/13675645.html
Copyright © 2011-2022 走看看