Struts2 拦截器的配置:

第一步:在struts.xml文件中加入拦截器配置:

我们可以在配置拦截器的时候,自己定义一个拦截器栈来包含我们自己定义的拦截器(注意:一定要将 defaultStack 加进去,这是框架自带的拦截器,能够帮助我们完成表单数据封装等功能)

<!-- 配置拦截器 --><interceptors><interceptor name="mytimer" class="com.test.interceptor.TimerInterceptor" /><interceptor name="checklogin" class="com.test.interceptor.LoginInterceptor" /><!-- 自己定义的拦截器栈 --><interceptor-stack name="myStack"><interceptor-ref name="defaultStack"></interceptor-ref><interceptor-ref name="mytimer"></interceptor-ref></interceptor-stack></interceptors>

第二步:使用配置的拦截器

第一种方法:在action中使用配置的拦截器:

<action name="param" class="com.test.action.ParamAction"><result>/ognl.jsp</result><!-- action里面配置拦截器 --><interceptor-ref name="myStack"></interceptor-ref></action>

第二种方法:配置默认拦截器(全局拦截器):

注意:在单个action配置了拦截器,就不在给这个action配置默认的拦截器,需要自己配置需要的拦截器(注意:别忘了 defaultStack 拦截器)

<!-- 默认拦截器,在action外面配置拦截器,为该package下的所有action都配置拦截器 --><default-interceptor-ref name="myStack"></default-interceptor-ref>

登录拦截实例:

struts.xml配置(src文件目录下):

<?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" > <struts> <package name="gyx" extends="struts-default">

<!-- 配置拦截器 --><interceptors><interceptor name="mytimer" class="com.test.interceptor.TimerInterceptor" /><interceptor name="checklogin" class="com.test.interceptor.LoginInterceptor" /><interceptor-stack name="myStack"><interceptor-ref name="defaultStack"></interceptor-ref><interceptor-ref name="mytimer"></interceptor-ref></interceptor-stack></interceptors><!-- 默认拦截器,在action外面配置拦截器,为该package下的所有action都配置拦截器 --><default-interceptor-ref name="myStack"></default-interceptor-ref><!-- 全局页面配置 --><global-results><result name="login" type="redirect">/login.jsp</result><result name="error">/error.jsp</result></global-results><action name="param" class="com.test.action.ParamAction"><result>/ognl.jsp</result><interceptor-ref name="checklogin"></interceptor-ref><interceptor-ref name="myStack"></interceptor-ref><!-- action里面配置拦截器 <interceptor-ref name="myStack"></interceptor-ref>--></action><action name="login" class="com.test.action.LoginAction"><result name="success" type="redirect">/param.jsp</result></action>
</package>
</struts>

LoginAction(src下的com.test.action包下):

package com.test.action;import java.util.Map;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport {private String uname;
private String upwd;@Override
public void validate() {if (uname.length()==0) {this.addFieldError("uname", "用户名为空!");}if (upwd.length()==0) {this.addFieldError("upwd", "密码为空!");}
}public String execute() throws Exception {if ("admin".equals(uname)&&"123".equals(upwd)) {System.out.println("登录成功");Map session = ActionContext.getContext().getSession();session.put("loginok", "admin");return "success";}else{System.out.println("登录失败");return "error";}
}public String getUname() {return uname;
}public void setUname(String uname) {this.uname = uname;
}public String getUpwd() {return upwd;
}public void setUpwd(String upwd) {this.upwd = upwd;
}}

ParamAction(src下的com.test.action包下):

package com.test.action;import java.util.HashMap;
import java.util.Map;import com.gyx.entity.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;public class ParamAction extends ActionSupport{private User user;@Overridepublic String execute() throws Exception {System.out.println("传入的参数为:"+user);Map session = ActionContext.getContext().getSession();session.put("hero", "剑魔");Map city = new HashMap();city.put("北京", "中国");city.put("东京", "日本");city.put("莫斯科", "俄罗斯");city.put("巴黎", "法国");session.put("city", city);return SUCCESS;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}}

LoginInterceptor(src下的com.test.interceptor包下):登录拦截器

package com.test.interceptor;import java.util.Map;import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class LoginInterceptor extends AbstractInterceptor {@Overridepublic String intercept(ActionInvocation invocation) throws Exception {System.out.println("进入登录拦截器");Map session = invocation.getInvocationContext().getSession();Object user =  session.get("loginok");if (user==null) {return Action.LOGIN;}else{return invocation.invoke();}}}

TimerInterceptor(src下的com.test.interceptor包下):计时拦截器:

