Struts2学习笔记
******Struts2的核心-拦截器******
*.拦截器:Interceptor
*.拦截器和过滤器非常类似。 去匹配URL。
*.拦截器是从WebWork里延伸出来的。和现在的AOP(面向切面)模式很像。
一、Struts2拦截器有角色有几个
1.被拦截的目标。
2.拦截器本身。
3.生成一个代理。(执行的是代理,代理里插入了拦截器。)
二、拦截器好像一个入口和一个出口一样,把Action方法包了起来。
*.servlet里过滤器:
1.destroy():只在销毁时运行一次。
2.doFilter(ServletRequest request,ServeltResponse reponse,FilterChain chain):执行方法。
3.init(FilterConfig filterConfig):只在初始化时执行一次。
*.Struts2里拦截器:
1.destroy():只在销毁时运行一次。
2.intercept(ActionInvocation invocation):处理拦截的方法。
3.init(FilterConfig filterConfig):只在初始化时执行一次。
*.自定义拦截器的步聚:
1.建立一个包放拦截器。
2.建立一个MyInterceptor.java类,实现Interceptor接口。
public String intercept(ActionInvocation invocation) throws Exception{
syso("intercept");
String result = invocation.invoke();
return result;
}
XML配置:
在<package>标签里,加上
<interceptors>
<intreceptor name="myInterceptor" class="com.text.MyInterceptor">
<param name="hello">world</param>(参数可有可无)
</interceptor>
</interceptors>
在<action>标签里,<interceptor-ref name="myInterceptor"></interceptor-ref>
就可以了。
*.可定义拦截器栈。如下:(栈里还可包含栈,与拦截器没有区别)
<interceptor-stack name="basicStack">
<interceptor-ref name="exception"/>
<interceptor-ref name="prepare"/>
...
</interceptor-stack>
*.配置默认的全局拦截器:(可以不定,如果定义了,只有一个。)
<default-interceptor-ref name="defaultStack">
*.我们的struts.xml是继承了struts-default.xml的。所以性能会受到struts-default.xml里配置的影响。
*.如果在<action>标签里手动加了一个拦截器,配置默认的全局拦截器将不起做用,如果要,可在本Action里手动添加。
*.在拦截器类里要有参数的话,要new一个变量,生成get,set方法。
*.AbstractInterceptor继承了Interceptor,他空实现了init();destroy()方法。是一个简化类。
*.Interceptor执行原则,先进后出。后进先出。
*.细化。Action方法拦截器。
1.MethodFilterInterceptor类(方法过滤拦截器。)实现方法doIntercepot();
2.在配置XML里:配置好,在<Action>标签里:
<interceptor-ref name="myInterceptor">
<param name="includeMethods">方法1,方法2</param>(要执行的方法)
<param name="excludeMethods">方法1,方法2</param>(要排除执行的方法)
</interceptor-ref>
******Struts2的核心-拦截器******
*.拦截器:Interceptor
*.拦截器和过滤器非常类似。 去匹配URL。
*.拦截器是从WebWork里延伸出来的。和现在的AOP(面向切面)模式很像。
一、Struts2拦截器有角色有几个
1.被拦截的目标。
2.拦截器本身。
3.生成一个代理。(执行的是代理,代理里插入了拦截器。)
二、拦截器好像一个入口和一个出口一样,把Action方法包了起来。
*.servlet里过滤器:
1.destroy():只在销毁时运行一次。
2.doFilter(ServletRequest request,ServeltResponse reponse,FilterChain chain):执行方法。
3.init(FilterConfig filterConfig):只在初始化时执行一次。
*.Struts2里拦截器:
1.destroy():只在销毁时运行一次。
2.intercept(ActionInvocation invocation):处理拦截的方法。
3.init(FilterConfig filterConfig):只在初始化时执行一次。
*.自定义拦截器的步聚:
1.建立一个包放拦截器。
2.建立一个MyInterceptor.java类,实现Interceptor接口。
public String intercept(ActionInvocation invocation) throws Exception{
syso("intercept");
String result = invocation.invoke();
return result;
}
XML配置:
在<package>标签里,加上
<interceptors>
<intreceptor name="myInterceptor" class="com.text.MyInterceptor">
<param name="hello">world</param>(参数可有可无)
</interceptor>
</interceptors>
在<action>标签里,<interceptor-ref name="myInterceptor"></interceptor-ref>
就可以了。
*.可定义拦截器栈。如下:(栈里还可包含栈,与拦截器没有区别)
<interceptor-stack name="basicStack">
<interceptor-ref name="exception"/>
<interceptor-ref name="prepare"/>
...
</interceptor-stack>
*.配置默认的全局拦截器:(可以不定,如果定义了,只有一个。)
<default-interceptor-ref name="defaultStack">
*.我们的struts.xml是继承了struts-default.xml的。所以性能会受到struts-default.xml里配置的影响。
*.如果在<action>标签里手动加了一个拦截器,配置默认的全局拦截器将不起做用,如果要,可在本Action里手动添加。
*.在拦截器类里要有参数的话,要new一个变量,生成get,set方法。
*.AbstractInterceptor继承了Interceptor,他空实现了init();destroy()方法。是一个简化类。
*.Interceptor执行原则,先进后出。后进先出。
*.细化。Action方法拦截器。
1.MethodFilterInterceptor类(方法过滤拦截器。)实现方法doIntercepot();
2.在配置XML里:配置好,在<Action>标签里:
<interceptor-ref name="myInterceptor">
<param name="includeMethods">方法1,方法2</param>(要执行的方法)
<param name="excludeMethods">方法1,方法2</param>(要排除执行的方法)
</interceptor-ref>