AndServer初探
详细了解请戳这里
- AndServer的github地址【https://github.com/yanzhenjie/AndServer】
- AndServer文档地址【https://www.yanzhenjie.com/AndServer/】
- AndServer的相关博客地址【https://blog.csdn.net/yanzhenjie1003/article/details/51661599】
一度为快
特殊的需求
- 需求
- 是否让Android应用成为一台服务器
- 好处
- 如果一个应用是Android应用,假设这时候需要外部有个服务来控制这台设备的某些内容或数据的传输,这时候如果用服务器来作为媒介和数据交换中心,不是不可以,这样做的话带来的问题是数据的延迟性和成本的代价;假设不通过第三方的服务器直接和Android应用直接通讯,这样不仅可以减少数据传输中时间,还可以减少开发的复杂度,最终的目的是尽可能快的进行数据的交换,完成两个应用的交互
- Android上使用什么来完成Http服务器
- ApacheHttpCore是一个优秀的Http底层框架,支持构建服务器,也支持构建客户端(有的Android版本弃用了ApacheHttpClient相关的API,用的话记得进行引用)
AndServer是什么
- AndServer是Android平台的Web Server和Web FrameWork,它基于编译时注解提供了类似Spring注解和功能,通过给类和方法加上合适的注解,使得这些方法可以以接口的形式暴露给http请求者。
AndServer的特性
- 使用注解开发接口
- 全局使用请求拦截器,可以使用注解,全局多个
- 全局异常处理器,可以使用注解,全局唯一
- 全局消息转换器,可以使用注解,全局唯一
AndServer的架构
- Linux Kernel(linux核心) -> Socket(长连接) -> HttpParser(Http解析) -> FrameWork(框架) -> Handler(处理机)
Android的应用架构
- Dispatcher(分发器) -> Interceptor(拦截器) -> HanderAdapter(处理适配器) -> Handler(处理机) -> ViewReslover(视图解析器)
注解
注解 | 用途 |
---|---|
Controller | 控制器,给类进行注解 如果需要要返回指定的页面,则需要Controller配合视图解析器InternalResourceViewResolver才行,如果需要返回json、xml或自定义mediaType内容到页面,则需要在对应的方法上加@ResponseBody注解 |
RestController | 控制器,给类进行注解 RestController注解相当于是@Controller+@ResponseBody注解的结合 如果只使用RestController注解,则该类的方法中无法返回jsp页面(或者是html),配置视图解析器InternalResourceViewResolver不起作用,返回的内容就是return的内容 |
RequestMapping | 可以用在类上,也可以用在方法上 注意:使用时所在类必须有Controller或者是RestController方法才有意义 RequestMapping可以规定接口的请求路径、请求方法、参数校验、请求头校验、Accept和ContentType等重要规则 |
RequestParam | 只能用在方法参数上,用来获取客户端传来的参数 |
PathVariable | 只能用在方法参数上,用来获取客户端的path参数 |
QueryParam | 只能用在方法参数上,不支持MultipartFile,仅用来获取Url中的参数 |
FormPart | 只能用在方法参数上,仅用在获取Form中的参数 |
ResponseBody | 注解ResponseBody使用在Controller注解类下的方法上,相当于使用了注解RestController给类一样,直接将返回值作为响应发送给客户端 |
RequestBody | 客户端可以把一段json或者一个文本整体写到请求的Body中发送给服务端,服务端的处理方式有两种,第一种是拿到RequestBody对象,由开 发者自行转换为目标对象,第二种是使用RequestBody注解结合MessageConverter自动转化为目标对象 |
CookieValue | 方便获取客户端提交的Cookie的值 |
RequestHeader | 方便获取客户端的Header值 |
Addition | 用在方法上,增加一些额外的信息,方便在HandlerInterceptor(拦截器)中处理一些业务,例如标记方法登录后才可以访问@Addition(“needlogin”) |
Interceptor | Interceptor是拦截器的意思标记某个类是HandlerIntercept的子类,并且作为拦截器参与;可以添加多个类,所有添加了Interceptor注解的类都将参与程序运行 |
Converter | Converter是转换器的意思,标记某个类是MessageConverter的子类,并作为消息转换器参与;可以添加多个类,但是只有其中一个参与运行,先扫描到哪个就先执行哪个,因此最好是一个类添加Converter注解 |
Resolver | Resolver是解决者的意思,用来标记某个类是ExceptionResolver的子类,并作为异常解决者参与;Resolver可以添加多个类,但是只有其中一个添加了Resolver注解类参与程序运行,看哪个先被扫描到就先执行哪个,建议只添加一个Resolver注解 |
WebSite | 用来标记某个类是WebSite的子类,并作为静态网站参与;WebSite可以注解多个类,所有添加了WebSite注解的类都将参与程序的运行 |
类和接口
名称 | 用途 |
---|---|
MultipartFile | 表示客户端表单中上传的文件 |
MessageConverter | MessageConverter需要结合Converter注解进行使用,首先要一个类实现MessageConverter接口,然后在该类上加上Converter注解即可使用,不需要其它的配置 |
HandlerInterceptor | 用来拦截客户端对服务端所有的接口的请求,如果是不存在的接口HandlerInterceptor是不会进行处理的,HandlerInterceptor需要结合Interceptor注解使用,首先一个类实现HandlerIterator接口,然后在该类上加上Interceptor注解即可使用,不需要其它配置 |
ExceptionResolver | 用来处理发生的异常,默认情况下会输出异常到Message到客户端,ExceptionResolver需要结合Resolver注解使用,首先要一个类实现ExceptionResolver接口,然后在该类上加上Resolver注解即可使用,不需要其它的配置 |
ResponseBody | ResponseBody是响应包,Controller和RestController中的方法返回值最终都会被转化为ResponseBody发送 |
RequestBody | 客户端可以把一段json或者一个文件整体写到请求的Body中发送给服务端,服务端处理的方式有两种,第一种是使用RequestBody自动转化为目标对象,第二种拿到RequestBody,由开发者转化为目标对象;因此RequestBody最终呈现的形式是通过流,所以客户端可以把任何内容放到RequestBody的请求包中发送到服务器端,服务端可以把RequestBody再转为任何自己想要的数据类型 |
Cookie | Cookie可以用来辨别用户的身份,一般会加密后发送给客户端,客户端会保存在磁盘上 |
Addition | Addition类的属性对应的是Addition注解的参数;它和Interceptor配合来进行使用 |
网站
名称 | 用途 |
---|---|
AssetsWebsite | Website需要结合Website注解使用,首先需要一个类继承Website类,然后在该类上加上Website注解即可使用,不需要其他配置 |
StorageWebsite | Website需要结合Website注解使用,首先需要一个类继承Website类,然后在该类上加上Website注解即可使用,不需要其他配置 |
FileBrowser | FileBrowser可以以列表的形式展开开发者指定目录的文件和目录,并可以点击下载列表中的文件和查看列表中的目录和内容 |
缓存
名称 | 用途 |
---|---|
ETag | 被添加了Controller注解或者RestController注解的类实现 |
LastModified | 被添加了Controller注解或者RestController注解的类实现。 |