今天把一个功能模块做成了http服务,这还是第一次写http服务,纪录下来。

 package com.chuntent.itemsearch;

 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.URI;
import java.net.URLDecoder; import net.sf.json.JSONArray;
import net.sf.json.JSONObject; import com.chuntent.tool.StringTool;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
import com.sun.net.httpserver.spi.HttpServerProvider; public class SearchHttpServer {
public static SearchEngine engine = new SearchEngine();
//启动服务,监听来自客户端的请求
public static void httpserverService() throws IOException {
engine.initFromSQL();
HttpServerProvider provider = HttpServerProvider.provider();
HttpServer httpserver =provider.createHttpServer(new InetSocketAddress(8089), 100);//监听端口6666,能同时接 受100个请求
httpserver.createContext("/searchserver", new MyHttpHandler());
httpserver.setExecutor(null);
httpserver.start();
System.out.println("server started");
}
//Http请求处理类
static class MyHttpHandler implements HttpHandler {
public void handle(HttpExchange httpExchange) throws IOException {
String method = httpExchange.getRequestMethod();
//响应信息
String responseMsg = "fail";
//传入参数
StringBuilder sb = new StringBuilder();
//get方法
if (method.equals("GET")) {
URI uri = httpExchange.getRequestURI();
sb.append(uri.getQuery());
} else if (method.equals("POST")){ InputStream in = httpExchange.getRequestBody(); // 获得输入流
BufferedReader reader = new BufferedReader(
new InputStreamReader(in));
String temp = null;
while ((temp = reader.readLine()) != null) {
sb.append(temp);
}
}
else { }
String [] para = StringTool.split(URLDecoder.decode(sb.toString() , "utf-8"), "&", false);
String query = "";
int type = -1;
int sortMethod = 1;
int pageIndex = 1;
int pageSize = 32;
double creditMin ,creditMax , priceMin ,priceMax ;
creditMin = creditMax = priceMin = priceMax = -1 ;
boolean suc = true;
for(String line : para){
String [] array = line.split("=");
if(array.length < 2)
suc = false;
if(array[0].equals("query"))
query = array[1];
else if(array[0].equals("type"))
type = Integer.parseInt(array[1]);
else if(array[0].equals("sortMethod"))
sortMethod = Integer.parseInt(array[1]);
else if(array[0].equals("creditMin"))
creditMin = Double.parseDouble(array[1]);
else if(array[0].equals("creditMax"))
creditMax = Double.parseDouble(array[1]);
else if(array[0].equals("priceMin"))
priceMin = Double.parseDouble(array[1]);
else if(array[0].equals("priceMax"))
priceMax = Double.parseDouble(array[1]);
else if(array[0].equals("pageIndex"))
pageIndex = Integer.parseInt(array[1]);
else if(array[0].equals("pageSize"))
pageSize = Integer.parseInt(array[1]); }
if(suc){
long current = System.currentTimeMillis();
//creditMin, double creditMax, double priceMin, double priceMax
String result = engine.search(query, sortMethod , type , creditMin ,creditMax , priceMin ,priceMax , pageIndex , pageSize);
long duration = System.currentTimeMillis() - current; JSONObject jobj = JSONObject.fromObject(result);
jobj.put("time", duration);
responseMsg = jobj.toString();
}
else{
System.out.println("para error !");
}
httpExchange.sendResponseHeaders(200, responseMsg.getBytes().length); //设置响应头属性及响应信息的长度
OutputStream out = httpExchange.getResponseBody(); //获得输出流
out.write(responseMsg.getBytes());
out.flush();
httpExchange.close(); }
}
public static void main(String[] args) throws IOException {
httpserverService();
}
}

  

