最近在学习web的时候遇到一个问题,在服务器获取到请求地址的时候,如何通过相应的地址获取到对应的处理类。之前是通过自己写一张HashMap,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。
之后假设由一个servlet来监听所有请求(这里不讨论静态和动态请求的处理),就假设都是动态的,有两个请求如下:
http://www.xxx.com/user/add
http://www.xxx.com/user/del
servlet就会收到这两个请求,根据request获取uri,拿到 /user/add 和 /user/del ,去路由map找到对应的方法。然后再通过反射来执行即可。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。