package com.test.interceptor;import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class TimerInterceptor extends AbstractInterceptor{@Overridepublic String intercept(ActionInvocation invocation) throws Exception {System.out.println("进入timer拦截器");long begintimer = System.currentTimeMillis();//放行String result = invocation.invoke();long exetimer = System.currentTimeMillis()-begintimer;System.out.println("执行action,用了"+exetimer);return result;}
}

jsp页面:login.jsp

<!-- 这句加在页面顶部(添加标签库)  -->
<%@ taglib uri="/struts-tags" prefix="s"%><div><s:form action="login.action" method="post"><s:textfield name="uname" label="用户名:"/><br/><s:password name="upwd" label="密码:" /><br/><s:submit value="登录"/></s:form>
</div>

param.jsp:

<a href="param?user.name=VN&user.age=21">链接</a>
<form action="param">
姓名:<input type="text" name="user.name" /><br/>
年龄:<input type="text" name="user.age" /><br/>
日期:<input type="text" name="user.now" /><br/>
性别:男<input type="radio" name="user.sex" value="true"/>
女<input type="radio" name="user.sex" value="false"/><br/>爱好:打球<input type="checkbox" name="user.hobbies" value="ball"/>
玩游戏<input type="checkbox" name="user.hobbies" value="game"/>
看书<input type="checkbox" name="user.hobbies" value="book"/><input type="submit" value="提交" />
</form>

ognl.jsp:

<!-- 这句加在页面顶部(添加标签库)  -->
<%@ taglib uri="/struts-tags" prefix="s"%>值栈取值:<s:property value="user.name" /><br/>
<s:property value="user.hobbies" /><br/>
作用域取值:<s:property value="#attr.hero" />(在三大作用域中,自动的从小往上找,把第一个找到的显示)
<br/>
MAP取值:<s:property value="#session.city" /><br/>
取MAP中的一个值:<s:property value="#session.city.巴黎" /><br/>
取MAP中的一个值:<s:property value="#session.city['北京']" /><br/>

error.jsp:

<h1>用户登录失败</h1>
<h1>用户名或者密码错误!</h1>

Struts2 拦截器的配置:相关推荐

  1. Struts2拦截器属性excludeMethods、includeMethods配置无效之解决方法

    参考:http://blog.csdn.net/coolcoffee168/article/details/7963251 在配置struts2 拦截器属性excludeMethods.include ...

  2. Struts2 拦截器 及如何获得 servlet 请求对象 以及Struts 基本配置 Session 超时设置...

    在拦截器中可以三种实现 一:继承 AbstractInterceptor 类 二:继承 MethodFilterInterceptor类 三:实现 Interceptor 接口 在实现Intercep ...

  3. Struts2 拦截器(Interceptor )原理和配置

    Struts2 拦截器 拦截器在概念上与servlet过滤器或JDK代理类相同.拦截器允许横切功能,把action以及框架分开实现.你可以使用拦截器实现以下操作: 在调用action之前提供预处理逻辑 ...

  4. Struts2拦截器的使用

    如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了str ...

  5. Struts2拦截器(Interceptor)原理详解

    1.    理解拦截器 1.1.    什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作 ...

  6. 基于struts2拦截器实现用户操作日志记录

    2019独角兽企业重金招聘Python工程师标准>>> 这里基于struts2的拦截器来实现. 使用struts2拦截器拦截所有或者指定的请求,对用户操作过程中的:操作用户,操作时间 ...

  7. Struts2拦截器实现异常处理机制

    http://bbs.itcast.cn/thread-10364-1-1.html Struts2拦截器实现异常处理机制   在j2ee项目中,系统内部难免会出现一些异常,如果把异常放任不管直接打印 ...

  8. 从struts2拦截器到自定义拦截器

    http://www.cnblogs.com/withyou/p/3170440.html 拦截器可谓struts2的核心了,最基本的bean的注入就是通过默认的拦截器实现的,一般在struts2.x ...

  9. 【struts2】struts2拦截器

    struts2提供面向切面(AOP)编程的机制,拦截器便是一种成熟的AOP编程思想的实现,它提供一种机制使开发者能把相对独立的代码抽象出来,配置到action前后执行.拦截器interceptor类似 ...

最新文章

  1. centOS怎样强制卸载PHP以及自定义安装PHP
  2. poj2289二分图多重匹配
  3. 2018新年感谢,写在互联网类脑架构研究十年的前夜
  4. 多种方式测量AMP328频率响应
  5. windbg基本命令
  6. 软件项目周报_软件产品研发流程
  7. wordpress主题-响应式CUI2.0翠竹林博客主题wordpress模板分享
  8. 国产Model 3高性能版规格公布:充电15分钟续航250公里
  9. addeventlistener不支持ajax_好程序员web前端学习路线分享了解AJAX是什么
  10. Windows 2008 R2 ServerCore学习点滴(1)
  11. java.lang.ClassNotFoundException:oracle.jdbc.OracleDriver
  12. buuctf————[NPUCTF2020]你好sao啊
  13. comsol入门闲聊
  14. opencv-python图形图像处理入门基础知识
  15. 金字塔固定资产管理软件_目前常用固定资产管理软件有哪些?
  16. 计算机小喇叭找不到,Win7电脑右下角的小喇叭不见了
  17. 解决新版本谷歌浏览器CROS跨域问题
  18. 《HarmonyOS开发 – OpenHarmony开发笔记(基于小型系统)》第1章 OpenHarmony与Pegasus物联网开发套件简介
  19. 旷世科技IoU-Net
  20. 【车载以太网】【SOME/IP】规范标准

热门文章

  1. @getMapping与@postMapping注解
  2. 网络安全行业黑话大全
  3. Kafka 原理简介
  4. 电商平台-Java后端生成Token架构与设计详解
  5. 任务计划无法连上远程计算机,win7计划任务,找不到远程计算机.docx
  6. 平均收入工资准确还是中位数工资收入准确?
  7. QProcess实时读取命令输出
  8. Sandcastle入门:创建C#帮助文档
  9. Windows XP 或 Windows Vista ,win7,win8.1 升级到win10
  10. flink事件属于窗口的计算方法