电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java 如何實(shí)現(xiàn)一個(gè)http服務(wù)器

瀏覽:4日期:2022-08-20 18:04:16

在Java中可以使用HttpServer類(lèi)來(lái)實(shí)現(xiàn)Http服務(wù)器,該類(lèi)位于com.sun.net包下(rt.jar)。實(shí)現(xiàn)代碼如下:

主程序類(lèi)

package bg.httpserver;import com.sun.net.httpserver.HttpServer;import java.io.IOException;import java.net.InetSocketAddress;import java.util.concurrent.Executors;public class HttpServerStarter { public static void main(String[] args) throws IOException { //創(chuàng)建一個(gè)HttpServer實(shí)例,并綁定到指定的IP地址和端口號(hào) HttpServer httpServer = HttpServer.create(new InetSocketAddress(8080), 0); //創(chuàng)建一個(gè)HttpContext,將路徑為/myserver請(qǐng)求映射到MyHttpHandler處理器 httpServer.createContext('/myserver', new MyHttpHandler()); //設(shè)置服務(wù)器的線(xiàn)程池對(duì)象 httpServer.setExecutor(Executors.newFixedThreadPool(10)); //啟動(dòng)服務(wù)器 httpServer.start(); }}

HttpServer:HttpServer主要是通過(guò)帶參的create方法來(lái)創(chuàng)建,第一個(gè)參數(shù)InetSocketAddress表示綁定的ip地址和端口號(hào)。第二個(gè)參數(shù)為int類(lèi)型,表示允許排隊(duì)的最大TCP連接數(shù),如果該值小于或等于零,則使用系統(tǒng)默認(rèn)值。

createContext:可以調(diào)用多次,表示將指定的url路徑綁定到指定的HttpHandler處理器對(duì)象上,服務(wù)器接收到的所有路徑請(qǐng)求都將通過(guò)調(diào)用給定的處理程序?qū)ο髞?lái)處理。

setExecutor:設(shè)置服務(wù)器的線(xiàn)程池對(duì)象,不設(shè)置或者設(shè)為null則表示使用start方法創(chuàng)建的線(xiàn)程。

HttpHandler實(shí)現(xiàn)

