`

java-模拟tomcat服务器

    博客分类:
  • java
阅读更多
模拟tomcat服务器端代码示例:
package cd.itcast.day5;

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;

public class HttpServerDemo {
	public static void main(String[] args) {
		(new HttpServer()).run();
	}

	public static class HttpServer {
		public void run() {

			String filePath = "D:\\Java\\apache-tomcat-6.0.35\\webapps\\ROOT";

			ServerSocket serverSocket = null;
			try {
				serverSocket = new ServerSocket(8888);

				// 开启线程,接收客户端请求.
				while (true) {
					Socket socket = serverSocket.accept();

					Thread thread = new Thread(new MyHttpServerThread(socket,
							filePath));
					thread.start();
				}
			} catch (IOException e2) {
				e2.printStackTrace();
			}
		}
	}

	public static class MyHttpServerThread implements Runnable {
		String filePath = null;
		private Socket socket = null;
		private File file = null;

		public MyHttpServerThread(Socket socket, String filePath) {
			this.filePath = filePath;
			this.socket = socket;
		}

		@Override
		public void run() {
			// 读取客户端数据
			BufferedReader request = null;
			// 处理客户端数据并返回.
			BufferedOutputStream response = null;

			try {
				// System.out.println(socket.getInetAddress().getHostAddress()
				// + " 连接到服务器.");
				InputStream inputStream = socket.getInputStream();
				OutputStream outputStream = socket.getOutputStream();

				request = new BufferedReader(new InputStreamReader(inputStream));

				response = new BufferedOutputStream(outputStream);

				// 读取Http头信息行:GET /index.html HTTP/1.1
				String httpHead = request.readLine();
				if (httpHead != null) {
					String[] arr = httpHead.split(" ");
					if (arr.length == 3
							&& ("GET".equals(arr[0]) || "POST".equals(arr[0]))
							&& "HTTP/1.1".equals(arr[2])) {

						// 获取要访问的文件.
						if ("/".equals(arr[2])) {
							file = new File(filePath, "/index.html");
						} else {
							file = new File(filePath, arr[1]);
						}

						if (file.exists() && file.isFile()) {
							responseRequest(response);
						} else {
							System.out.println("请求的页面:" + arr[1] + " 不存在!");
						}
					} else {
						System.out.println("客户端请求非法:" + arr[0]);
					}
				} else {
					System.out.println("未发现客户端请求或请求有误!");
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				if (request != null) {
					try {
						request.close();
					} catch (IOException e1) {
						e1.printStackTrace();
					}
				}
				if (response != null) {
					try {
						response.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
				if (socket != null) {
					try {
						socket.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		}

		private void responseRequest(BufferedOutputStream response)
				throws IOException, FileNotFoundException {
			// 返回给客户端服务器的Http头信息
			response.write("HTTP/1.1 200 ok\r\n".getBytes());
			response.write("Server: HttpTest Server/1.1\r\n".getBytes());
			response.write("Content-Type: text/html\r\n".getBytes());
			response.write(("Content-Length: 5866" + file.length() + "\r\n")
					.getBytes());
			response.write(("Date: " + new Date() + "\r\n").getBytes());
			// 与实体部分以空行隔开.
			response.write("\r\n".getBytes());

			FileInputStream fis = new FileInputStream(file);
			byte[] buff = new byte[1024];
			int len = 0;
			while ((len = fis.read(buff)) != -1) {
				response.write(buff, 0, len);
				response.flush();
			}
			fis.close();
		}
	}

}


客户端http请求模拟示例:
package cd.itcast.day5;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class HttpClientDemo {
	public static void main(String[] args) {
		BufferedWriter out = null;
		BufferedReader in = null;
		try {
			Socket socket = new Socket("127.0.0.1", 8888);
			out = new BufferedWriter(new OutputStreamWriter(
					socket.getOutputStream()));
			in = new BufferedReader(new InputStreamReader(
					socket.getInputStream()));

			//发送Http头信息到服务器.请求页面为httptest.html.
			out.write("GET /httptest.html HTTP/1.1\r\n");
			out.write("Host: localhost\r\n");
			out.newLine();
			
			out.flush();
			
			//获取服务器返回内容.
			String line = null;
			while ((line = in.readLine()) != null) {
				System.out.println(line);
			}

		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (in != null) {
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

			if (out != null) {
				try {
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

分享到:
评论

相关推荐

    java学习CS架构网络编程;简易模拟tomcat服务器项目源码.zip

    简易模拟tomcat服务器项目源码java学习CS架构网络编程;简易模拟tomcat服务器项目源码java学习CS架构网络编程;简易模拟tomcat服务器项目源码java学习CS架构网络编程;简易模拟tomcat服务器项目源码java学习CS架构...

    java模拟tomcat的web服务器源码

    java模拟tomcat的web服务器源码

    java脱离J2EE写的web服务器模拟Tomcat、struts 和 hibernate

    该服务器是本人模拟Tomcat做的,同时实现了主流的两大框架:struts 和 hibernate的一些功能,做这个东西本是自娱自乐,所以有很多地方尚未完善,构造方法一大堆的参数也让人头疼。希望有兴趣的朋友可以提一些建议,...

    基于JAVA的WEB服务器与图形化浏览器

    java实现模拟tomcat服务器,利用socket接手请求,resquest和respose处理请求发送响应,编写了Servlet接口,用户需要在web.xml配置全类名和URL,编写servlet实现类就可以使用,客户端浏览器,使用java的Swing组件,...

    基于onenet云平台,MySQL数据库,tomcat服务器,模拟实现对多条河流水质进行监测

    (2)本机部署好Tomcat服务器 (3)本地部署好MySQL数据库 (4)可以用WiFi模块给onenet传数据 1. 先运行waterMain,该程序自动获取onenet云平台4条河流的最新数据信息,只把最新的数据信息存入数据库中 2. 再运行...

    Java案例开发锦集

    案例5 利用DES加密解密 第七章 Java与数据库 案例1 在Applet中应用JDBC访问数据库 案例2 通过JDBC-ODBC桥连接数据库 案例3 通过tomcat数据源访问数据库 案例4 JDBC连接池的实现 案例5 用...

    TomcatStart.rar

    DEMO说明:模拟一次servelt请求,...java代码模拟tomcat服务器启动期间完成的功能,以及当一次完整servlet请求过来,tomcat到底帮我们做了哪些事。 内附TOMCAT服务器模拟完整可运行JAVA代码,以及demo详尽说明文本文档。

    java-j2ee项目实例

    此项目为J2EE BS/CS项目 需要 :tomcat6.0f服务器 数据库 struts1/struts2动态库架包 myeclipse7.0集成开发工 链接串口连接数据库驱动 串口发短架包 GPRS模块等 运用了MVC三层架构开发模式 struts1/strts2结合...

    stock-hub-java-on-azure:使用无服务器和事件驱动的Java的示例Inventory Hub应用程序-在具有Spring Boot,Tomcat,Functions,Event Hub和Cosmos DB的Azure上

    该示例应用程序的目的是说明在Azure上使用无服务器,事件驱动的Java构建响应系统。 该项目的结果将是创建一个实时库存中心。 要求 为了创建和部署此示例应用程序,您需要具备以下条件: Azure订阅; 如果您还没有...

    2024年Tomcat安装和配置(超详细)

    本教程适合所有准备在Java Web开发领域发展的开发者,尤其是那些需要深入了解Tomcat服务器配置和管理的候选人。 **使用场景及目标:** 这些教程适用于面试准备阶段,帮助候选人复习和巩固Tomcat知识,提高解决实际...

    JAVA上百实例源码以及开源项目

    java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥  Java生成密钥、保存密钥的实例源码...

    java毕业设计-基于SSM+Vue的学生竞赛模拟系统源码+数据库+文档.zip

    java毕业设计基于SSM+Vue的学生竞赛模拟系统源码+数据库+文档.zip 高分通过项目,已获导师指导。...服务器:tomcat7+ 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件: idea/eclipse Maven包:Maven3.3

    JAVA上百实例源码以及开源项目源代码

    java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥  Java生成密钥、保存密钥的实例源码...

    阿里云java短信验证码源码-java-backend-development:我的Java框架、JavaWeb和数据库的Java代码

    模拟服务器可以选择搭建在跟开发同一个电脑使用 localhost 连接,或者使用虚拟机 (Linux CentOS6) 搭建服务器,或者使用另外一台双系统 (Linux Ubuntu18 + Windows10) 的电脑来搭建服务器,连接的都是同一个 WIFI。 ...

    javaWeb购物车模拟小程序

    通过tomcat发布一个小的javaWeb购物车模拟,可以在MyEclips工具中运行,更好的理解客户端浏览器与服务器cookie 与session 的区别。

    航天客运订票系统

    数据库课程设计-->航天客运订票系统。服务器端使用Tomcat+Servlet,客户端使用Java来实现,数据库使用MySQL。

    Java开发技术大全(500个源代码).

    HelloWorldApp.java 第一个用Java开发的应用程序。 firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载Applet的网页文件 第2章 示例描述:本章介绍开发Java的基础语法知识。 ...

    Android+Tomcat+MySql一万行代码模仿QQ聊天软件

    android客户端+Tomcat服务器+MySql数据库实现模仿QQ聊天软件,内附使用说明,适合期末给老师交的一万行代码作业

    北大青鸟java学士后毕业考试 笔试和机试题

    在Eclipse开发环境,Tomcat应用服务器上,使用JAVA技术并采用MVC模式实现用户登录。 1. 采用JSP+JAVABEAN +SERVLET或者Struts+spring +Hibernate 2. 数据内容内存中提供。 3. 如果登录失败应有相应提示。否则进入...

    Java项目开发与毕业设计指导

    安装JDK、配置环境变量,打开Eclipse导入ch04项目,运行server.FishServer类启动服务器端,运行java client.SwimFish类启动客户端。注意,同时在多台机上运行客户端才能显示出网络游鱼的效果,在同一台机上打开多个...

Global site tag (gtag.js) - Google Analytics