Struts2配置拦截器,struts2加载常量时的搜索顺序
1:struts2加载常量时的搜索顺序
1.Struts-default.xml
2.Struts-plugin.xml
3.Struts.xml
4.Struts-properties(自己创建的)
5.web.xml
如果在多个文件中配置了同一个常量,则后一个文件中配置的常量值会覆盖前面的文件配置的常量值
2:Struts2拦截器配置
1.在Struts.xml中配置一个默认请求的action
<!-- 没有找到action时默认执行的action -->
<default-action-ref name="defaultAction"></default-action-ref>
<!-- 默认action -->
<action name="defaultAction">
<result>default.jsp</result>
</action>
2.在Struts.xml中添加interceptor
<interceptors>
<!-- 自定义拦截器 ,逻辑名指向创建的拦截器实体类 -->
<interceptor name="myInterceptor"
class="cn.cnsdhzzl.intercptors.LoginInterceptor"></interceptor>
<!-- 引用struts默认拦截器和自定义拦截器,并放入一个值栈中方便引用,并且当引用到mic时,不需再指定默认default-interceptor,引用mic时默认初始化stack中所有引用 -->
<interceptor-stack name="mic">
<!-- 引用struts默认拦截器 到mic -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 引用struts默认拦截器 到mic -->
<interceptor-ref name="myInterceptor"></interceptor-ref>
</interceptor-stack>
</interceptors>
3.创建自己的interceptor类
public class LoginInterceptor implements Interceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// 拦截操作
System.out.println("对象:" + invocation);
// 返回action逻辑视图名
Object action = invocation.getAction();
//
System.out.println("++++++++++++++" + action + "***********");
//
String value;
//
Map<String, Object> session = ActionContext.getContext().getSession();
Object object = session.get("name");
String actionName = invocation.getProxy().getActionName();
//
invocation.getProxy().getNamespace();
//
System.out.println(actionName);
if (actionName.equals("loginAction")) {
value = invocation.invoke();
} else if (action != null) {
value = invocation.invoke();
String method = invocation.getProxy().getMethod();
System.out.println("方法:" + method);
} else {
value = "login";
}
return value;
}
//省略init方法和destroy方法
}
注:先走拦截器,后走default-action
最后奉上Struts执行流程图,清笑纳

