`

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架构...

    模拟Tomcat服务器

    【模拟Tomcat服务器】 在IT行业中,Tomcat是一款广泛应用的开源Web服务器和Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)技术。通过模拟Tomcat服务器,我们可以更好地理解和学习这些技术,以及它们...

    java模拟tomcat的web服务器源码

    Java模拟Tomcat Web服务器源码解析 在Java世界中,Tomcat是一款广泛应用的开源Web服务器和Servlet容器。它遵循Java Servlet和JavaServer Pages(JSP)规范,为开发者提供了轻量级、高效的运行环境。本篇文章将深入...

    redis-session-manager-tomcat6共享包

    4. 重启Tomcat:完成上述配置后,重启Tomcat服务器使更改生效。 5. 测试验证:通过编写测试用例,模拟用户在不同服务器之间切换,确保session数据在Redis中被正确存储和检索,同时确认之前报空指针的问题已被修复。...

    jdbc-mysql-本地tomcat使用-app后台接口

    标题 "jdbc-mysql-本地tomcat使用-app后台接口" 涉及到的是在本地开发环境中,使用Java JDBC(Java Database Connectivity)与MySQL数据库进行交互,并通过Tomcat服务器部署一个APP后台接口。这个过程通常包括以下几...

    JAVA-web模拟售票系统程序

    4. Tomcat:轻量级的Java Web服务器,运行Servlet和JSP应用。 5. Maven或Gradle:构建工具,管理项目依赖和构建过程。 五、开发流程 1. 需求分析:明确系统功能,制定需求规格书。 2. 设计阶段:绘制UML类图、用例...

    web服务器如何限流-nginx,tomcat服务器如何限制流量

    接下来,我们转向Tomcat服务器。Tomcat作为Java应用服务器,它的限流通常通过修改`server.xml`中的`<Connector>`元素来实现。例如,我们可以设置`maxThreads`来限制处理线程的数量,从而限制并发连接数: ```xml ...

    CNVD-2020-10487-Tomcat-Ajp-lfi-master.zip

    【标题】"CNVD-2020-10487-Tomcat-Ajp-lfi-master.zip"指的是一个与Tomcat服务器相关的安全漏洞利用工具包,主要针对的是CVE-2020-1938漏洞。这个压缩包可能包含了一些测试脚本或配置,用于演示或复现该漏洞的影响。...

    Linux-memcached-tomcat8-session共享lib.rar

    Tomcat8是Apache Tomcat服务器的一个版本,它是一个开源的Java Servlet容器。为了使Tomcat能够与Memcached通信,我们需要添加相应的session管理库。压缩包中的“lib”文件夹很可能包含了实现这一功能的JAR文件,比如...

    模拟tomcat、servlet服务器

    在IT行业中,构建一个模拟Tomcat或Servlet服务器是一项高级任务,它要求对网络编程、HTTP协议、Java Servlet规范以及服务器容器有深入理解。这个项目主要涉及以下知识点: 1. **Socket编程**:Socket是网络通信的...

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

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

    nginx-1.5.4+apache-tomcat-7.0.42进行集群部署

    2. **配置Nginx**: 修改Nginx的配置文件(如`nginx.conf`),定义一个反向代理服务器段,指定后端Tomcat服务器的IP和端口。例如: ``` upstream backend { server 192.168.1.101:8080; server 192.168.1.102:...

    Tomcat WEB服务器实战

    - **JVM (Java Virtual Machine)**: 在实际计算机上模拟计算机功能的虚拟机,负责执行字节码。 - **安装JDK**: - **bin文件安装**: `sh ./jdk-6u18-linux-x64-rpm.bin` 安装路径默认为 `/usr/java/jdk1.6.0_18`。 ...

    apache-tomcat-8.0.46.zip

    Apache Tomcat是一款广泛应用的开源Java Servlet容器,它实现了Java EE的Web应用服务器规范,特别是Servlet和JSP。在这个特定的版本"apache-tomcat-8.0.46.zip"中,我们关注的是Linux平台上的Tomcat 8,这是一个包含...

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

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

    java-tomcat-v1

    开发者使用Java编写Servlet和JSP,然后将这些程序部署到Tomcat服务器上,Tomcat负责解析请求,执行Java代码,并将结果返回给客户端。 学习Java和Tomcat,你需要掌握以下关键知识点: 1. **Java基础**:理解类、...

    模拟tomcat的工作原理

    在模拟Tomcat的过程中,了解并实现这些步骤可以帮助我们更好地理解Web服务器的工作流程,特别是Java的多线程模型在其中的应用。同时,标签"java tomcat"提示我们需要关注的是与Java和Tomcat相关的技术,例如Servlet...

    caelum-java-web-fj21.zip_java web_web

    在开发过程中,开发人员还会用到如Apache Tomcat或Jetty这样的Servlet容器,它们可以运行和管理Java Web应用程序。还有集成开发环境(IDE),如Eclipse、IntelliJ IDEA,它们提供了丰富的工具来简化开发流程。 测试...

    apache-tomcat-8.5.34.rar

    启动Tomcat服务器时,通常会使用`startup.bat`脚本,这个脚本位于`bin`目录下。运行此脚本会启动Tomcat的服务,使得部署在其中的应用可以被访问。在配置好`deployerConfigContext.xml`并启动Tomcat后,你的本地环境...

Global site tag (gtag.js) - Google Analytics