JavaWeb第六章

这篇博客介绍了如何在JDK1.5之后利用Annotation注解简化MVC框架的配置。通过`@Controller`注解标记控制器类,扫描指定包下所有类,解析带有注解的方法,并将URL路径与方法映射到内存中。当用户请求到来时,`DispatcherServlet`根据请求路径找到对应的方法进行调用。这个过程展示了注解在简化代码和提高可维护性上的作用。

一.Annotation注解

1.在JDK1.5之后,增加Annotation注解的基本语法,通过注解可以省略XML配置信息,简化代码的编写形式。


@Target(ElementType.Type)
@Retention(RetentionPolicy.RUNTIME)
public @interface Contrller{
}
/**
 *ElementType.Type--类
 *ElementType.Method--方法
 *ElementType.Field--字段
 *RetentionPolicy.CLASS--定义类
 *RetentionPolicy.SOURCE--编写代码
 *RetentionPolicy.RUNTIME--运行时
 */

2.解析Annotation解析

  • 扫描包的工具类
  • ClassLoadContextListener(在容器一打开,就把注解的类方法存入map集合)
public void contextInitialized(ServletContextEvent sce){
	initClassLoader();
}
public void initClassLoader(){
	//调用工具类,通过包名把包下所有的类返回
	List<Class<?>> classlist = ClassScanner.getClassFromPackage("com.csi.controller");
	if(list.size()!=0){
		for(Class clazz:classlist){
		//isAnnotationPresent判读是否有相应的注解
			if(clazz.isAnnotationPresent(Controller.class)){
			//获取当前类的所有方法
				Method[] methods = clazz.getMethods();
				for(Method method:methods){
					if(method.isAnnotationPresent(method.class)){
						String urlPath = method.getAnnotation(method.class).path();
						ApplicationWebMap.methodMap.put(urlPath,method);
					}
				}	
			}
		}
	}
}
  • Dispatcherservlet(生发,用户的请求都走这个类*.do)
protected void service(HttpServleRequest req,HttpServletResponse response){
	String urlPath = req.getServletPath();//用户请求的路径
	Method method = ApplicationWebMap.methodMap.get(urlPath);
	if(method!=null){
		//method.getDeclaringClass()获取类的字节码
		//获取类对象,实例化
		Object instance = method.getDeclaringClass().newInstance();
		//方法调用,invoke(类对象,方法的参数)
		method.invoke(instance,req,resp);
	}else{
	resp.sendRedirect("error.jsp");
	}
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值