`
zhaolianyang
  • 浏览: 97924 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2学习笔记十(第10讲.Struts2的核心 拦截器)

阅读更多
Struts2的核心 拦截器

一、修改RegisterAction.java类,在validate方法中添加一条错误信息语句this.addFieldError("username", "aaaaaaaaaaaaaaa");:
package com.test.action;

import java.util.Calendar;
import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

public class RegisterAction extends ActionSupport {
	
	private String username;
	
	private String password;
	
	private String repassword;
	
	private int age;
	
	private Date birthday;
	
	private Date graduation;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getRepassword() {
		return repassword;
	}

	public void setRepassword(String repassword) {
		this.repassword = repassword;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public Date getGraduation() {
		return graduation;
	}

	public void setGraduation(Date graduation) {
		this.graduation = graduation;
	}

	@Override
	public String execute() throws Exception {
		
		return SUCCESS;
	}
//	public String abc() throws Exception {
//		
//		System.out.println("abc() method invoked");
//		return SUCCESS;
//	}
//	
//	public void validateAbc(){
//		
//		System.out.println("validateAbc() invoked");
//	}

	@Override
	public void validate() {
		
		System.out.println("validate~~~~~~~~~~~~~~");
		
		this.addFieldError("username", "aaaaaaaaaaaaaaa");
		
//		if(null == username || username.length() < 6 || username.length() > 10){
//			this.addActionError("username invalid");
//		}
//		if(null == password || password.length() <6 || password.length() > 10){
//			this.addActionError("password invalid");
//		}
//		else if(null == repassword || repassword.length() < 6 || repassword.length() > 10){
//			this.addActionError("repassword invalid");
//		}
//		else if(!password.equals(repassword)){
//			this.addFieldError("password", "two passwords not the same");
//		}
//		if(age <= 0 || age > 150){
//			this.addActionError("age should be between 1 and 150");
//		}
//
//		if(null != birthday && null != graduation){
//			Calendar c1 = Calendar.getInstance();
//			c1.setTime(birthday);
//			
//			Calendar c2 = Calendar.getInstance();
//			c2.setTime(graduation);
//			
//			if(!c1.before(c2)){
//				this.addActionError("birthday should be before graduation");
//			}
//		}
	}
}

当表单所有的输入都为空,会出现下面的效果:


说明:不管是何种验证方式,最终的错误信息都会放到fielderror里面去,最终出现验证重复的现象。
笔记:
1、真正存放field级别的错误信息的对象是LinkedHashMap
2、该LinkedHashMap的key是String类型的,value是ArrayList类型的
3、对于Action级别的错误信息实际上是放置在ArrayList中的
4、拦截器:Interceptor
功能:拦截器的实现机制:
二、在src下创建com.interceptor包,并在这个包下创建一个Target类和一个TargetInterface接口:
Target.java:
package com.interceptor;

public class Target implements TargetInterface{
	public void doSomething(){
		System.out.println("do something");
	}
}

TargetInterface.java:
package com.interceptor;

public interface TargetInterface {
	public void doSomething();
}

三、在同一目录下创建一个拦截器Interceptor.java:
package com.interceptor;

public class Intercepoter {
	public void before(){
		System.out.println("before");
	}
	public void after(){
		System.out.println("after");
	}
}

四、在同一目录下再创建一个处理器类MyHandker.java:
package com.interceptor;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class MyHandler implements InvocationHandler {

	private Object object;
	
	private Interceptor interceptor = new Interceptor();
	
	public void setObject(Object object){
		this.object=object;
	}
	
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		
		Object result = null;
		
		interceptor.before();
		
		result = method.invoke(object, args);
		
		interceptor.after();
		
		return result;
	}

}

五、再创建一个代理类MyProxy.java类(作用是为了产生一个代理):
package com.interceptor;

import java.lang.reflect.Proxy;

public class MyProxy {
	public Object getProxy(Object object){
		MyHandler myHandler = new MyHandler();
		
		myHandler.setObject(object);
		
		return Proxy.newProxyInstance(Target.class.getClassLoader(), 
				object.getClass().getInterfaces(), myHandler);
	}
}

六、再创建一个Client.java类:
package com.interceptor;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class MyHandler implements InvocationHandler {

	private Object object;
	
	private Interceptor interceptor = new Interceptor();
	
	public void setObject(Object object){
		this.object=object;
	}
	
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		
		Object result = null;
		
		interceptor.before();
		
		result = method.invoke(object, args);
		
		interceptor.after();
		
		return result;
	}
}
  • 大小: 90 KB
分享到:
评论

相关推荐

    struts2学习笔记十一(第11讲.Struts2的核心 拦截器续)

    在本篇“Struts2学习笔记十一”中,我们将深入探讨Struts2的核心拦截器及其应用。 **1. 拦截器的概念** 拦截器是AOP(面向切面编程)的一部分,在Struts2中,它们作为一系列可插入的处理链,可以在Action执行前后...

    struts2学习笔记.doc

    ### Struts2学习笔记知识点概览 #### 一、环境搭建 **1.1 Struts2简介** - **Struts2概述**:Struts2是一个开源的MVC框架,它结合了Struts 1.x、WebWork和其他一些框架的优点。Struts2的主要目标是简化Web应用程序...

    struts2 学习重点笔记

    ### Struts2 学习重点知识点总结 #### 一、Struts2 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...

    Struts2学习笔记

    根据给定的文件信息,以下是对Struts2学习笔记中涉及的关键知识点的详细解析: ### Struts2框架概览 #### MVC模式的理解与演进 Struts2是基于MVC(Model-View-Controller)模式设计的一种Java Web开发框架。在MVC...

    张龙圣思园struts2学习笔记word

    张龙圣思园的Struts2学习笔记,无疑为Java开发者提供了一份宝贵的参考资料,它可能涵盖了Struts2的基础概念、核心组件、配置方式以及实战技巧。 首先,让我们深入了解Struts2的核心特性。Struts2是MVC(Model-View-...

    struts2学习笔记十九(第19讲.Struts2深入探索 续)

    在第19讲“Struts2深入探索”中,我们将继续深入理解Struts2的核心特性和工作原理,这包括但不限于配置、拦截器、插件、以及源码分析。以下是关于Struts2的一些关键知识点: 1. **MVC模式**:Struts2遵循Model-View...

    struts2学习笔记(完美总结)——转自OPEN经验库

    在实际项目中,Struts2可以处理类型转换、文件上传下载、拦截器(Interceptor)防止重复提交等问题。Interceptor是Struts2中的重要特性,它允许在Action执行前后插入额外的处理逻辑,如登录验证、日志记录等。深入...

    struts2四天的学习笔记

    13. ** strut2四天笔记**:这份学习笔记可能涵盖了以上所有知识点,包括如何创建Action,配置struts.xml,使用OGNL表达式,处理异常,以及实践中的各种技巧和最佳实践。 在四天的学习过程中,你应该通过实践和理解...

    struts2学习笔记十四(第14讲.Struts2的文件上传和下载续二)

    在本篇“Struts2学习笔记十四”中,我们将深入探讨Struts2框架如何实现文件上传和下载功能,这是web应用中常见的需求,尤其在处理用户提交的表单数据时。我们将不涉及具体代码,而是重点讲解相关概念和技术原理。 ...

    struts2学习笔记(1)

    ### Struts2学习笔记知识点详解 #### 一、Struts2框架的基本引入步骤 ##### 1. 导入Struts2相关Jar包 在引入Struts2框架时,首先需要将Struts2的相关Jar包导入到项目的类路径中。这些Jar包通常包括核心库以及其他...

    struts2学习笔记十八(第18讲.Struts2深入探索)

    在第18讲“Struts2深入探索”中,我们将会探讨Struts2的一些高级特性和深入使用的技巧。这篇学习笔记将主要围绕以下几个核心知识点展开: 1. **拦截器(Interceptors)**: Struts2的核心特性之一是拦截器,它允许...

    struts2学习笔记

    Struts2是一个强大的MVC(Model-...Struts2的核心配置文件是`struts.xml`,它负责定义Action、拦截器栈、结果类型、包配置等。在这个文件中,你可以声明你的Action类,定义它们对应的方法以及结果页面。例如: ```xml ...

    struts2学习笔记十三(第13讲.Struts2的文件上传和下载续)

    在本篇“Struts2学习笔记十三”中,我们将深入探讨Struts2如何处理文件上传和下载,这是Web开发中常见的需求。 文件上传在Web应用中广泛用于让用户提交图片、文档或其他类型的数据。Struts2提供了一个名为`...

    struts2学习笔记三(第3讲.Struts2的类型转换)

    在本篇“Struts2学习笔记三”中,我们将聚焦于Struts2的类型转换这一核心特性。类型转换在处理用户提交的数据时非常关键,它允许Struts2自动将请求参数转换为Java对象的属性。 在Struts2中,类型转换主要由`...

    struts2学习笔记黑马程序员

    ### Struts2学习笔记之文件上传与Ajax开发 #### Struts2文件上传 **文件上传简介** 文件上传是Web应用中常见的功能之一,Struts2框架内置了对文件上传的支持,使得开发者能够轻松地实现这一功能。为了确保文件...

    struts2学习笔记二(第2讲.Struts2入门与配置续)

    本篇学习笔记将深入探讨Struts2的入门与配置,继续上一讲的内容。 首先,Struts2的基础入门涉及到以下几个核心概念: 1. **Action类**:在Struts2中,业务逻辑通常封装在Action类中。Action类是处理用户请求的主体...

    Struts1及14. Struts2学习笔记

    Struts2的核心是FilterDispatcher,它处理所有请求并根据配置的拦截器链进行处理。Struts2支持OGNL(Object-Graph Navigation Language)作为表达式语言,使得数据绑定更加便捷。同时,Struts2的配置文件通常为...

Global site tag (gtag.js) - Google Analytics