struts2学笔记十 拦截器

news/2024/7/4 0:51:32 标签: struts, action, string, class, exception, encoding
class="baidu_pl">
class="article_content clearfix">
class="htmledit_views">

7.3简单拦截器
package lee;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import java.util.*;

/**
 * @author  yeeku.H.lee kongyeeku@163.com
 * @version  1.0
 * <br>Copyright (C), 2005-2008, yeeku.H.Lee
 * <br>This program is protected by copyright laws.
 * <br>Program Name:
 * <br>Date:
 */
public class SimpleInterceptor extends AbstractInterceptor
{
 private String name;
 public void setName(String name)
 {
  this.name = name;
 }

    public String intercept(ActionInvocation invocation) throws Exception
 {
  LoginAction class="tags" href="/tags/ACTION.html" title=action>action = (LoginAction)invocation.getAction();
  System.out.println(name + " 拦截器的动作---------" + "开始执行登陆Action的时间为:" + new Date());
  long start = System.currentTimeMillis();
  String result = invocation.invoke();
  System.out.println(name + " 拦截器的动作---------" + "执行完登陆Action的时间为:" + new Date());
  long end = System.currentTimeMillis();
  System.out.println(name + " 拦截器的动作---------" + "执行完该Action的事件为" + (end - start) + "毫秒");
  return result;
    }
}

class="tags" href="/tags/STRUTS.html" title=struts>struts.xml
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE class="tags" href="/tags/STRUTS.html" title=struts>struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://class="tags" href="/tags/STRUTS.html" title=struts>struts.apache.org/dtds/class="tags" href="/tags/STRUTS.html" title=struts>struts-2.0.dtd">
<class="tags" href="/tags/STRUTS.html" title=struts>struts>
 <constant name="class="tags" href="/tags/STRUTS.html" title=struts>struts.custom.i18n.resources" value="globalMessages"/>
 <constant name="class="tags" href="/tags/STRUTS.html" title=struts>struts.i18n.encoding" value="GBK"/>

    <package name="lee" extends="class="tags" href="/tags/STRUTS.html" title=struts>struts-default">
  <interceptors>
   <interceptor name="mysimple" class="lee.SimpleInterceptor">
    <param name="name">简单拦截器</param>
   </interceptor>
  </interceptors>

        <class="tags" href="/tags/ACTION.html" title=action>action name="login" class="lee.LoginAction">
            <result name="error">/error.jsp</result>
            <result name="success">/welcome.jsp</result>

   <!-- 拦截器一般配置在result元素之后! -->
   <interceptor-ref name="defaultStack"/>
   <interceptor-ref name="mysimple">
    <param name="name">改名后的拦截器</param>
   </interceptor-ref>
        </class="tags" href="/tags/ACTION.html" title=action>action>
    </package>
</class="tags" href="/tags/STRUTS.html" title=struts>struts>


7.4深入拦截 器

1方法过滤
package lee;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
import java.util.*;

public class MyFilterInterceptor extends MethodFilterInterceptor

{
 private String name;
 public void setName(String name)
 {
  this.name = name;
 }

 public String doIntercept(ActionInvocation invocation)
  throws Exception
 {
  LoginAction class="tags" href="/tags/ACTION.html" title=action>action = (LoginAction)invocation.getAction();
  System.out.println(name + " 拦截器的动作---------" + "开始执行登陆Action的时间为:" + new Date());
  long start = System.currentTimeMillis();
  String result = invocation.invoke();
  System.out.println(name + " 拦截器的动作---------" + "执行完登陆Action的时间为:" + new Date());
  long end = System.currentTimeMillis();
  System.out.println(name + " 拦截器的动作---------" + "执行完该Action的事件为" + (end - start) + "毫秒");
  return result;
 }

}

