怎样借助Spring boot快速实现一个简单的http服务器
来源:互联网 发布:威海市南海新区知乎 编辑:程序博客网 时间:2024/05/18 01:04
借助强大的spring boot框架来实现一个简易的http服务器,十分的简单,只需要短短的几十行代码就可以解决。
先让我们看看最终的效果:
这个http服务器的实现思路可以概括成一下几步:
- 解析资源路径
- 在站点目录下获取相对应的文件
- 根据请求的资源文件的后缀名判断其媒体类型
- 构造响应体并返回给浏览器端
第一步:解析资源路径
@RestControllerclass HttpController{ @Autowired lateinit var httpSerivce:HttpService @GetMapping("/**") fun httpRequest(@RequestHeader("Host")host:String, request: HttpServletRequest)= httpSerivce.response(PathUtil.getPath(request.requestURL.toString(),host))}
说明:使用 /** 来匹配任何可能的路径,函数参数中,通过RequestHeader注解获取主机信息,通过HttpServletRequest获取完整的url路径。使用PathUtil来解析出资源路径。其中PageUtil的代码时这样的:
object PathUtil { fun getPath(fullUrl:String,host:String):String{ return fullUrl.removePrefix("http://").removePrefix("https://").removePrefix(host) }}
第二步:在站点目录下获取相对应的文件
@Serviceclass HttpService { @Value("\${html.resource.path}") lateinit var resPath:String
html: resource: path: /Users/feint/Serverserver: port: 8080
说明:在配置文件application.yml中配置站点的根目录。在这里为了方便、快速的看到结果,没有对一些可能出现的错误或异常进行相应的处理(比如文件不存在)。这里有一点要注意的,由于美元符在kotlin的字符串中是一个特殊符号,所以在使用Value注解进行取值的时候需要使用反斜杠进行转义。
第三步:根据请求的资源文件的后缀名判断其媒体类型
object MediaUtil{ val APPLICATION_JAVASCRIPT=MediaType.valueOf("application/javascript") val TEXT_CSS=MediaType.valueOf("text/css") val mediaMap:Map<String,MediaType> = mapOf(Pair("html",MediaType.TEXT_HTML), Pair("js",APPLICATION_JAVASCRIPT), Pair("css", TEXT_CSS), Pair("png",MediaType.IMAGE_PNG), Pair("gif",MediaType.IMAGE_GIF), Pair("jpeg",MediaType.IMAGE_JPEG), Pair("jpg", MediaType.IMAGE_JPEG)) fun getMedia(type:String)= mediaMap[type]}
说明:为了避免大量的判断语句,我将文件后缀和媒体类型的对应关系使用一个Map进行维护。springframework自带的MediaType的类型并不十分完全,这里还需要自行添加一些需要的媒体类型:css、javascript等。
第四步:构造响应体并返回给浏览器端
return ResponseEntity.ok() .contentLength(file.length()) .contentType(MediaUtil.getMedia(file.extension)) .body(InputStreamResource(file.inputStream()))
说明:设置几个必要的信息:内容长度(响应体的长度)、媒体类型(浏览器会更具不同的媒体类型对响应体进行不同的处理)、响应体
结尾
源码地址(Github):https://github.com/feintKotlin/fkhttp
注:这将是一个长期更新的项目,欢迎持续关注咱的Github 以及官网。
阅读全文
0 0
- 怎样借助Spring boot快速实现一个简单的http服务器
- 利用Maven快速创建一个简单的spring boot 实例
- 一个简单的http服务器的实现
- C#实现一个简单的HTTP服务器
- C#实现一个简单的HTTP服务器
- #实现一个简单的HTTP服务器
- Python 实现一个简单的http服务器
- C#实现一个简单的HTTP服务器
- Python 实现一个简单的http服务器
- Python 实现一个简单的http服务器
- 实现一个简单的http服务器
- Python 实现一个简单的http服务器
- 一个简单的Http服务器
- 一个简单的HTTP服务器
- 一个简单的http服务器的实现 含源代码
- 实现一个最简单的HTTP服务器(version2.9)
- 【Node.js】实现一个最简单的HTTP服务器
- 用java socket实现了一个简单的http服务器
- leetcode 44. Wildcard Matching (需要好好想一下)
- 2015年3月CCF计算机软件能力认证题:节日
- CodeChef Protecting The Poison【贪心】
- Linux 下的静态(函数)库、动态(函数)库
- LInux中逻辑卷删除创建命令备忘
- 怎样借助Spring boot快速实现一个简单的http服务器
- 屏幕适配
- 今日头条一面面经
- c# 多线程实现和获取方法中的对应的地址
- CF841B Godsend【思路】
- Java中的多线程你只要看这一篇就够了
- MySQL索引规约
- 【每周论文】Heracles: Improving Resource Efficiency at Scale
- Android 5.0特征补充1