package bg.httpserver;import com.sun.net.httpserver.Headers;import com.sun.net.httpserver.HttpExchange;import com.sun.net.httpserver.HttpHandler;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.OutputStream;import java.util.List;import java.util.Map;import java.util.stream.Collectors;/** * 處理/myserver路徑請(qǐng)求的處理器類(lèi) */public class MyHttpHandler implements HttpHandler { @Override public void handle(HttpExchange httpExchange) { try { StringBuilder responseText = new StringBuilder(); responseText.append('請(qǐng)求方法:').append(httpExchange.getRequestMethod()).append('<br/>'); responseText.append('請(qǐng)求參數(shù):').append(getRequestParam(httpExchange)).append('<br/>'); responseText.append('請(qǐng)求頭:<br/>').append(getRequestHeader(httpExchange)); handleResponse(httpExchange, responseText.toString()); } catch (Exception ex) { ex.printStackTrace(); } } /** * 獲取請(qǐng)求頭 * @param httpExchange * @return */ private String getRequestHeader(HttpExchange httpExchange) { Headers headers = httpExchange.getRequestHeaders(); return headers.entrySet().stream().map((Map.Entry<String, List<String>> entry) -> entry.getKey() + ':' + entry.getValue().toString()).collect(Collectors.joining('<br/>')); } /** * 獲取請(qǐng)求參數(shù) * @param httpExchange * @return * @throws Exception */ private String getRequestParam(HttpExchange httpExchange) throws Exception { String paramStr = ''; if (httpExchange.getRequestMethod().equals('GET')) { //GET請(qǐng)求讀queryString paramStr = httpExchange.getRequestURI().getQuery(); } else { //非GET請(qǐng)求讀請(qǐng)求體 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpExchange.getRequestBody(), 'utf-8')); StringBuilder requestBodyContent = new StringBuilder(); String line = null; while ((line = bufferedReader.readLine()) != null) {requestBodyContent.append(line); } paramStr = requestBodyContent.toString(); } return paramStr; } /** * 處理響應(yīng) * @param httpExchange * @param responsetext * @throws Exception */ private void handleResponse(HttpExchange httpExchange, String responsetext) throws Exception { //生成html StringBuilder responseContent = new StringBuilder(); responseContent.append('<html>').append('<body>').append(responsetext).append('</body>').append('</html>'); String responseContentStr = responseContent.toString(); byte[] responseContentByte = responseContentStr.getBytes('utf-8'); //設(shè)置響應(yīng)頭,必須在sendResponseHeaders方法之前設(shè)置! httpExchange.getResponseHeaders().add('Content-Type:', 'text/html;charset=utf-8'); //設(shè)置響應(yīng)碼和響應(yīng)體長(zhǎng)度,必須在getResponseBody方法之前調(diào)用! httpExchange.sendResponseHeaders(200, responseContentByte.length); OutputStream out = httpExchange.getResponseBody(); out.write(responseContentByte); out.flush(); out.close(); }}

運(yùn)行HttpServerStarter,在瀏覽器中訪(fǎng)問(wèn)如下:

Java 如何實(shí)現(xiàn)一個(gè)http服務(wù)器

以上就是Java 如何實(shí)現(xiàn)一個(gè)http服務(wù)器的詳細(xì)內(nèi)容,更多關(guān)于Java 實(shí)現(xiàn)http服務(wù)器的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | 快速卷帘门_硬质快速卷帘门-西朗门业 | 温州中研白癜风专科_温州治疗白癜风_温州治疗白癜风医院哪家好_温州哪里治疗白癜风 | 安徽控制器-合肥船用空调控制器-合肥家电控制器-合肥迅驰电子厂 安徽净化板_合肥岩棉板厂家_玻镁板厂家_安徽科艺美洁净科技有限公司 | 挖掘机挖斗和铲斗生产厂家选择徐州崛起机械制造有限公司 | 十二星座查询(性格特点分析、星座运势解读) - 玄米星座网 | 粉末冶金注射成型厂家|MIM厂家|粉末冶金齿轮|MIM零件-深圳市新泰兴精密科技 | Q361F全焊接球阀,200X减压稳压阀,ZJHP气动单座调节阀-上海戎钛 | 智能汉显全自动量热仪_微机全自动胶质层指数测定仪-鹤壁市科达仪器仪表有限公司 | 许昌奥仕达自动化设备有限公司| 玄米影院| 影像测量仪_三坐标测量机_一键式二次元_全自动影像测量仪-广东妙机精密科技股份有限公司 | 氧化锆纤维_1800度高温退火炉_1800度高温烧结炉-南京理工宇龙新材料股份有限公司 | 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 扬州汇丰仪表有限公司| LCD3D打印机|教育|桌面|光固化|FDM3D打印机|3D打印设备-广州造维科技有限公司 | 起好名字_取个好名字_好名网免费取好名在线打分| 液压扳手-高品质液压扳手供应商 - 液压扳手, 液压扳手供应商, 德国进口液压拉马 | 磁棒电感生产厂家-电感器厂家-电感定制-贴片功率电感供应商-棒形电感生产厂家-苏州谷景电子有限公司 | 石膏基自流平砂浆厂家-高强石膏基保温隔声自流平-轻质抹灰石膏粉砂浆批发-永康市汇利建设有限公司 | 膏剂灌装旋盖机-眼药水灌装生产线-西林瓶粉剂分装机-南通博琅机械科技 | SPC工作站-连杆综合检具-表盘气动量仪-内孔缺陷检测仪-杭州朗多检测仪器有限公司 | 深圳标识制作公司-标识标牌厂家-深圳广告标识制作-玟璟广告-深圳市玟璟广告有限公司 | 皮带输送机-大倾角皮带输送机-皮带输送机厂家-河南坤威机械 | 空心明胶胶囊|植物胶囊|清真胶囊|浙江绿键胶囊有限公司欢迎您! | 长沙发电机-湖南发电机-柴油发电机供应厂家-长沙明邦智能科技 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 洁净化验室净化工程_成都实验室装修设计施工_四川华锐净化公司 | HYDAC过滤器,HYDAC滤芯,现货ATOS油泵,ATOS比例阀-东莞市广联自动化科技有限公司 | 螺杆真空泵_耐腐蚀螺杆真空泵_水环真空泵_真空机组_烟台真空泵-烟台斯凯威真空 | 北京模型公司-工业模型-地产模型-施工模型-北京渝峰时代沙盘模型制作公司 | MES系统-WMS系统-MES定制开发-制造执行MES解决方案-罗浮云计算 | 双吸泵,双吸泵厂家,OS双吸泵-山东博二泵业有限公司 | 电池挤压试验机-自行车喷淋-车辆碾压试验装置-深圳德迈盛测控设备有限公司 | 炒货机-炒菜机-炒酱机-炒米机@霍氏机械 | 变色龙云 - 打包app_原生app_在线制作平台_短链接_ip查询 | 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | 法钢特种钢材(上海)有限公司 - 耐磨钢板、高强度钢板销售加工 阀门智能定位器_电液动执行器_气动执行机构-赫尔法流体技术(北京)有限公司 | 污水处理设备,一体化泵站,一体化净水设备-「梦之洁环保设备厂家」 | 金属波纹补偿器厂家_不锈钢膨胀节价格_非金属伸缩节定制-庆达补偿器 | 氢氧化钙设备, 氢氧化钙生产线-淄博惠琛工贸有限公司 |