Struts2框架学习5Day_Struts拦截器机制
交易过程的本质是基于双方信息不对称,以及满足相互需求而产生的,基于以上,我在闲鱼上卖出了我的第一个商品Kindle499 ——2020.03.16
Struts拦截器机制(重点)
首先,什么是struts2的拦截器?
拦截器就是一个类,它能够拦截Action的请求,并进行预处理。Struts2 拦截器在访问某个Action 方法之前或之后实施拦截,(在action 之前调用的称之为前置拦截器,之后也称之为后置拦截器)。
Struts2拦截器简单实现,就是实现Interceptor接口,重写intercept():
public class MyInterceptor implements Interceptor{ @Override public void destroy() { // TODO Auto-generated method stub } @Override public void init() { // TODO Auto-generated method stub } @Override public String intercept(ActionInvocation invocation) throws Exception { System.out.println("begin method"); //调用Action中的execute方法,返回执行execute方法的字符串 String result = invocation.invoke(); System.out.println(result); System.out.println("after method"); return result; } }
使用自定义的拦截器,这种配置方式,会把默认的拦截器去掉,只留自定义的拦截器
Struts.xml:
<?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="default" extends="struts-default" namespace="/"> <!-- 注册自定义的拦截器 --> <interceptors> <interceptor name="myCeptor" class="com.igeek.action_01.MyInterceptor"></interceptor> </interceptors> <action name="myAction" class="com.igeek.action_01.MyAction"> <interceptor-ref name="myCeptor"></interceptor-ref> </action> </package> </struts>
Struts基本原理:务必理解
无关紧要的点:struts2 的2.1.6这个版本以前,核心控制器FilterDispatcher,从2.1.6 开始,使用是StrutsPrepareAndExecuteFilter。
拦截器的接口
1、程序中每个拦截器都必须实现Interceptor 接口
2、开发人员也可以继承AbstractInterceptor 只需要覆盖intercept 方法
3、开发人员也可以继承MethodFilterInterceptor ,只需要覆盖doIntercept 方法、excludeMethods 放行的方法(不去拦截的方法)、includeMethods 包含的方法(拦截的方法)
Strutsn内置拦截器
举几个常见并至少掌握的例子:
Exception : 异常处理机制拦截器
i18n : 处理国际化问题
modelDriven : 将请求参数,封装model对象(Action 实现ModelDriven接口)
fileUpload :文件上传
params : 请求参数转换封装
conversionError : 将类型转换异常进行处理
validation : 请求参数校验
workflow : 判断 fieldError 是否存在,如果存在,自动跳转input视图
自定义拦截器实现
省略model和前端代码,只粘贴最核心的东西,实现一个登录和检测是否登录后的添加动作
public class UserAction extends ActionSupport implements ModelDriven<User>{ private User user = new User(); @Override public User getModel() { return user; } public String login() throws Exception { //用户名为admin,密码为123456 if(user.getUsername().equals("admin") && user.getPwd().equals("123456")){ //把用户信息放入session ServletActionContext.getRequest().getSession().setAttribute("user", user); return SUCCESS; }else{ addFieldError("user_error", "用户名或密码不正确"); return INPUT; } } }
public class MyBookInterceptor extends MethodFilterInterceptor{ @Override protected String doIntercept(ActionInvocation invocation) throws Exception { //判断session中是否有用户存在 User user =(User) ServletActionContext.getRequest().getSession().getAttribute("user"); if(user == null){ //未登录 //添加提示信息 ActionSupport action = (ActionSupport) invocation.getAction(); action.addFieldError("login_error", "请登录后再操作"); return "no_login"; }else{ //执行action return invocation.invoke(); } } }
Struts.xml:(重点)
<!-- 配置拦截器 --> <package name="myInterceptor" extends="struts-default" namespace="/interceptor"> <!-- 注册自定义的拦截器 --> <interceptors> <interceptor name="bookCeptor" class="com.igeek.action_01.MyBookInterceptor"> <!-- 登录的方法放行呢? excludeMethods:放行的方法: includeMethods:只拦截的方法 --> <param name="excludeMethods">login</param> </interceptor> <!-- 如果要用框架和自定义的拦截器,我们可以定义一个拦截器栈 --> <interceptor-stack name="myStack"> <interceptor-ref name="bookCeptor"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 告诉系统使用自定义的拦截器栈 --> <default-interceptor-ref name="myStack"></default-interceptor-ref> <!-- 定义一个全局结果集来处理未登录情况 --> <global-results> <result name="no_login">/a_interceptor/login.jsp</result> </global-results> <!--登录的Action --> <action name="user_*" class="com.igeek.action_01.UserAction" method="{1}"> <result>/a_interceptor/addbook.jsp</result> <result name="input">/a_interceptor/login.jsp</result> </action> <!-- BookAction --> <action name="book_*" class="com.igeek.action_01.BookAction" method="{1}"> <result>/a_interceptor/addbooksuccess.jsp</result> </action> </package>
- 点赞
- 收藏
- 分享
- 文章举报
- Struts 2学习及问题记录(4)——拦截器机制
- Struts2框架运行机制(拦截器,struts标签)
- Struts拦截器学习笔记
- 《Struts2框架 》学习之Parameters 拦截器
- Struts中的拦截器机制 --- 可插拔式设计
- SSH与SSM学习之Struts211——拦截器
- Struts学习笔记---拦截器
- Struts中的拦截器学习笔记
- struts入门学习(struts中ActionForm,Action,javabean的运行机制 )
- Struts 2 拦截器底层实现原理 学习笔记
- struts2框架学习笔记6:拦截器
- 7.11--SSH学习之Struts拦截器
- Struts2框架学习系列(二) Action --struts.xml配置文件详解
- Struts 2的拦截器机制
- Struts2.5学习8-注解,拦截器与单元测试
- Struts2学习总结(3)--值栈,Ognl表达式,Struts标签库,国际化,数据校验,拦截器
- struts学习:使用拦截器
- struts学习(七)—拦截器概述
- Struts 2学习笔记——拦截器相关
- Struts2学习之拦截器机制