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加载常量时的搜索顺序的更多相关文章

  1. ClassLoader加载资源时的搜索路径

    先来个例子: /** * 测试classloader加载路径在哪里<p> * main3 */ public static void main3(String[] args) { Prop ...

  2. struts2 配置拦截器

    第一步:继承MethodFilterInterceptor写自己的自定义拦截器 import org.apache.struts2.ServletActionContext; import com.o ...

  3. [JavaWeb基础] 011.Struts2 配置拦截器

    在网页开发中有一个很重要的东西就是拦截器,就是在请求接收到的时候先到拦截器中进行一些逻辑处理,例如会话是否过期的验证等.在Struts2中我们可以编写一个拦截器的类,然后在struts.xml中简单配 ...

  4. Struts2配置拦截器自定义栈时抛异常:Unable to load configuration. - interceptor-ref - file:/D:/tomcat_install/webapps/crm/WEB-INF/classes/struts.xml

    代码如下: <interceptors>  <!-- 注册自定义拦截器 -->   <interceptor name="LoginInterceptor&qu ...

  5. Struts2配置拦截器

    <package name="loginaction" namespace="/" extends="struts-default"& ...

  6. Struts2中拦截器的使用与配置

    一,拦截器是什么? 拦截器是在Action执行之前和之后执行的代码,是一个类似于过滤器的类: 二,拦截器的作用 拦截器拦截Action的请求,在Action之前或之后实现某项功能: 三,拦截器的特点 ...

  7. Struts2自定义拦截器Interceptor以及拦截器登录实例

    1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ...

  8. Struts2【拦截器】就是这么简单

    什么是拦截器 拦截器Interceptor.....拦截器是Struts的概念,它与过滤器是类似的...可以近似于看作是过滤器 为什么我们要使用拦截器 前面在介绍Struts的时候已经讲解过了,Str ...

  9. 通俗易懂之SpringMVC&Struts2前端拦截器详解

    直接进入主题吧!一,配置Struts2的拦截器分两步走1配置对应的拦截器类:2在配置文件Struts.xml中进行配置拦截器同时在Strust2中配置拦截器类有三种方法1实现Interceptor接口 ...

随机推荐

  1. 读取视屏文件,保存帧图片为ppm文件

    ffmpeg跟sdl的学习过程:一.版本信息:ffmpeg-3.0.2.tar.bz2SDL2-2.0.4.tar.gz二.编译过程:1.ffmgeg的编译:./configure --enable- ...

  2. 使用Spring容器

    Spring的两个核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口. Spring容器就是一个大的Bea ...

  3. oracle学习笔记——配置环境

    题记:最近再学oracle,于是按照这本经典的书<Oracle Database 9i/10g/11g编程艺术>来学习. 配置环境 如何正确建立SCOTT/TIGER演示模式 需要建立和运 ...

  4. Servlet&jsp基础:第三部分

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. Linux内核OOM机制的详细分析(转)

    Linux 内核 有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了 防止内存耗尽而内核会把该进程杀掉.典 ...

  6. iOS - OC 内存管理

    1.OC 基本内存管理模型 1.1 自动垃圾收集 在 OC 2.0 中,有一种称为垃圾收集的内存管理形式.通过垃圾收集,系统能够自动监测对象是否拥有其他的对象,当程序执行需要空间的时候,不再被引用的对 ...

  7. shiro连接数据库

    建一个jdbcRealm.ini [main] jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm dataSource=com.mchange.v2.c3 ...

  8. hdu 2063 过山车(二分图最佳匹配)

    经典的二分图最大匹配问题,因为匈牙利算法我还没有认真去看过,想先试试下网络流的做法,即对所有女生增加一个超级源,对所有男生增加一个超级汇,然后按照题意的匹配由女生向男生连一条边,跑一个最大流就是答案( ...

  9. Activity中与ListActivity中使用listview区别

    Activity中与ListActivity中使用listview区别 一.Activity中与ListActivity中使用listview区别(本身没多大区别,只是ListActivity在lis ...

  10. Android控件之CheckBox(复选框控件)

    一.有两种状态: 选中状态(true).未选中状态(false) 二.属性 android:id = "@+id/checkbox" android:layout_width=&q ...