嗨!大家好,说起来很惭愧。 工作有一段时间了,但是一直没敢写博客。原因多半是不知道自己写什么、能写些什么。
今天, 我终于鼓起勇气准备写一篇文章,为的是以后自己查阅方便, 如果有错误不足之处还望大家能指出,我会继续学习的谢谢大家了。
好了下面我们正式步入正文。直接上代码
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 {