class="tags" href="/tags/STRUTS.html" title=struts>struts.xml
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE class="tags" href="/tags/STRUTS.html" title=struts>struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://class="tags" href="/tags/STRUTS.html" title=struts>struts.apache.org/dtds/class="tags" href="/tags/STRUTS.html" title=struts>struts-2.0.dtd">
<class="tags" href="/tags/STRUTS.html" title=struts>struts>
 <constant name="class="tags" href="/tags/STRUTS.html" title=struts>struts.custom.i18n.resources" value="globalMessages"/>
 <constant name="class="tags" href="/tags/STRUTS.html" title=struts>struts.i18n.encoding" value="GBK"/>

    <package name="lee" extends="class="tags" href="/tags/STRUTS.html" title=struts>struts-default">
  <interceptors>
   <interceptor name="myfilter" class="lee.MyFilterInterceptor">
    <param name="name">方法过滤拦截器</param>
   </interceptor>

  </interceptors>

        <class="tags" href="/tags/ACTION.html" title=action>action name="login" class="lee.LoginAction">
            <result name="error">/error.jsp</result>
            <result name="success">/welcome.jsp</result>

   <!-- 拦截器一般配置在result元素之后! -->
   <interceptor-ref name="defaultStack"/>
   <interceptor-ref name="myfilter">
    <param name="name">改名后的方法过滤拦截器</param>
    <param name="excludeMethods">haha</param>
    <param name="includeMethods">execute</param>
   
   </interceptor-ref>
        </class="tags" href="/tags/ACTION.html" title=action>action>
    </package>
</class="tags" href="/tags/STRUTS.html" title=struts>struts>


excludeMethods  过滤掉方法为haha
includeMethods 对execute方法进行拦截


2拦截器的顺序
如果是在拦截方法之前,则配置在前面的拦截器,会先对用户的请求起作用。如果是在拦截方法之后,则配置在后面的拦截器,会先对用户的请求起作用。
例如:
<interceptor-ref name="defaultStack"/>
   <interceptor-ref name="mysimple">
    <param name="name">第一个</param>
   </interceptor-ref>
   <interceptor-ref name="mysimple">
    <param name="name">第二个</param>
   </interceptor-ref>

结果:
第一个 拦截器的动作---------开始执行登陆Action的时间为:Wed Jan 12 10:17:16 CST 2011
第二个 拦截器的动作---------开始执行登陆Action的时间为:Wed Jan 12 10:17:16 CST 2011
进入execute方法执行体..........
第二个 拦截器的动作---------执行完登陆Action的时间为:Wed Jan 12 10:17:24 CST 2011
第二个 拦截器的动作---------执行完该Action的事件为8522毫秒
第一个 拦截器的动作---------执行完登陆Action的时间为:Wed Jan 12 10:17:24 CST 2011
第一个 拦截器的动作---------执行完该Action的事件为8522毫秒


3拦截结果的监听器
public class MyPreResultListener implements PreResultListener
{
 public void beforeResult(ActionInvocation invocation,String resultCode)
 {
  System.out.println("返回的逻辑视图为:" + resultCode);
 }
}

配置中 没有配置,怎么对跳转的结果进行拦截?
execute方法执行之前的拦截...
进入execute方法执行体..........
返回的逻辑视图为:error
execute方法执行之后的拦截......

4 ...*

5拦截器实现权限控制
package lee;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import java.util.*;
public class AuthorityInterceptor extends AbstractInterceptor
{
    public String intercept(ActionInvocation invocation) throws Exception
 {
  ActionContext ctx = invocation.getInvocationContext();
  Map session = ctx.getSession();
  String user = (String)session.get("user");
  if (user != null && user.equals("pp") )
  {
   return invocation.invoke();
  }
  ctx.put("tip" , "您还没有登陆,请输入pp,911r登陆系统");
  return Action.LOGIN;
    }
}
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE class="tags" href="/tags/STRUTS.html" title=struts>struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "
http://class="tags" href="/tags/STRUTS.html" title=struts>struts.apache.org/dtds/class="tags" href="/tags/STRUTS.html" title=struts>struts-2.0.dtd">
<class="tags" href="/tags/STRUTS.html" title=struts>struts>
 <constant name="class="tags" href="/tags/STRUTS.html" title=struts>struts.custom.i18n.resources" value="globalMessages"/>
 <constant name="class="tags" href="/tags/STRUTS.html" title=struts>struts.i18n.encoding" value="GBK"/>

    <package name="lee" extends="class="tags" href="/tags/STRUTS.html" title=struts>struts-default">
  <interceptors>
   <interceptor name="authority" class="lee.AuthorityInterceptor"/>
  </interceptors>

  <global-results>
            <result name="login">/login.jsp</result>
  </global-results>

        <class="tags" href="/tags/ACTION.html" title=action>action name="login" class="lee.LoginAction">
            <result name="error">/error.jsp</result>
            <result name="success">/welcome.jsp</result>
        </class="tags" href="/tags/ACTION.html" title=action>action>
        <class="tags" href="/tags/ACTION.html" title=action>action name="viewBook">
            <result>/WEB-INF/jsp/viewBook.jsp</result>
   <!-- 拦截器一般配置在result元素之后! -->
   <interceptor-ref name="defaultStack"/>
   <interceptor-ref name="authority"/>
        </class="tags" href="/tags/ACTION.html" title=action>action>
    </package>
