Java如何通过注解映射URL相应的action

最近在学习web的时候遇到一个问题,在服务器获取到请求地址的时候,如何通过相应的地址获取到对应的处理类。之前是通过自己写一张HashMap<String, Controller>,String保存相应的地址,而Controller则是相应的处理类,通过在一个Handler类上进行重写每一个Controller类以及对应的String地址,在运行时进行加载。但是这样写好像有点傻逼,然后找到servlet是通过web.xml进行映射的.但是我觉得这种方式有点麻烦,而Spring是通过注解映射相应的URL.但是弄了半天还是不知道它具体的原理。有没有人能讲解一下它的解析原理?以及如何在运行时映射到相应的处理类?或者有别的更好的映射URL的方式?求告知。谢谢啦

有很多方式可以实现,最常见是利用反射。简单举个例子把:

UserController: //自定义注解 @webpath=/user/add
public void add{
}
//自定义注解 @webpath=/user/del
public void delete{
}

启动服务的时候,先获取所有Controller对象,然后通过这个对象反射遍历它所有方法,判断有注解webpath的保存起来,比如存到 Map<String, Method>。

之后假设由一个servlet来监听所有请求这里不讨论静态和动态请求的处理,就假设都是动态的,有两个请求如下:
http://www.xxx.com/user/add
http://www.xxx.com/user/del

servlet就会收到这两个请求,根据request获取uri,拿到 /user/add 和 /user/del ,去路由map找到对应的方法。然后再通过反射来执行即可。

参考一下:http://www.cnblogs.com/peida/archive/201…,在 @Retention 一节你可以了解到注解的保留时间。部分注释是可以编译在 class 中,之后可以通过反射来读取,这样就可以在程序中读取注释信息,配合包信息和类名等信息,就可以拼出 URL 了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注