day04:struct2拦截器

简介: day04:struct2拦截器

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的数据验证方案。

实现方法:

  1. 用action继承ActionSupport类,重写validate方法
    2.用基于xml文件的验证框架
    文件命名的格式必须是形如 ActionName-validation.xml(-前必须与action名称一致)
    https://www.cnblogs.com/ningvsban/p/3734427.html


相关文章
|
3月前
Interceptor Handle 执行顺序
Interceptor Handle 执行顺序
28 0
|
6月前
|
编译器 C++
struct 和 typedef struct 区别和用法总结
struct 和 typedef struct 区别和用法总结
101 0
C4.
|
6月前
|
C++ 开发者
C++ struct与class
C++ struct与class
C4.
43 0
|
6月前
来自C++primer5 的struct和class定义类的区别
来自C++primer5 的struct和class定义类的区别
33 0
|
6月前
SpringMVC-拦截器参数及拦截器链配置
SpringMVC-拦截器参数及拦截器链配置
60 0
|
6月前
|
存储 安全 编译器
new和malloc两个函数详细实现与原理分析
new和malloc两个函数详细实现与原理分析
53 0
|
JSON Java 数据格式
51SpringMVC - Controller方法返回值
51SpringMVC - Controller方法返回值
45 0
|
编译器 C语言 C++
C++中的 class和struct区别
C++ 中保留了C语言的 struct 关键字,并且加以扩充。在C语言中,struct 只能包含成员变量,不能包含成员函数。而在C++中,struct 类似于 class,既可以包含成员变量,又可以包含成员函数。 C++中的 struct 和 class 基本是通用的,唯有几个细节不同: 使用 class 时,类中的成员默认都是 private 属性的;而使用 struct 时,结构体中的成员默认都是 public 属性的。 class 继承默认是 private 继承,而 struct 继承默认是 public 继承(《C++继承与派生》一章会讲解继承)。 class 可以使用模板,
132 0
|
JSON 前端开发 数据格式
SpringMVC源码剖析之参数解析器处理handler参数流程
在适用springMVC的时候,通过注解可以很方便的封装请求数据,响应前端数据,很好奇怎么实现的,于是探索一下
class_destroy源码分析
class_destroy源码分析