</class="tags" href="/tags/STRUTS.html" title=struts>struts>

页面中<a href="viewBook.class="tags" href="/tags/ACTION.html" title=action>action">查看作者李刚出版的图书</a>
 点击链接时进入了拦截. 如果用户名为pp就可以跳转到 <result>/WEB-INF/jsp/viewBook.jsp</result>
${requestScope.tip}
否则提示
您还没有登陆,请输入pp,911登陆系统

 


http://www.niftyadmin.cn/n/1425104.html

相关文章

广东电网笔试_南方电网的笔试考察内容及录用流程

南方电网公司招聘流程基本分为四个阶段&#xff0c;即&#xff1a;信息发布、简历投递及筛选、考核测评、审核录用。考核测评一般分为笔试和面试两个环节&#xff0c;部分分公司或岗位增加体能测试。大部分分公司采用的是先笔试后面试的流程&#xff0c;但也有公司流程较为特殊…

ip地址怎么设置才有效_2019离婚协议书怎么写才有效?附离婚协议书范本

离婚协议书到底怎么写&#xff1f;实践中要注意哪些问题呢&#xff1f;我来给大家口头讲讲吧。第一&#xff0c;关于范本哪里找的问题&#xff0c;民政局那里有最简单的范本&#xff0c;但去那再写&#xff0c;时间急&#xff0c;无法冷静全面的考虑所有事项&#xff0c;那种只…

java中的接口Serializable的作用和例子

java中的接口Serializable的作用和例子 作用&#xff1a; 没有implements Serializable&#xff0c;你就不能通过rmi(包括ejb)提供远程调用。 serialization 允许你将实现了Serializable接口的对象转换为字节序列&#xff0c;这些字节序列可以被完全存储以备以后重新生成原来…

合成孔径雷达_我国成功研制「太赫兹视频合成孔径雷达」烟下正常对地面目标成像...

中国航天科工二院23所研制的太赫兹视频合成孔径雷达此前进行飞行试验&#xff0c;成功取得国内首组太赫兹视频合成孔径雷达图像成果。23所后续将针对具体应用对雷达进行性能提升改进&#xff0c;并且展开应用示范试验。根据媒体报导&#xff0c;太赫兹波长位于毫米波和红外线之…

声学测试软件手机版_免费5G SA测试软件“网络优化资源服务助手”2.0版全新上线,新增多种功能!(附下载方式)...

“网络优化资源服务助手APP”2.0版全新上线在本主编上次推出1.3版后&#xff0c;该APP经过1.4&#xff0c;1.5&#xff0c;1.6&#xff0c;1.7&#xff0c;1.8&#xff0c;1.9版本迭代&#xff0c;现在2.0版正式上线&#xff0c;软件优化了很多功能&#xff0c;现在就一一为大家…

soket通讯

soket通讯 使用socket,实现从客户端传一文件到服务器端&#xff0c;并在服务器端控制台打印出来&#xff0c;文件为&#xff1a;D:/data.txt 内容为&#xff1a;hello! 服务器和客户端都在本地 While(true){}到底有什么用这种使用是为了保证它中的程序一直运行着 能够在任何…

自学python和java哪个好就业_python和java哪个好就业

Python和Java是两种最流行的编程语言。Python和java都有很好的就业前景。具体的选择取决于您对哪种编程语言更感兴趣。Python的就业方向与前景学习了python之后&#xff0c;您就可以从事数据分析了。不管你在哪个行业&#xff0c;做数据分析的人似乎都离不开python&#xff0c;…

python形参和实参举例_Python形参和实参的学习及举例

Python形参和实参的学习及举例1.形参和实参定义函数&#xff1a;def function(name):函数定义过程中的name为形参&#xff0c;只占据一个参数位置&#xff0c;没有具体值。print(name ‘123’)print中的name为实参&#xff0c;因为是具体的参数值。调用函数&#xff1a;functi…