Struts2拦截器
来源:互联网 发布:dkms linux 编辑:程序博客网 时间:2024/06/17 23:49
Struts2的拦截器
1. 实现拦截器的两种方法:
一般情况下建议实现Abstracinterceptor类,不用重写init和destory方法。
1.1 实现interceptor接口
- void init():初始化拦截器所需要的资源
- void destroy():释放在init()中分配的资源
- String interceptor(ActionInovation ai) throws Exception
- 实现拦截器功能
- 利用ActionInovation参数获取拦截器状态
- 返回result字符串作为逻辑视图
1.2 继承AbstractInterceptor类
- 提供了init()和destroy()的空实现
- 只需实现interceptor()方法即可
2. 执行一个拦截器步骤:
- 创建一个类继承AbstractInterceptor
- 实现interceptor()方法
- 在xml文件中注册拦截器,并在要拦截的action中引用该拦截器
3. 拦截器实例
3.1拦截器实现执行时间统计
在timer.action中执行一些列动作,配置拦截器,计算处timer.action的执行时间,并在控制台输出
java类
===================TimerAction==========================package com.bart.action;import com.opensymphony.xwork2.ActionSupport;public class TimerAction extends ActionSupport { @Override public String execute() throws Exception { for(int i=0;i<500;i++){ if(i%2==0) System.out.println("i的值是:"+i); } return SUCCESS; }}===================InterceptorOne==========================/* * 拦截器实现计算执行action花费的时间 * */package com.bart.interceptor;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class InterceptorOne extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { //1.执行action之前 long start=System.currentTimeMillis(); //2.执行下一个拦截器,如果已经是最后一个,则执行目标action String result = invocation.invoke(); //3.执行action之后 long end=System.currentTimeMillis(); System.out.println("执行action共花费:"+(end-start)+"ms"); return result; }}
timer_interceptor.xml拦截器
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <!-- 拦截器示例 --> <package name="default" namespace="/" extends="struts-default"> <!-- 注册拦截器 --> <interceptors> <interceptor name="timerInterceptor" class="com.bart.interceptor.InterceptorOne"> </interceptor> </interceptors> <action name="timer" class="com.bart.action.TimerAction"> <result>/success.jsp</result> <!-- 为Action显示引用拦截器后,默认的拦截器defaultStack不再生效, 需要手工引用。而且从顺序角度去讲,最好把默认的拦截器写在自定义拦 截器上面 --> <interceptor-ref name="defaultStack"></interceptor-ref> <!-- 引用拦截器 --> <interceptor-ref name="timerInterceptor"></interceptor-ref> </action> </package> <constant name="struts.i18n.encoding" value="UTF-8"></constant></struts>
struts.xml:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <include file="timer_interceptor.xml"></include> <constant name="struts.action.extension" value="html,jsp,do"></constant></struts>
运行Tomcat服务器,浏览器输入http://localhost:8080/Struts2Demo1/timer.action
之后会执行timer.action同时拦截器timerInterceptor拦截器动作,并计算出运行时间输出。
控制台输出
i的值是:0i的值是:2...i的值是:498执行action共花费:102ms
拦截器实现后台管理界面
创建一个后台管理界面,只有登录成功后,才能访问到。
- 创建manage.jsp,并在login.xml中配置相关action
- LoginAction实现SessionAware接口,并在login()方法中处理相关逻辑,当用户名密码都正确时,session.put(“xxx”,object);
- 创建ManageInterceptor类,在interceptor()方法中处理相关逻辑
- login.xml中注册拦截器,可以创建自定义拦截器栈,把默认的拦截器放在前面,自定义拦截器放在后面
- 在manage的action标签中引用拦截器或者自定义的拦截器栈
java类
=====================LoginAction.java============================package com.bart.action;import java.util.Map;import org.apache.struts2.interceptor.SessionAware;import po.User;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;public class LogInAction extends ActionSupport implements ModelDriven<User>,SessionAware{ /* 第 3 种方法*/ private User user = new User(); private Map<String, Object>session=user.getSession(); //重写SessionAware的方法 public void setSession(Map<String, Object> arg0) { this.session=arg0; } public String logIn(){ if ("admin".equals(user.getUsername())&&"123".equals(user.getPassword())) { session.put("logName", user.getUsername()); return SUCCESS; }else{ session.put("loginError", "用户名或密码错误"); return ERROR; } } //重写的接口的方法,返回提交的对象 public User getModel() { // TODO Auto-generated method stub return user; }}=====================ManageInterceptor.java============================package com.bart.interceptor;import java.util.Map;import javax.servlet.jsp.PageContext;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class ManageInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { ActionContext context = ActionContext.getContext(); Map<String, Object> session = context.getSession(); if(session.get("logName")!=null){ String result = invocation.invoke(); return result; }else return "login"; }}
login.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <package name="default" namespace="/" extends="struts-default" > <!-- 注册拦截器 --> <interceptors> <interceptor name="manageInterceptor" class="com.bart.interceptor.ManageInterceptor"></interceptor> <!-- 自定义拦截器栈 --> <interceptor-stack name="myStack"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="manageInterceptor"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 创建manage.jsp的action --> <action name="manage" > <result>/WEB-INF/jsp/manage.jsp</result> <result name="login">/login.jsp</result> <!-- 使用自定义的拦截器栈 --> <interceptor-ref name="myStack"></interceptor-ref> </action> <action name="LogInAction" method="logIn" class="com.bart.action.LogInAction" > <result>/success.jsp</result> <result name="input">/login.jsp</result> <result name="error">/login.jsp</result> </action> </package> <constant name="struts.i18n.encoding" value="UTF-8"></constant></struts>
struts.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <include file="login.xml"></include> <constant name="struts.action.extension" value="html,jsp,do"></constant></struts>
manage.jsp
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'manage.jsp' starting page</title> <link rel="stylesheet" type="text/css" href="styles.css"> </head> <body> 这是后台管理界面,只有登录成功的用户才能访问! <br> </body></html>
运行Tomcat服务器,在登陆界面输入用户名和密码admin和123,登陆成功之后,
地址栏输入:http://localhost:8080/Struts2Demo1/manage.action即可进入manage界面
1 0
- 【Struts2】Struts2中拦截器
- struts2拦截器
- Struts2拦截器
- struts2.0拦截器
- struts2.0 拦截器
- struts2拦截器学习
- struts2 拦截器
- Struts2拦截器(Interceptor)
- struts2.0拦截器
- 用上struts2拦截器
- struts2拦截器简介
- Struts2:拦截器概述
- Struts2拦截器(Interceptor)
- struts2 拦截器
- 关于struts2拦截器
- Struts2的拦截器
- struts2拦截器
- Struts2拦截器总结
- 【工业相机Pointgray配置VS2012】Pointgray配置VS2012并将Pointgray类型转换成Mat类型
- oc客服端向服务端传输数据的加密
- golang 设置web请求状态码
- html——跑马灯以及背景音乐的实现
- Linux环境下如何通过WMI对windows进行监控
- Struts2拦截器
- phpize找不到怎么办
- dubbo+zookeeper+Spring 单机配置步骤---【基础实践篇】
- [leetcode-485]Max Consecutive Ones
- [CloudReader]Android - 仿网易云音乐歌单详情页
- java设计模式——单例设计模式
- 关于SlidingMenu的一些改进写法,仿QQ5.0侧拉缩进
- Codeforces 8VC Venture Cup 2017 - Elimination Round D.PolandBall and Polygon
- html的map热力图(二)——热区样式