Struts2第四天:Struts2的拦截器和标签库

版权声明:版权所有转载请注明出处 https://blog.csdn.net/qq_23853743/article/details/84674283

目录

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标签(数据回显)
      • 表单标签:

猜你喜欢

转载自blog.csdn.net/qq_23853743/article/details/84674283