http 服务的更多相关文章

  1. solr服务中集成IKAnalyzer中文分词器、集成dataimportHandler插件

    昨天已经在Tomcat容器中成功的部署了solr全文检索引擎系统的服务:今天来分享一下solr服务在海量数据的网站中是如何实现数据的检索. 在solr服务中集成IKAnalyzer中文分词器的步骤: ...

  2. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  3. 启动了VSAN服务的主机不在vCenter集群中

    背景: 这个问题的来源是,某用户将该ESXi主机直接夺取到另一个vCenterA的管辖中,而这个vCenterA中集群A开启了VSAN功能,导致再次反向夺取到vCenterB中的时候带有了来自于集群A ...

  4. node服务的监控预警系统架构

    需求背景 目前node端的服务逐渐成熟,在不少公司内部也开始承担业务处理或者视图渲染工作.不同于个人开发的简单服务器,企业级的node服务要求更为苛刻: 高稳定性.高可靠性.鲁棒性以及直观的监控和报警 ...

  5. 通过AngularJS实现前端与后台的数据对接(二)——服务(service,$http)篇

    什么是服务? 服务提供了一种能在应用的整个生命周期内保持数据的方法,它能够在控制器之间进行通信,并且能保证数据的一致性. 服务是一个单例对象,在每个应用中只会被实例化一次(被$injector实例化) ...

  6. 本人提供微软系.NET技术顾问服务,欢迎企业咨询!

    背景: 1:目前微软系.NET技术高端人才缺少. 2:企业很难直接招到高端技术人才. 3:本人提供.NET技术顾问,保障你的产品或项目在正确的技术方向. 技术顾问服务 硬服务项: 1:提供技术.决策. ...

  7. 使用 Roslyn 编译器服务

    .NET Core和 .NET 4.6中 的C# 6/7 中的编译器Roslyn 一个重要的特性就是"Compiler as a Service",简单的讲,就是就是将编译器开放为 ...

  8. C#高性能TCP服务的多种实现方式

    哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C#编写TCP服务的花样姿势!>. 本篇文章的主 ...

  9. 使用ServiceStack构建Web服务

    提到构建WebService服务,大家肯定第一个想到的是使用WCF,因为简单快捷嘛.首先要说明的是,本人对WCF不太了解,但是想快速建立一个WebService,于是看到了MSDN上的这一篇文章 Bu ...

  10. 关于如何提高Web服务端并发效率的异步编程技术

    最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...

随机推荐

  1. 阿里云服务器Node环境配置

    最近,将网站的阿里云服务器迁移到阿里云北京机房,记录下CentOS的迁移过程. 首次登录云服务器,要先进行用户设置. 用户设置 首先用passwd命令修改超级管理员root密码. $ passwd 根 ...

  2. HTML5中的Canvas精品教程

    http://javascript.ruanyifeng.com/htmlapi/canvas.html

  3. 安装Netsharp演示插件

    阅读本文请先阅读Netsharp下载及环境搭建 Netsharp提供了DEMO程序,DEMO完成的功能是Netsharp文章系列中的Netsharp快速入门系列中介绍的功能,DEMO是以Netshar ...

  4. JavaScript 闭包详解

    一.Javascript闭包的用途 事实上,通过使用闭包,我们可以做很多事情.比如模拟面向对象的代码风格:更优雅,更简洁的表达出代码:在某些方面提升代码的执行效率. 1.匿名自执行函数 我们知道所有的 ...

  5. BZOJ 1012: [JSOI2008]最大数maxnumber 线段树

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1012 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作.语法:Q L 功能: ...

  6. 【POJ】【2891】Strange Way to Express Integers

    中国剩余定理/扩展欧几里得 题目大意:求一般模线性方程组的解(不满足模数两两互质) solution:对于两个方程 \[ \begin{cases} m \equiv r_1 \pmod {a_1} ...

  7. 【BZOJ】【2424】【HAOI2010】订货

    网络流/费用流 比较简单的题……我一开始想成像软件开发那题一样的做法了……就是每天拆点,S->i (INF,0) .i+n->T (u[i],0) 然后处理购入 S->i+n (IN ...

  8. Slim + Twig 构建PHP Web应用程序

    Twig : PHP 视图模板引擎,类似于Smart模板引擎. 下载地址:http://twig.sensiolabs.org/ Slim: 轻量级PHP MVC框架,可用于构建Web app,Res ...

  9. 帝国cms栏目别名如何调用?

    我们在用帝国cms建站时经常会发现栏目的标题不好设置,栏目名称太长的话在后台那边看了眼花,太短又不好优化.能不能直接调用栏目别名呢?栏目别名不会什么影响.那么,帝国cms栏目别名怎么调用呢?和ytka ...

  10. js弹出图片原图效果

    1.将js方法独立出来common.js function openwin(src){ var basePath = document.getElementById("basePath&qu ...