在web的最初阶段是不支持web服务器与用户的交互的.也就是说web服务器不能动态的生成用户要访问的页面,web服务器提供给用户的页面都是提前生成好的.所以也说这种页面是静态页面.
比如说用户请求访问http://localhost:8088/hello1.htm, 那么web服务器从自己的想要目录下获取hello1.htm(已经存在).然后通过HTTP协议返回给用户.
下面我们来模拟一下这个过程.因为HTTP协议是应用层协议,基于TCP,所以我们用Java的socket来编写HTTP服务器.
编写HttpServer
import java.io.*;
import java.net.*;
public class HttpServer {
private static final int port = 8088;
private ServerSocket serverSocket = null;
public HttpServer() throws IOException {
serverSocket = new ServerSocket(port);
System.out.println("HTTPServer startup OK...");
}
public String getRequest(Socket socket) throws IOException {
InputStream socketIn = socket.getInputStream();
int size = socketIn.available();
byte[] requestBuff = new byte[size];
socketIn.read(requestBuff);
return new String(requestBuff);
}
public String getURI(String request) {
String firstLine = request.substring(0, request.indexOf("\r\n"));
String[] parts = firstLine.split(" ");
return parts[1];
}
public String getContentType(String URI) {
String contentType;
if (URI.indexOf("html") != -1 || URI.indexOf("htm") != -1)
contentType = "text/html";
else if (URI.indexOf("jpg") != -1 || URI.indexOf("jpeg") != -1)
contentType = "image/jpeg";
else if (URI.indexOf("gif") != -1)
contentType = "image/gif";
else
contentType = "application/octet-stream";
return contentType;
}
public InputStream getResponseContent(String URI)
throws FileNotFoundException {
InputStream htmlInputStream = new FileInputStream(
System.getProperty("user.dir") + "/WebRoot" + URI);
return htmlInputStream;
}
public String assembleResponseHead(String URI, String contentType) {
String responseFirstLine = "HTTP/1.1 200 OK\r\n";
String responseHeader = "Content-Type:" + contentType + "\r\n\r\n";
return responseFirstLine + responseHeader;
}
public void service() throws InterruptedException {
while (true) {
Socket socket;
try {
socket = serverSocket.accept();
String request = getRequest(socket);
System.out.println("HttpServer receive request:\n" + request);
String URI = getURI(request);
String contentType = getContentType(URI);
OutputStream out = socket.getOutputStream();
out.write(assembleResponseHead(URI, contentType).getBytes());
int len = 0;
byte[] buffer = new byte[128];
InputStream htmlInputStream = getResponseContent(URI);
while ((len = htmlInputStream.read(buffer)) != -1)
out.write(buffer, 0, len);
Thread.sleep(1000);
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws IOException,
InterruptedException {
HttpServer httpServer = new HttpServer();
httpServer.service();
}
}
创建hello1.htm
然后在项目的目录/WebRoot下放置一个hello1.htm页面:
hello1.htm很简单,显示标题HelloWorld
<html>
<head>
<title>HelloWorld</title>
</head>
<body >
<h1>Hello</h1>
</body>
</html>
访问hello1.htm
启动HTTPServer,在浏览器访问http://localhost:8088/hello1.htm,看到eclipse的Console输出
GET /hello1.htm HTTP/1.1
Host: localhost:8088
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.125 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4
这是浏览器请求的HTTP消息,包括了HTTP头,请求方式,有时也有请求正文(这里没有).
浏览器显示为:
这样简单的HTTPSever就算完成了,后续我将继续研究模拟一下Servlet的HTTP服务器.
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
然而,这个简单的Java实现为理解基本的HTTP服务器工作原理提供了一个良好的起点。 总结来说,本实验涵盖了Java网络编程的基本概念,特别是使用Socket实现客户端与服务器间的通信,以及对HTTP协议的理解和应用。通过...
首先,我们关注的是Java语言在实现HTTP服务器中的应用。Java SE(标准版)提供了丰富的API,使得开发人员可以便捷地创建网络应用程序。在这个项目中,`java.net.ServerSocket` 和 `java.net.Socket` 类被用于监听和...
【标题】:“http简易服务器 java 源码”是指基于Java...以上就是基于Java实现的HTTP简易服务器的关键知识点和功能解析。理解这些概念有助于你更好地理解和使用这个源码,甚至可以作为学习网络编程和服务器开发的基础。
本实例将带你一步步探索如何利用Java实现一个简单的HTTP服务器,并通过源码解析来深化对HTTP协议的理解。 首先,让我们了解HTTP协议的基础。HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,用于从...
用java实现的http服务器端例程
总的来说,通过Java实现HTTP服务器是一个很好的学习和实践网络编程技能的机会。这涉及到理解TCP/IP通信、HTTP协议以及Java的I/O操作。通过分析提供的代码和相关资源,开发者可以深入了解网络服务的构建,并为更复杂...
Java实现的HTTP服务器是一个基础的网络编程项目,它利用了Java的Socket编程和HTTP协议的知识。这个简单的HTTP服务器能够处理浏览器发起的GET请求,将指定的静态资源(如HTML、CSS、JavaScript文件)发送回客户端,...
总的来说,"计算机网络实验一:Windows环境下用Java实现web服务器"是一次综合性的学习体验,涵盖了HTTP协议、网络编程、Java编程以及服务器与前端的交互等多个重要知识点。通过实践,学生将能够更全面地理解Web服务...
在本文中,我们将深入探讨如何使用Java来实现一个简单的Web文件服务器。这个项目不仅适合Java初学者,也是学习网络编程的绝佳实践。我们将讨论以下几个关键知识点: 1. **TCP与UDP协议**: - TCP(Transmission ...
标题 "JAVA实现简单的http静态网页服务器" 涉及的核心知识点是使用Java编程语言构建一个基本的HTTP服务器,用于提供静态网页服务。这通常是为了学习、测试或在简单环境中部署Web应用。以下是对这个主题的详细说明: ...
"JAVA实现的简单的web服务器"项目正是这样一个实例,它演示了如何利用Java语言构建一个基本的HTTP服务器,能够处理GET请求并返回HTML页面或图片。在这个过程中,开发者会接触到网络编程、多线程以及HTTP协议等相关...
【Java实现Web服务器详解】 Java是一种广泛用于开发各种应用程序的语言,包括构建Web服务器。要理解如何用Java实现Web服务器,首先要了解Web服务器的工作原理和HTTP协议的基础知识。 **Web服务器的工作原理** Web...
Java Socket实现简单的Web服务器是一个基础但实用的编程实践,它涉及到网络编程、HTTP协议和文件I/O等核心概念。在本项目中,我们利用Java的Socket API构建了一个基本的服务器,该服务器仅处理HTTP GET请求并返回...
在IT行业中,远程监控是一项重要的技术,...总的来说,Java实现远程监控是一个涉及JMX、RMI以及网络编程的综合过程。通过合理设计和实现,我们可以构建出一个强大且灵活的监控解决方案,有效管理和维护我们的Java应用。
java 实现绘制指针时钟 和多线程服务器java 实现绘制指针时钟 和多线程服务器java 实现绘制指针时钟 和多线程服务器java 实现绘制指针时钟 和多线程服务器java 实现绘制指针时钟 和多线程服务器java 实现绘制指针...
本文将深入探讨如何使用Java实现FTP协议中的服务器和客户端。通过学习这些知识点,开发者可以构建自己的FTP应用,进行文件的上传、下载和管理。 首先,我们要了解FTP协议的基本工作原理。FTP基于TCP/IP模型,通过...
1. 使用Java实现HTTP服务器,涉及网络编程、I/O流处理。 2. 理解并处理HTTP协议的不同状态码,如200、304和404。 3. 实现session和cookie管理,理解服务器端和客户端状态的维护方式。 4. 使用MyEclipse进行Java项目...
支持HTTP1.1(但是不完善),支持多线程(采用的线程池),支持简单CGI(仅PHP的CGI模块通过测试),支持配置文件和简单的日志记录。要支持PHP的动态脚本的话,需要自行下载PHP的文件到php目录下,并且更改设置,...
在"Java Socket PC端传输文件简易服务器客户端"这个项目中,我们主要会涉及以下知识点: 1. **Java Socket类**: - Socket类代表了网络上的一个连接,它包含了IP地址和端口号。通过创建Socket实例,客户端可以连接...
本项目“简单JAVA WEB服务器”旨在提供一个基础的平台,帮助学习者理解Java Web服务器的工作原理,特别是静态网页服务和JSP(Java Server Pages)的执行,以及Cookie的解析。 1. **多线程技术**:Java Web服务器...