`
cwqcwq
  • 浏览: 75688 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

打造自己的web容器(1)

    博客分类:
  • j2ee
阅读更多
---- Socket入门

近日,读到一本好书---《How Tomcat Works》,该书详尽分析了tomcat的实现原理,解释了它的servlet容器的内部运行机制,读来非常有收获,特此撰文将读书过程中的一些心得付诸文字。

HTTP协议基础知识:

HTTP协议属于应用层协议,基于TCP,一个HTTP请求包括三个组成部分:方法—统一资源标识符(URI)—协议/版本、请求的头部、主体内容

HTTP请求示例:
POST /examples/default.jsp HTTP/1.1
Accept: text/plain; text/html
Accept-Language: en-gb
Connection: Keep-Alive
Host: localhost
User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)
Content-Length: 33
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate

lastName=Franks&firstName=Michael 


类似于HTTP请求,一个HTTP响应也包括三个组成部分:方法—统一资源标识符(URI)—协议/版本、响应的头部、主体内容

HTTP响应示例:
HTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
Date: Mon, 5 Jan 2009 13:13:33 GMT
Content-Type: text/html
Last-Modified: Mon, 5 Jan 2009 13:13:12 GMT
Content-Length: 112

<html>
<head>
<title>HTTP Response Example</title>
</head>
<body>
Welcome !!
</body>
</html>


基于Socket的客户端-服务器:

客户端代码:

	public static void main(String[] args) throws InterruptedException {

		try {
			//创建一个流套接字并将其连接到指定 IP 地址的指定端口号
			Socket socket = new Socket("127.0.0.1", 8080);
			
			//模拟发送HTTP请求			
			OutputStream os = socket.getOutputStream();
			StringBuilder request = new StringBuilder();
			request.append("GET /index.jsp HTTP/1.1\n");
			request.append("Host: localhost:8080\n");
			request.append("Connection: Close\n");
			request.append("\n");
			os.write(request.toString().getBytes());
			os.flush();
			//os.close();//关闭 OutputStream 将关闭关联套接字
			
			//读取服务端响应
			BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			boolean loop = true;
			StringBuffer sb = new StringBuffer(8096);
			while (loop) {
				if (in.ready()) {
					int i = 0;
					while (i != -1) {
						i = in.read();
						sb.append((char) i);
					}
					loop = false;
				}
			}
			System.out.println(sb.toString());
			socket.close();
		}
		catch (UnknownHostException e) {
			// log error info
		}
		catch (IOException e) {
			// log error info
		}
	}



服务器端代码:

	public static void main(String[] args) {
		
		boolean shutdown = false;
		ServerSocket serverSocket = null;
		int port = 8080;
		try {
			//ServerSocket构造方法的参数说明:port - 本地 TCP 端口,backlog - 队列的最大长度,bindAddr - 要将服务器绑定到的 InetAddress
			serverSocket = new ServerSocket(port, 2, InetAddress.getByName("127.0.0.1"));
		}
		catch (IOException e) {
			// log error info
			System.exit(1);
		}
		// 等待请求
		while (!shutdown) {
			try {
				//侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞
				Socket socket = serverSocket.accept();
				
				//返回此套接字的输出流,用于向客户端写入返回结果
				OutputStream output = socket.getOutputStream();				
				
				//获取输入流,即客户端发起的HTTP请求
				BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
				StringBuffer sb = new StringBuffer(8096);
				boolean loop = true;
				while (loop) {
					if (in.ready()) {
						int i = 0;
						while (i != -1) {
							i = in.read();
							sb.append((char) i);
						}
						loop = false;
					}
				}
				// display the request to the out console
				System.out.println(sb.toString());
				output.write("Response: HTTP/1.1 200 OK ".getBytes());
			}
			catch (Exception e) {
				// log error info
				continue;
			}
		}
	}







分享到:
评论

相关推荐

    QT-HTML.rar_QT_Qt webkit html_Qt5.4 Web容器_qt html

    5. **实例分析**:可能包含一些实际案例,如淘宝客户端如何利用QtWebKit实现特定的Web功能,展示如何在Qt应用中构建一个功能丰富的Web容器。 6. **最佳实践**:分享在开发过程中需要注意的问题,以及如何遵循最佳...

    改造Kuberntetes打造SAE容器云

    【标题】:“改造Kubernetes打造SAE容器云” 在现代云计算环境中,Kubernetes(K8s)已经成为容器编排的主流平台,它提供了一种高效、可扩展的方式来管理和部署容器化应用。SAE(Serverless Application Engine)是...

    后端开发入门与实战教程:从0到1打造高效Web应用.zip

    这份"后端开发入门与实战教程:从0到1打造高效Web应用"的资源包,将引领初学者步入这一领域的殿堂,通过系统的学习和实践,使你能够构建出高效且稳定的Web应用。 首先,后端开发的基础知识主要包括编程语言、框架和...

    java web workspace 02

    JSP页面会被Web容器转换为Servlet执行,生成动态内容。 3. **MVC框架(如Spring MVC)**:MVC(Model-View-Controller)是一种软件设计模式,广泛应用于Web开发中。Spring MVC是Spring框架的一部分,提供了一种组织...

    Web聊天室系统源码

    【Web聊天室系统源码】是一个基于JavaWeb技术开发的实时通信应用,它允许用户通过网页进行在线聊天。这个系统的核心在于实现用户之间的即时信息传递,通常包括注册、登录、发送消息、接收消息以及可能的群组聊天等...

    基于C++开发的WEB服务器,支持C++、Python、Java等多语言混合开发WEB应用.rar

    cppweb同时也是一个跨平台的微服务开发框架,通过两个核心组件webrouter与webserver提供微服务系统中的接口路由网关、服务注册中心、业务服务容器、定时任务调度中心以及接口...,我们的目标不是实现一个最好cgi容器...

    webcalendar.js控件及其使用说明

    1. **跨平台兼容**:WebCalendar.js是基于JavaScript的,因此它能在多种浏览器上运行,包括Chrome、Firefox、Safari、Edge以及Internet Explorer等,确保了良好的浏览器兼容性。 2. **易用性**:正如描述中提到的,...

    阿里云 专有云企业版 V3.8.1 容器服务 产品简介 20200727

    该服务简化集群的搭建和扩容等运维工作,整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳的Kubernetes容器化应用运行环境。 容器服务的优势包括: 1. 使用便捷:通过 Web 界面一键创建 Kubernetes 集群,...

    Go-Cyclone是一个打造容器工作流的云原生持续集成持续发布平台

    1. **源代码管理集成**:Go-Cyclone能够与常见的版本控制系统如Git进行集成,自动触发构建流程,当开发者提交新的代码时,系统会自动拉取并构建最新的代码。 2. **容器化构建**:Go-Cyclone支持多种容器引擎,如...

    小图片,用于web小图片,用于web

    在互联网世界中,小图片,特别是那些优化过的用于Web的小图片,扮演着至关重要的角色。它们不仅能够快速加载,提高用户体验,还能...在实际工作中,应根据具体需求和目标,灵活运用这些技巧,打造高效、美观的Web页面。

    《Java Web应用开发技术实用教程》-王红-电子教案

    《Java Web应用开发技术实用教程》是一本专为学习Java Web开发的初学者和进阶者编写的教材,由王红老师倾力打造。这本书涵盖了Java Web开发的基础知识到高级技术,旨在帮助读者掌握构建动态网页和Web应用程序的技能...

    深入体验Java Web开发内幕

    6. **Web容器与Tomcat**: 了解如何部署和管理Java Web应用在Web容器(如Apache Tomcat)中的运行,包括WAR文件的打包和发布。 7. **Web安全**: 书中可能会讨论关于身份验证、授权、防止SQL注入和XSS攻击等Web安全...

    Echarts + Web实现大屏展示效果(一)图片资源

    2. **准备DOM元素**:创建用于显示图表的div容器,并设置合适的宽高。 3. **初始化Echarts实例**:使用`echarts.init()`方法创建Echarts实例,关联到指定的DOM元素。 4. **配置图表**:定义图表的类型、数据、样式等...

    PHPWEB分享式智能网站管理系统 v1.2.0.rar

    我们将逐步为不同行业用户量身打造行业模板,让您以最快捷的方式,最低的成本创建功能强大的企业网站。PHPWEB是您高效便捷的网站管理工具。PHPWEB可免费用于非商业用途,无需购买授权,直接安装使用。商业用户可以...

    Web经典图表控件 Highcharts控件

    Highcharts是一款广泛应用于Web开发中的JavaScript图表库,它能够帮助开发者轻松地创建各种类型的数据可视化图表,如柱状图、折线图、饼图...通过深入学习和实践,可以充分利用其特性,打造美观大气的数据图表化界面。

    tomcat6.0 适用与java web 程序的开发服务器

    《深入理解Tomcat 6.0:打造高效Java Web服务器》 Tomcat 6.0是一款广泛应用的开源Java Web服务器,由Apache软件基金会维护,它实现了Java Servlet和JavaServer Pages(JSP)规范,为Java Web应用程序提供了一个轻...

    [HeyJava][天一时代][WEB开发]05_Tomcat搭建项目

    1. "[天一时代][WEB开发]05_Tomcat搭建项目.avi" - 这可能是一个视频教程,详细演示了如何设置和运行Tomcat服务器,以及如何在上面部署Web应用程序。 2. "天一时代:打造Java特种兵.chm" - CHM文件是一种Windows的...

    阿里云 专有云企业版 V3.12.0 容器服务Kubernetes版 产品简介 20200727

    容器服务简化集群的搭建和扩容等运维工作,整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳的Kubernetes 容器化应用运行环境。 什么是容器服务 容器服务是高性能可伸缩的容器管理服务,支持企业级...

    java高手真经_系统架构卷:java.web系统设计与架构

    《Java高手真经_系统架构卷:Java.Web系统设计与架构》是一本专注于Java Web开发领域的专业书籍,由刘中兵及其Java研究室倾力打造。这本书深入探讨了Java技术在构建复杂Web系统中的应用,涵盖了从基础概念到高级设计...

    Java_Web整合开发王者归来_10

    标签“java web 王者归来”暗示了该教程可能涵盖了一些高级主题,旨在将读者打造成Java Web开发的高手。 在Java Web开发中,整合开发通常涉及到多个技术和框架的协同工作,以构建高效、可维护的Web应用程序。以下是...

Global site tag (gtag.js) - Google Analytics