版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、简易Web服务器实现实现了一下简易的web服务器,由于只是简易的web服务器,所以并没有什么特别高深的技术含量。(文章来源:北大青鸟成都锦江)1. TCP通信(socket)2. IO流3. 线程池技术服务器架构也简单:Request类主要是实现解析URL的功能,以获取html文件的路径。Response类实现读取html文件并且向浏览器输出html文件内容。Server类整合Request类和Response类,实现线程的run方法。Test类实现线程池,同时也是服务启动类。下图是浏览器发给服务器的内容:下面是效果图:1.服务器输出的日志页面效果图:下面贴一些关键代码(了解详情):java
2、view plain copy1. package request;2.5.6. public class Request 7. private String fileroute=null;8. private BufferedReader br=null;9.10. public Request(BufferedReader br) 11. this.br=br;12. 13. public void parse()14.15. String info=null;16. StringBuffer msg=new StringBuffer();17. try 18.19. while(info
3、=br.readLine()!=null && info.length()>0)/循环读取客户端的信息20. msg.append(info);21. 22. catch (IOException e) 23. / TODO Auto-generated catch block24. e.printStackTrace();25. 26.27. fileroute=parseFileroute(msg.toString();28. 29. /由浏览器发给服务器内容的规律进行读取文件路径30. private String parseFileroute(String req
4、uestString) 31. int index1, index2; 32. index1 = requestString.indexOf(' ');33. if (index1 != -1) 34. index2 = requestString.indexOf(' ', index1 + 1);35. if (index2 > index1)36. return requestString.substring(index1 + 1, index2);37. 38. return null;39. 40. /获取html文件名41. public Str
5、ing getFileroute()42. return fileroute;43. 44. java view plain copy1. package response;2.9.10. public class Response 11. private PrintWriter pw=null;12. private String fileroute=null;13.14. public Response(PrintWriter pw, String fileroute) 15. this.pw=pw;16. this.fileroute=fileroute;17. 18.19. publi
6、c void doresponse() 20. File file=new File("webapp"+fileroute);22. if(!file.exists() | !file.isFile() /不是文件或不存在23. return;24.25. FileInputStream is=null;26. InputStreamReader isr=null;27. BufferedReader br=null;28.29. try 30. is=new FileInputStream(file);31. isr=new InputStreamReader(is);3
7、2. br=new BufferedReader(isr);33. String info;34. StringBuffer msg=new StringBuffer();35. while(info=br.readLine()!=null && info.length()>0)/循环读取html文件内容36. msg.append(info);37. 38. /将文件内容输出到浏览器39. pw.write(msg.toString();40. pw.flush();41. catch (IOException e) 42. / TODO Auto-generated
8、catch block43. e.printStackTrace();44. finally45. /关闭资源46. try 47. if(br!=null)48. br.close();49. if(isr!=null)50. isr.close();51. if(is!=null)52. is.close();53. catch (IOException e) 54. e.printStackTrace();55. 56. 57.58. 59. java view plain copy1. package server;2.11.12. import request.Request;13.
9、 import response.Response;14.15. /*16. * 基于TCP协议的Socket通信,实现用户登陆17. * 服务器端18. */19. public class Server implements Runnable 20. private Socket socket=null;21. public Server(Socket socket) 22. this.socket=socket;23. 24.25. Override26. public void run() 名字28. InputStream is=null;29. InputStreamReader
10、isr=null;30. BufferedReader br=null;31. OutputStream os=null;32. PrintWriter pw=null;33. /1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口34. try 35.36. /接收请求 进入阻塞状态37. InetAddress address=socket.getInetAddress();41. is=socket.getInputStream();42. isr=new InputStreamReader(is);43. br=new BufferedReader
11、(isr);44.45. Request request = new Request(br);46. request.parse();47.48. os = socket.getOutputStream();49. pw = new PrintWriter(os); 50. Response response =new Response(pw, request.getFileroute();51. response.doresponse();52. catch (IOException e) 53. / TODO: handle exception54. e.printStackTrace()
12、;55. finally 56. /关闭资源57. try 58. if(pw!=null)59. pw.close();60. if(os!=null)61. os.close();62. if(br!=null)63. br.close();64. if(isr!=null)65. isr.close();66. if(is!=null)67. is.close();68. if(socket!=null)69. socket.close();70. catch (IOException e) 71. e.printStackTrace();72. 73. 74. 75. java vie
13、w plain copy1. package test;2.8.9. import server.Server;10.11. public class Test 12.13. public static void main(String args) 14. ExecutorService pool=null;15. ServerSocket serverSocket=null;16. try 17. serverSocket=new ServerSocket(80);18. / 创建一个可重用固定线程数的线程池 线程数为519. pool = Executors.newFixedThreadPool(5);20. Socket socket=null;21. while(true) 22. socket=serverSocket.accept();23.24. / new Thread(new Server(socket).start();25. pool.execute(new Server(socket);26. 27. catch (IOException e) 28. e.printStackTrace();29. finally 30. if(pool!=null)31. pool.shutdown();32. tr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 会计事务所制度
- 人力资源制度
- 中国的证券结算制度
- 兰州有色冶金设计研究院有限公司2025年招聘备考题库及答案详解参考
- 2026年雄安空天备考题库研究院招聘备考题库附答案详解
- 2025至2030中国抗帕金森中成药发展现状及战略规划研究报告
- 中国科学院西北高原生物研究所2026年博士后招聘备考题库及答案详解参考
- 2025-2030中医药馆加盟体系服务质量评估运营管理改进投资配置文本
- 2025至2030中国生物医药产业市场格局及发展趋势研究报告
- 2025至2030冷链物流基础设施缺口与区域布局优化策略研究报告
- 2026广东广州开发区统计局(广州市黄埔区统计局)招聘市商业调查队队员1人考试备考试题及答案解析
- 餐饮服务仪容仪表及礼貌培训
- 惠州市惠阳区(2025年)社工岗位考试题目及答案
- 2026年辽宁现代服务职业技术学院单招职业技能笔试参考题库带答案解析
- (2025年)病理学试题及答案
- 贵州省贵阳市普通中学2024-2025学年高二上学期语文期末试卷(含答案)
- 广西医疗机构病历书写规范与治理规定(第三版)
- 2026年浙江省公务员考试《行测》真题(A类)
- 2025年党务干部考试题目及答案
- 雨课堂在线学堂《项目管理概论》作业单元考核答案
- GB/T 12060.5-2011声系统设备第5部分:扬声器主要性能测试方法
评论
0/150
提交评论