1.先介绍其原理,并以结巴分词服务器来举例,其实这种服务器类似于Tomcat,只是专门初处理一种特定的功能
具体要求是 我利用浏览器或者程序发送一个Get请求,如何这个服务器给我一个响应结果,先给出一个示范,通过对一个单词或者词组进行分词,返回给浏览器
1.python版实现 ,这个比较简单,但是效率不是特别高,具体请看代码注释,我会在下面具体写出java版的分词服务器的
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun Jun 7 21:39:56 2020
@author: mac
"""
import jieba #导入包
cut = jieba.cut
# bottle 是一个http 的开发工具
from bottle import route,run
# sentence :待拆分的字符串 中华人民共和国 ->
#返回值: 以空格分隔的 字符串
def token(sentence):
seg_list = list( cut(sentence) )
return " ".join(seg_list)
#路由设置 这里其实就相当于 SpringMVC的requestMapping()一样的
@route('/token/:sentence')
def index(sentence):
print( "====",sentence )
result = token(sentence)
return "{\"ret\":0, \"msg\":\"OK\", \"terms\":\"%s\"}" % result
#相当于 java 中的 main
if __name__ == "__main__":
#以 http://localhost:8282/token/今天是星期天 访问
#以http协议监听8282端口,并自动解析Http协议
run(host="localhost",port=8282)
2.下面重点介绍java版的分词,其实核心代码真的非常简单,就两句代码,我先给一个pom.xml
<!-- https://mvnrepository.com/artifact/com.huaban/jieba-analysis -->
<dependency>
<groupId>com.huaban</groupId>
<artifactId>jieba-analysis</artifactId>
<version>1.0.2</version>
</dependency>
然后我们就要开始构建属于一个自己的服务器了,首先我们应该了解,它应该是一个多线程程序的,因为我同时可能接受多个请求,而且利用Socket来监听某个端口的数据,所以我们要先监听端口,而且以多线程的方式来处理发送过来的数据,
/**
原理:浏览器发送到8083端口的数据我用InputStream来读取,具体数据就是一段Http协议的文本
浏览器发送的一个Get请求
GET /token?sentence=asd%20adasd%20sds%20sfsd%20sfsdf HTTP/1.1
Host: localhost:8083
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh