struts自定义拦截器及其执行流程
来源:互联网 发布:windows.onload 编辑:程序博客网 时间:2024/05/23 15:58
1 客户端发送请求;
2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action。FilterDispatcher的功能如下:
4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
6 ActionProxy创建一个ActionInvocation的实例。
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper
自定义拦截器类
public class MyInterceptor implements Interceptor{ //方法 public String intercept(ActionInvocation invocation) throws Exception { System.out.println("对象"+invocation); Object action = invocation.getAction(); System.out.println(action); String value; //判定session里面key值对应的value是否存在 Map<String, Object> session = ActionContext.getContext().getSession(); Object name = session.get("uname"); String actionName = invocation.getProxy().getActionName(); System.out.println(actionName+"====================actionName"); if (actionName.equals("login")) { System.out.println("11122121212121212121212121212"); //user/login.action value= invocation.invoke(); }else if(name!=null) { //已经登录了 value= invocation.invoke(); String method = invocation.getProxy().getMethod(); System.out.println("方法:"+method); }else{ System.out.println("11111111111111111111111111111111"); value="login"; } System.out.println("逻辑视图名"+value); return value; } public void destroy() { } public void init() { System.out.println("拦截器已经成功初始化....."); }}action执行的action类
public class LoginAction implements Action{ private User user; public String execute() throws Exception { System.out.println("execute()"); Map<String, Object> session = ActionContext.getContext().getSession(); if (user!=null){ if (user.getUsername().equals("1")&&user.getPassword().equals("1")) { //省略一个步骤,记录session session.put("uname",user.getUsername()); return SUCCESS; }else { return LOGIN; } }else { if (session!=null&&session.get("uname")!=null) { return SUCCESS; }else { System.out.println("Action中的自定义代码"); return LOGIN; } } } public User getUser() { return user; } public void setUser(User user) { this.user = user; }}struts.xml
<struts> <!--修改该文件,tomcat不用重启--> <constant name="struts.devMode" value="true"></constant> <package name="strutss" namespace="/" extends="struts-default"> <interceptors> <interceptor name="myInter" class="cn.demo.actionday07.MyInterceptor"></interceptor> <interceptor-stack name="myStack"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="myInter"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="myStack"></default-interceptor-ref> <!--<default-action-ref name="first"></default-action-ref>--> <global-results> <result name="login">/WEB-INF/myinter/loginguohua.jsp</result> </global-results> </package> <!--<include file="struts_day03.xml"/> <include file="struts_day04.xml"/> <include file="struts_day05.xml"/> <include file="struts_day06.xml"/>--> <include file="struts_day07.xml"/></struts>strutsday07.xml(包级别继承struts.xml)
<struts> <!--修改该文件,tomcat不用重启--> <constant name="struts.devMode" value="true"></constant> <package name="day07" namespace="/" extends="strutss"> <action name="login" class="cn.demo.actionday07.LoginAction"> <result name="success">/WEB-INF/myinter/success.jsp</result> <result name="login">/WEB-INF/myinter/loginguohua.jsp</result> </action> <action name="success" class="cn.demo.actionday07.Success"> <result name="success">/WEB-INF/myinter/success.jsp</result> </action> </package></struts>
- struts自定义拦截器及其执行流程
- struts拦截器执行流程
- struts 拦截器入门&执行流程
- 【Struts】拦截器的执行流程
- Struts执行流程和拦截器之美
- struts自定义拦截器
- Struts自定义拦截器
- Struts-自定义拦截器
- struts拦截器配置流程
- struts自定义拦截器学习
- struts自定义拦截器解读
- Struts2第七篇【介绍拦截器、自定义拦截器、执行流程、应用】
- struts如何自定义一个拦截器?
- Struts第九天---自定义拦截器功能
- 自定义struts过滤器与拦截器实现
- struts自定义拦截器的编写
- struts自定义拦截器--登录权限控制
- struts学习(八)—自定义拦截器
- 设计模式—单例设计模式总结
- Android组件学习笔记(ListView结构操作)
- 淘宝 NPM 镜像
- MySql5.7 建立全文索引
- 科普文章--解剖Google
- struts自定义拦截器及其执行流程
- 笔记三:嵌入式板子读写寄存器的方法
- 让你快乐的20个习惯
- php正则表达式详解
- 百度地图 点聚合 maker 定时刷新。。时间久后的卡顿问题解决
- 你的前端
- C语言中的单引号和双引号的区别
- NOIP 模拟题 天上掉馅饼
- ACM所有算法