<!--设置默认的父包 所有的package 继承name='abstract_struts' 这样才能实现拦截器通用配置  --> <constant name="struts.convention.default.parent.package" value="yuanlin"/>

拦截器的应用,在许多项目中都会用到,以前用XML文件方式来配置,现在因为Action访问在项目里用被注解方式代替了。那么拦截器应该怎么配置呢。

首先,实现Struts2的注解配置。

其他的,我就不说了,我这里点到重点。其他慢慢理解吧。

struts.xml文件中这两个常量要配置起来。项目里加入jar包:struts2-convention-plugin-2.1.8.jar

 <!-- 注解默认对以action,common的包极其子包进程查找ACTION名称结尾的类-->  <constant name="struts.convention.package.locators" value="common,action"/>  <!-- 指定注解方式视图的查找目录 这里到pages和page目录下查找jsp文件 --><constant name="struts.convention.result.path" value="pages,page"/>

这样配置好了,action代码里就可以用注解方式了例如:

package com.yuanlin.website.test.action;import java.util.List;import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;import com.common.log4j.model.TbLog;
import com.yuanlin.website.test.core.AreaCore;
import com.yuanlin.website.test.core.TestCore;
import com.yuanlin.website.test.model.Area;@Namespace("/testyuanlin")

//测试用action
public class TestAction {//业务层接口private TestCore testCore;//地区业务逻辑private AreaCore areaCore;//地区类对象private Area area;//集合参数private List<TbLog> testList;//传递的实体类private TbLog logModel=new TbLog();public String test(){testList=testCore.findAreas(logModel);return "ok";}   @Action(value = "test2", results =
{ @Result(name = "success", location = "/pages/test/MyJsp.jsp") }) public String test2(){return "success";}/*** 拦截错误,不让错误出现在页面上* @throws Exception*/@Action(value = "test3")public void test3(){System.out.println("进入TEST3");int i=1/0;}/*** 测试全局错误*/@Action(value = "test4")public String test4(){//throw new NullPointerException();return "error";}/*** 添加地区* @return*/@Action(value="creatArea")public String creatArea(){area= new Area();area.setAreaCode("001");area.setAreaName("北京");area.setAreaLevel(1);areaCore.addArea(area);return "success";}public List<TbLog> getTestList() {return testList;}public void setTestList(List<TbLog> testList) {this.testList = testList;}public void setTestCore(TestCore testCore) {this.testCore = testCore;}public void setAreaCore(AreaCore areaCore) {this.areaCore = areaCore;}public Area getArea() {return area;}public void setArea(Area area) {this.area = area;}}

到这里,注解方式访问Action已经可以使用了。

现在我们来配置拦截器,在 Struts.xml 常量中加入如下配置

<!--设置默认的父包 所有的package 继承name='yuanlin'这个pagckage 这样才能实现拦截器通用配置  -->
<constant name="struts.convention.default.parent.package" value="yuanlin"/>

上面的配置相当于xml文件中如下配置。

<package name="test" namespace="/test" extends="yuanlin"> </package>

现在我们来配置拦截器,在Struts.xml文件中加入如下

<package name="yuanlin"  extends="struts-default" abstract="true"><interceptors><interceptor name="permission" class="com.common.interceptor.PermissionInterceptor"/><interceptor-stack name="permissionStack"><interceptor-ref name="defaultStack"/><interceptor-ref name="permission" /></interceptor-stack></interceptors><default-interceptor-ref name="permissionStack"/><global-results><result name="noSession">/page/message.jsp</result></global-results>
</package>

到这一步,你可能会发现拦截器无效,我在这里遇到过此问题。虽然拦截器默认是在被访问的Action方法执行前调用。但是如果result值和Action值是一样的。那么会出现返回视图为Action对应的视图。而不是global-results 中的返回视图。让你感觉拦截器并没有执行。所以,在这里要格外小心一点,PermissionInterceptor类要返回的result不要和被拦截的Action的result值一定要不相同。如这里PermissionInterceptor 为“noSession”,TestAction方法中test2()中为“success”。

struts注解 配置拦截器 拦截器无效相关推荐

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

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

  2. 【 第六章 拦截器,注解配置springMVC,springMVC执行流程】

    第六章 拦截器,注解配置springMVC,springMVC执行流程 1.拦截器: ①springMVC中的拦截器用于拦截控制器方法的执行. ②springMVC的拦截器需要实现HandlerInt ...

  3. extjs 方法执行顺序_TestNG之注解变压器amp;方法拦截器

    一.注解变压器 TestNG允许在执行期间修改所有注解的内容.当源代码中的注解大部分是正确的,但是有一些时刻你想要重写他们的值时,这个是非常有用的. 可以使用注解变压器实现. 注解变压器是一个实现了接 ...

  4. SpringBoot配置过滤器和拦截器

    一.概念 1简介 过滤器是JavaEE中Servlet规范的一个组件,通过Filter技术,可以实现用户访问某个资源前,对访问的请求和响应进行拦截 拦截器(Interceptor)类似于Servlet ...

  5. springboot _配置过滤器、拦截器、使用原生servlet

    配置过滤器.拦截器.使用原生servlet 过滤器和拦截器的根本区别 过滤器是servlet规范规定的,只能用于web程序中,而拦截器是在spring容器中,它不依赖servlet容器. 拦截器属于S ...

  6. Vue配置axios响应拦截器

    一个项目会发送很多请求到后端,每个请求都有如下的响应 不想每个请求都去判断里面的status,那么可以使用axios的响应拦截器,对服务端返回的一些相同点做统一的处理 比如说如果有报错,就统一弹出这么 ...

  7. Spring xml配置式的拦截器

    传统的xml配置式使用拦截器拦截请求. 一.Web.xml配置 在Web.xml 配置Spring核心控制器DispatcherServlet接收所有请求. <servlet><se ...

  8. 排队器拦截_过滤器(Filter)和拦截器(Interceptor)的执行顺序和区别

    首先建立一个SpringBoot工程,增加一个IndexController供测试使用. @Controller public class IndexController { @GetMapping( ...

  9. SpringMVC拦截器之拦截器接口方法演示

    <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven ...

最新文章

  1. Android 动态广播与静态广播
  2. php 批量导出excel文件,PHPEXCEL批量导出
  3. 运维老鸟告诉你这个经典Zookeeper问题的根因
  4. 趣谈哈希表优化:从规避 Hash 冲突到利⽤ Hash 冲突
  5. SQL Server 用表中已有数据造数据
  6. LeetCode 题 - 69. x 的平方根 python解法
  7. Torch 学习总结
  8. 中断处理过程示意图_PCIe中断方法和系统与流程
  9. 关于我的FPGA博客
  10. cocos2dx 2.0升级为3.0一些常见变化纪录
  11. ACL技术原理和实验(华为设备)
  12. 《大数据之路》阅读笔记--数据同步
  13. 计算机软件对英语,计算机软件英语论文
  14. 美团外卖小哥竟开发阿里云盘,抢先首发
  15. python 基于PHP在线音乐网站
  16. Counterfeit Dollar(找硬币)
  17. unity android 30帧,解除某Unity游戏的30帧帧率限制
  18. 干货 | 电子设备散热技术详解
  19. 点击按钮变灰并开始倒计时60秒
  20. 【嵌入式面试】2022年嵌入式经典面试题汇总(C语言)

热门文章

  1. 蓝桥杯历届试题-蚂蚁感冒
  2. 温室大棚控制系统智能轻松种菜
  3. NSIS脚本文件格式
  4. 浙江中级聘用计算机还需要吗,浙江省中级高级职称计算机考试要考几个模块?...
  5. Mysql场景刷数据库脚本方法和顺序
  6. 氰化物工作室的游戏Cthulhu,或最终获得VR支持
  7. 练习题源代码46——55
  8. [转载]“我做SLAM,那么论文该怎么发?”
  9. 【RAC】在所有集群节点手动配置SSH无密码访问
  10. 构建开放的软件团队文化