e股脑电脑教程网
  • 首 页
  • 操作系统
  • 应用软件
  • 下载工具
  • 影音视频
  • 办公软件
  • 媒体制作
  • 网站建设
  • 平面设计
  • 数据库
  • 程序开发
  • 视频教程
编辑推荐: | 文章搜索:
您现在的位置: e股脑 >> 程序开发 >> JSP教程 >> 用Java实现Web服务器 >> 教程正文
 
教程搜索
 
 
相关教程
  • JSP分页技术实现
  • 使用XML封装数据库操作语
  • 结合”XML封装数据库操作
  • 如何使用XML实现多渠道接
  • 深入浅出taglib
  • 在JSP中编写你的第一个Ta
  • 用Java实现Web服务器
  • 如何利用xml,javascr
  • 缓存JSP显示的内容
  • 关于JAVA的分页查询操作技
  • 漫步j2ee之jsp技术(1)
  • 漫步j2ee之jsp技术(2)
  • Portlet应用开发(Portlet
  • 如何用jsp输出存在于orac
  • Servlet设计
  • 用servlet显示图片
 
 
赞 助 商
 
 
用Java实现Web服务器
  • 来源:e股脑
  • 点击次数:
  • 更新时间:2007-8-9

HTTP协议简介

超文本传输协议(HTTP)是位于TCP/IP 协议的应用层,是最广为人知的协议,也是互连网中最核心的协议之一,同样,HTTP 也是基于 C/S 或 B/S 模型实现的。事实上,我们使用的浏览器如Netscape 或IE 是实现HTTP 协议中的客户端,而一些常用的Web 服务器软件如Apache、IIS 和iPlanet Web Server 等是实现HTTP 协议中的服务器端。Web 页由服务端资源定位,传输到浏览器,经过浏览器的解释后,被客户所看到。

Web 的工作基于客户机/服务器计算模型,由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信。HTTP协议是Web浏览器和Web服务器之间的应用层协议,是通用的、无状态的、面向对象的协议。

一个完整的HTTP协议会话过程包括四个步骤:

◆ 连接,Web浏览器与Web服务器建立连接,打开一个称为Socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功;

◆ 请求,Web浏览器通过Socket向Web服务器提交请求。HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递);

◆ 应答,Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面;

◆ 关闭连接,应答结束后Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接。

编程思路

根据上述HTTP协议的会话过程,本实例中实现了GET请求的Web服务器程序的方法,方法如下:

通过创建ServerSocket 类对象,侦听用户指定的端口(为8080),等待并接受客户机请求到端口。创建与Socket相关联的输入流和输出流,然后读取客户机的请求信息。若请求类型是GET,则从请求信息中获取所访问的HTML 文件名;如果HTML 文件存在,则打开HTML 文件,把HTTP 头信息和HTML 文件内容通过Socket 传回给Web浏览器,然后关闭文件,否则发送错误信息给Web 浏览器。最后关闭与相应Web 浏览器连接的Socket。

用Java编写Web服务器httpServer.java文件的源代码如下:

  1. //httpServer.java
  2. import java.net.*;
  3. import java.io.*;
  4. import java.util.*;
  5. import java.lang.*;
  6. public class httpServer{
  7. public static void main(String args[]) {
  8. int

    port;
  9. ServerSocket server_socket;
  10. //读取服务器端口号
  11. try {
  12. port = Integer .parseInt(args[0]);
  13. }
  14. catch (Exception e) {
  15. port = 8080;
  16. }
  17. try {
  18. //监听服务器端口,等待连接请求
  19. server_socket = new ServerSocket (port);
  20. System .out.println("httpServer running on port " +
  21. server_socket.getLocalPort());
  22. //显示启动信息
  23. while (true ) {
  24. Socket socket = server_socket.accept();
  25. System .out.println("New connection accepted " +
  26. socket.getInetAddress() +
  27. ":" + socket.getPort());
  28. //创建分线程
  29. try {
  30. httpRequestHandler request =
  31. new httpRequestHandler(socket);
  32. Thread thread = new Thread (request);
  33. //启动线程
  34. thread.start();
  35. }
  36. catch (Exception e) {
  37. System .out.println(e);
  38. }
  39. }
  40. }
  41. catch (IOException e) {
  42. System .out.println(e);
  43. }
  44. }
  45. }
  46. class httpRequestHandler implements Runnable
  47. {
  48. final static

    String CRLF = "\r\n";
  49. Socket socket;
  50. InputStream input;
  51. OutputStream output;
  52. BufferedReader br;
  53. // 构造方法
  54. public httpRequestHandler(Socket socket) throws Exception
  55. {
  56. this .socket = socket;
  57. this .input = socket.getInputStream();
  58. this .output = socket.getOutputStream();
  59. this .br =
  60. new BufferedReader (new InputStreamReader (socket.getInputStream()));
  61. }
  62. // 实现Runnable 接口的run()方法
  63. public void run()
  64. {
  65. try {
  66. processRequest();
  67. }
  68. catch (Exception e) {
  69. System .out.println(e);
  70. }
  71. }
  72. private void processRequest() throws Exception
  73. {
  74. while (true ) {
  75. //读取并显示Web 浏览器提交的请求信息
  76. String headerLine = br.readLine();
  77. System .out.println("The client request is "+headerLine);
  78. if (headerLine.equals(CRLF) || headerLine.equals("")) b

    [1] [2] [3] 下一页

  • 上一篇教程: 如何利用xml,javascript绕开applet的安全问题
  • 下一篇教程: 在JSP中编写你的第一个Tag
  •  

    关于本站 | 广告联系 | 版权声明 | 使用帮助

    Copyright © 2004-2008 www.egunao.com All rights reserved.