嗨!大家好,说起来很惭愧。 工作有一段时间了,但是一直没敢写博客。原因多半是不知道自己写什么、能写些什么。
今天, 我终于鼓起勇气准备写一篇文章,为的是以后自己查阅方便, 如果有错误不足之处还望大家能指出,我会继续学习的谢谢大家了。
好了下面我们正式步入正文。直接上代码
struts.xml文件
<struts> <include file="struts-default.xml"></include> <package name="customdefault" extends="struts-default"> <!-- 默认继承Struts2 的配置文件 --> <interceptors> <!-- 自定义的拦截器 --> <interceptor name="testInterceptor" class="cn.com.agricom.Intercepters.AuthIntercepter"></interceptor> <!-- 配置自己的拦截器栈 --> <interceptor-stack name="customInterceptor"> <!-- 拦截器栈包含自定义的拦截器和默认的拦截器 --> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="testInterceptor"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 设置全局 全局默认的拦截器栈--> <default-interceptor-ref name="customInterceptor"></default-interceptor-ref> <global-results> <!-- 当返回login视图名时,转入/login.jsp页面 --> <result name="index">/index.jsp</result> </global-results> </package> <!-- 开启使用开发模式,详细错误提示 --> <constant name="struts.devMode" value="false" /> <!-- 将对象交给spring管理 --> <constant name="struts.objectFactory" value="spring" /> <!-- 指定资源编码类型 --> <constant name="struts.i18n.encoding" value="UTF-8" /> <!-- 设置struts2文件上传最大值 --> <constant name="struts.multipart.maxSize" value="209715200" /> <!-- 指定每次请求到达,重新加载资源文件 --> <constant name="struts.i18n.reload" value="false" /> <!-- 指定每次配置文件更改后,自动重新加载 --> <constant name="struts.configuration.xml.reload" value="false" /> <!-- <constant name="struts.convention.result.path" value="/WEB-INF/"/> --> <!-- 默认后缀名 --> <!-- <constant name="struts.action.extension" value="do,action,jhtml,," /> --> <!-- Struts Annotation --> <!-- <constant name="actionPackages" value="com.test1"/> --> <!-- 指定上传文件的目录 <constant name="struts.multipart.saveDir" value="f:\"></constant> --> </struts>
@SuppressWarnings("serial") public class AuthIntercepter extends AbstractInterceptor { private static Logger log = Logger.getLogger(AuthIntercepter.class); /* (non-Javadoc) * @see com.opensymphony.xwork2.interceptor.AbstractInterceptor#intercept(com.opensymphony.xwork2.ActionInvocation) */ @Override public String intercept(ActionInvocation invocation) throws Exception { log.debug("执行到了拦截器代码------>");
<span style="color:#ff0000;">这里返回的name值是你在映射路径中的名称 比如这个拦截的方法名为 "</span><span style="color: rgb(255, 0, 0); font-family: Arial, Helvetica, sans-serif;">loginAction</span><span style="color:#ff0000;">" 那么对应的路径为 /*/</span><span style="color: rgb(255, 0, 0); font-family: Arial, Helvetica, sans-serif;">loginAction</span><span style="color:#ff0000;"> </span> String name = invocation.getInvocationContext().getName();//获得执行的方法名称 System.out.println("=============方法名称为:"+name+"======================="); if("loginAction".equals(name)){ log.debug("检测到登录的方法名称为: loginAction log debug输出"); System.out.println("检测到登录的方法名称为: loginAction console输出"); return "index"; }使用拦截器 @ParentPackage("customdefault") 这个是我们刚才在struts.xml中定义的package名称 现在在类上注解表示当前类继承了刚才的包 因为我们配置的是全局拦截器 所以这里不用引用即可使用
@ParentPackage("customdefault") @Scope("prototype") // 因为默认又Spring 产生的对象都是单例的 在Struts中每个请求会有独立的action 所以这里要设置成非单例的模式 @Controller @Namespace(value = "/userAction") public class TestAction extends ActionSupport {