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. python 中类方法@classmethod

    classmethod是用来指定一个类的方法为类方法,没有此参数指定的类的方法为实例方法,使用方法如下: class C: @classmethod def f(cls, arg1, arg2, .. ...

  2. Struts2-S2-032远程命令执行EXP

    看到网上好多写的EXP有后门啊  还是自己写个吧! 工具下载:链接: http://pan.baidu.com/s/1miRbi2k 密码: fzfv

  3. CUBRID学习笔记 22 插入数据

    CREATE TABLE auto_tbl(id INT AUTO_INCREMENT, name VARCHAR); 自增长的列可以插入null, 同时一次可以插入多条记录.别的和其他的sql数据库 ...

  4. chainOfResponsibility责任链模式

    责任链(Chain of Responsibility)模式 : 责任链模式是对象的行为模式.使多个对象都有机会处理请求,从而避免请求的发送者和接受者直接的耦合关系.将这些处理对象连成一条链,沿着这条 ...

  5. git学习笔记09-bug分支-自己的分支改到一半了-要去改bug怎么办?

    当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交: 并不是你不想提交,而是工作只进行到一半,还没法 ...

  6. Scrum Meeting---Five(2015-10-29)

    今日已完成任务和明日要做的任务 姓名 今日已完成任务 今日时间 明日计划完成任务 估计用时 董元财 Java Web工程创建,hibernate框架安装,关系映射文件生成 4h 用户注册登录 4h 胡 ...

  7. 表单美化-原生javascript和jQuery单选按钮(兼容IE6)

    最近很多人问怎么美化表单的元素,大家都知道表单元素在各个浏览器中的表现不一,反正也是特别的丑,那么问题就来了,我们能自己设计表单元素的外观么?答案是可以的,现在我们就来试试吧.我们用两种方式来实现这一 ...

  8. JS 和 Java 中URL特殊字符编码方式

    前几天遇到url特殊字符编码的问题,在这里整理一下: JavaScript 1.  编码 escape(String) 其中某些字符被替换成了十六进制的转义序列. 解码 unescape(String ...

  9. [转发] 老叶观点:MySQL开发规范之我见

    原文: http://imysql.com/2015/07/23/something-important-about-mysql-design-reference.shtml 老叶观点:MySQL开发 ...

  10. strcpy, memcpy, memset函数

    一. strcpy函数 原型声明:char *strcpy(char* dest, const char *src);   头文件:#include <string.h> 和 #inclu ...