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


相关文章
|
5月前
|
网络协议 NoSQL Linux
知识巩固源码落实之5:http get异步请求数据demo(多线程+struct epoll_event的ptr)
知识巩固源码落实之5:http get异步请求数据demo(多线程+struct epoll_event的ptr)
26 0
|
5月前
SpringMVC-拦截器参数及拦截器链配置
SpringMVC-拦截器参数及拦截器链配置
35 0
|
5月前
|
C语言 C++
[C++&C] Struct 和Typedef Struct的区别
[C++&C] Struct 和Typedef Struct的区别
61 0
|
5月前
|
存储 安全 编译器
new和malloc两个函数详细实现与原理分析
new和malloc两个函数详细实现与原理分析
27 0
|
9月前
|
编译器 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 可以使用模板,
89 0
|
JSON 前端开发 数据格式
SpringMVC源码剖析之参数解析器处理handler参数流程
在适用springMVC的时候,通过注解可以很方便的封装请求数据,响应前端数据,很好奇怎么实现的,于是探索一下
|
JSON 网络协议 JavaScript
序列化 struct 时 tag 的使用 | 学习笔记
快速学习序列化 struct 时 tag 的使用
79 0
序列化 struct 时 tag 的使用 | 学习笔记
|
JSON 运维 数据格式
[SpringMVC]拦截器②(拦截器参数、拦截器链配置)
拦截器②(拦截器参数、拦截器链配置)
[SpringMVC]拦截器②(拦截器参数、拦截器链配置)
|
XML 算法 网络协议
享读SpringMVC源码1-Handler与HandlerMapping关系
享读SpringMVC源码1-Handler与HandlerMapping关系
|
数据安全/隐私保护 C++
论class和struct的区别
论class和struct的区别
108 0