`
zhaolianyang
  • 浏览: 94674 次
  • 性别: 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 学习重点笔记

    这是学习struts2时记得重点笔记,包括了一些原理,ognl语句的编写,以及如何设置拦截器等等一些基本知识,起到复习和巩固的作用

    struts2学习笔记

    struts2学习笔记,拦截器,action,所需jar包,从零开始

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

    NULL 博文链接:https://zhaolianyang.iteye.com/blog/872317

    Struts2 学习笔记

    01 Struts2-Action 5 一、 Struts作用: 5 二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 六、 路径问题的说明 8 ...09 自定义拦截器 38 10 类型转换 38 Struts2总结 39

    Struts2学习笔记

    struts2快速入门学习笔记,包含执行流程、验证、拦截器、国际化等的使用

    struts项目学习笔记

    基于AOP(面向切面编程)思想的拦截器机制,更易扩展(不修改源代码的条件下,增强代码功能) 更强大、更易用输入校验功能 整合Ajax支持:json插件 Struts2的今生前世: 1.早期开发模型Servlet+JSP+JavaBean显得...

    struts2.2学习笔记

    struts2.2学习笔记总结,action,拦截器,过滤器,国际化,struts.xml解析等的总结。

    struts拦截器 课堂笔记

    适合新手借鉴的struts学习笔记,更适合一入门的老手借鉴,个人学习心得

    struts学习笔记(2)

    当前struts2的filter过滤到一个.action结尾的请求的时候,会把这个请求交给struts2内部的拦截器(interceptor) 2)拦截器起到什么作用 可以帮我们丰富action的功能,比自动类型转换(页面传一个String类型的id,接收的...

    Struts2.1学习笔记

    基于 Struts2.1.8 包括Struts2的基本应用、文件上传、拦截器、输入校验、国际化、OGNL表达式、Struts2标签等内容。

    struts2入门笔记与源码

    学习struts2的笔记与源码:输入验证、国际化、拦截器等

    Struts 2.1.8_学习源码

    Struts 2.1.8 学习源码内容 Struts2_01FirstDemo : 跑通第一个Struts2的实例 Struts2_02CURD : 关于Struts2的增、删、...Struts2_05Interceptor : Struts2拦截器的使用 Struts2_06FileUpload : Struts2上传文件的使用

    struts2的学习笔记+测试源代码

    拦截器 博文链接:https://wuzhaohuixy-qq-com.iteye.com/blog/710102

    Java学习笔记-个人整理的

    {12.11.2}intersect与minus}{166}{subsection.12.11.2} {12.11.3}join}{166}{subsection.12.11.3} {12.11.3.1}cross join}{166}{subsubsection.12.11.3.1} {12.11.3.2}inner join}{167}{subsubsection.12.11.3.2...

    struts2框架学习项目,根据各个知识点分包分类实例

    struts2框架教学项目,针对每个知识点都有一个对应的实例,内嵌学习笔记。想学习的同学绝对适合,本人亲自教学实例。

    SpringMVC学习笔记整合搭建框架

    8、拦截器 2.Spring入门 2.1.Springmvc是什么 3.3.jdbc编程步骤: 1、加载数据库驱动 2、创建并获取数据库链接 3、创建jdbc statement对象 4、设置sql语句 5、设置sql语句中的参数(使用preparedStatement) 6、通过...

    跟我学javaweb全套ppt

    《跟我学Java Web》内容包括搭建Web开发环境、HTML相关技术基础知识、...Struts2技术详解(拦截器、输入校验、国际化、Struts2的各种标签、对Ajax的支持等)、Spring2.5(容器、装配Java Bean、JDBC和Hibernate模板...

Global site tag (gtag.js) - Google Analytics