struts2拦截器
当需要使用某个拦截器时,只需在配置文件struts.xml中配置就可以使用;如果不需要使用该拦截器,只需在struts.xml配置文件中取消配置即可
自定义拦截器
自定义拦截器需要实现Struts2提供的Interceptor接口。通过实现该接口可以开发一个拦截器类。
下面描述自定义拦截器的例子:当用户请求相应页面时,拦截,并注入一个时间序列
v1 自定义一个实现Interceptor接口(或者继承AbstractInterceptor抽象类)的类。
AbstractInterceptor.java
public abstract class AbstractInterceptor implements Interceptor { public void init() //用于初始化系统资源 { } public void destroy() //用于销毁资源 { } public abstract String intercept(ActionInvocation invocation) throws Exception; //拦截器的核心方法,实现具体拦截操作 }
例:
public class DateInterceptor extends AbstractInterceptor{ @Override public String intercept(ActionInvocation invocation) throws Exception{ BookAction action =(BookAction)invocation.getAction(); action.setDate(new Date()); return invocation.invoke(); } }
v2 在struts.xml中注册上一步中定义的拦截器。
例:
<interceptors> <interceptor name="dateInterceptor" class="com.strut.interceptor.DateInterceptor"></interceptor> </interceptors>
v3在需要使用的Action中引用上述定义的拦截器。
(为了方便也可将拦截器定义为默认的拦截器,这样在不加特殊声明的情况下所有的Action都被这个拦截器拦截。 )
例:
在struts.xml里
show.jsp
list.jsp
在com.strut.action.BookAction里
public class BookAction { private Date date; public Date getDate() {...} public void setDate(Date date) {...} }
在list.jsp里
${date}
运行结果的部分截图(主要看拦截器的实现部分):
struts内置拦截器
params拦截器将HTTP请求中的参数解析出来,将这些解析出来参数设置为Action的属性;
servlet-config拦截器直接将HTTP请求中的HttpServletRequest实例和HttpServletResponse实例传给Action;
国际化拦截器i18n将国际化资源进行操作;
文件上传拦截器fileUpload将文件信息传给Action。
另外还有数据校验拦截器对数据校验信息进行拦截。
v在项目开发中,Struts2内置的拦截器可以完成项目的大部分功能,但有些与系统逻辑相关的通用功能则需要通过自定义拦截器来实现,如权限控制和用户输入内容的控制等等。
Struts2数据验证
在实际项目开发中我们应该对所有的外部输入进行校验。而表单是应用程序最简单的入口,对其传进来的数据,我们必须进行校验。校验可以通过客户端的JavaScript技术来完成,也可以使用Struts的数据验证方案。
实现方法:
- 用action继承ActionSupport类,重写validate方法
2.用基于xml文件的验证框架
文件命名的格式必须是形如 ActionName-validation.xml(-前必须与action名称一致)
https://www.cnblogs.com/ningvsban/p/3734427.html