当接收到一个httprequest ,
a) 当外部的httpservletrequest到来时
b) 初始到了servlet容器 传递给一个标准的过滤器链
c) FilterDispatecher会去查找相应的ActionMapper,如果找到了相应的ActionMapper它将会将控制权限交给ActionProxy
d) ActionProxy将会通过ConfigurationManager来查找配置struts.xml
i. 下一步将会 通过ActionInvocation来负责命令模式的实现(包括调用一些拦截Interceptor框架在调用action之前)
ii. Interceptor做一些拦截或者初始的工作
e) 一旦action返回,会查找相应的Result
f) Result类型可以是 jsp或者freeMark 等
g) 这些组件和ActionMapper一起返回给请求的url(注意拦截器的执行顺序)
h) 响应的返回是通过我们在web.xml中配置的过滤器
i) 如果ActionContextCleanUp是当前使用的,则FilterDispatecher将不会清理sreadlocal ActionContext;如果ActionContextCleanUp不使用,则将会去清理sreadlocals。
Struts2配置拦截器,struts2加载常量时的搜索顺序的更多相关文章
- ClassLoader加载资源时的搜索路径
先来个例子: /** * 测试classloader加载路径在哪里<p> * main3 */ public static void main3(String[] args) { Prop ...
- struts2 配置拦截器
第一步:继承MethodFilterInterceptor写自己的自定义拦截器 import org.apache.struts2.ServletActionContext; import com.o ...
- [JavaWeb基础] 011.Struts2 配置拦截器
在网页开发中有一个很重要的东西就是拦截器,就是在请求接收到的时候先到拦截器中进行一些逻辑处理,例如会话是否过期的验证等.在Struts2中我们可以编写一个拦截器的类,然后在struts.xml中简单配 ...
- Struts2配置拦截器自定义栈时抛异常:Unable to load configuration. - interceptor-ref - file:/D:/tomcat_install/webapps/crm/WEB-INF/classes/struts.xml
代码如下: <interceptors> <!-- 注册自定义拦截器 --> <interceptor name="LoginInterceptor&qu ...
- Struts2配置拦截器
<package name="loginaction" namespace="/" extends="struts-default"& ...
- Struts2中拦截器的使用与配置
一,拦截器是什么? 拦截器是在Action执行之前和之后执行的代码,是一个类似于过滤器的类: 二,拦截器的作用 拦截器拦截Action的请求,在Action之前或之后实现某项功能: 三,拦截器的特点 ...
- Struts2自定义拦截器Interceptor以及拦截器登录实例
1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ...
- Struts2【拦截器】就是这么简单
什么是拦截器 拦截器Interceptor.....拦截器是Struts的概念,它与过滤器是类似的...可以近似于看作是过滤器 为什么我们要使用拦截器 前面在介绍Struts的时候已经讲解过了,Str ...
- 通俗易懂之SpringMVC&Struts2前端拦截器详解
直接进入主题吧!一,配置Struts2的拦截器分两步走1配置对应的拦截器类:2在配置文件Struts.xml中进行配置拦截器同时在Strust2中配置拦截器类有三种方法1实现Interceptor接口 ...
随机推荐
- SpringMVC 登陆判断
struts2:extends ActionSupport @Override public String execute() throws Exception { User user = userS ...
- 解决iOS内存泄露
文章很好,摘自:http://www.codeceo.com/article/xcode-instruments-ios-memory.html 虽然iOS 5.0版本之后加入了ARC机制,由于相互引 ...
- hdu 4217 Data Structure? 树状数组求第K小
Data Structure? Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- C运行时的数据结构
本文描述一下:C运行时的数据结构,相关的段,压栈等 unix默认的编译器会将编译生成的文件默认命名为a.out 目标文件和可执行文件可以有几种不同的格式,所有这些不同格式具有一个共同的概念,那就是段. ...
- iOS - OC NSValue 值
前言 @interface NSValue : NSObject <NSCopying, NSSecureCoding> 将任意数据类型包装成 OC 对象 1.比较两个 NSValue 类 ...
- web设计经验<五>国外设计师总结的7个找灵感实用方法
每个设计师不时会有创意灵感缺失.大脑一片空白的状态.盯着一个空白的屏幕,发愁着“好吧,我现在该做什么呢?该怎么做呢?”有些人喜欢静待,但这不是唯一的一个方法.焦虑的客户或者是你自己的不耐烦,都会让你无 ...
- android MTK驱动背光唤醒流程
在标准的android驱动中,睡眠唤醒流程非常清晰,能够较方便的更改lcd唤醒时间和led背光的点亮时间,但是也很容易出现问题,比如说闪屏,唤醒慢! 出现闪屏有两个原因 1. 开背光时间在唤醒lcd前 ...
- uva 11800 Determine the Shape
vjudge上题目链接:Determine the Shape 第二道独自 A 出的计算几何水题,题意就是给你四个点,让你判断它是哪种四边形:正方形.矩形.菱形.平行四边形.梯形 or 普通四边形. ...
- 使用 Velocity 模板引擎快速生成代码(zhuan)
http://www.ibm.com/developerworks/cn/java/j-lo-velocity1/ ****************************************** ...
- Vbs脚本经典教材(转)
Vbs脚本经典教材(最全的资料还是MSDN) —为什么要使用Vbs? 在Windows中,学习计算机操作也许很简单,但是很多计算机工作是重复性劳动,例如你每周也许需要对一些计算机文件进行复制.粘贴.改 ...