httpserver原理:服务器端 打开一个socket,一直处在监听tomcat指定的 ip 的指定端口,
一旦有访问的,就开启一个线程去处理,请参看案例。
httpserver原理:服务器端 打开一个socket,一直处在监听tomcat指定的 ip 的指定端口,一旦有访问的,就开启一个线程去处理,代码如下:
-------------------------------server:
package com.kaobian;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import com.session.HttpSession;
public class HttpServer {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(8888);
while (true) {
Socket socket = server.accept();
HttpSession session = new HttpSession(socket);
new Thread(session).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
---------------------------------处理线程
package com.session;
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.Socket;
import com.config.Config;
public class HttpSession implements Runnable {
private String path = Config.getConfig().getPath();
private Socket socket ;
public HttpSession(Socket socket){
super();
this.socket = socket;
}
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
OutputStream out = this.socket.getOutputStream();
String command = null;
while((command = br.readLine()) != null){
System.out.println("浏览器的指令:"+command);
if(command.length() <3){
break;
}
String result = command.substring(0,3);
if(result.equalsIgnoreCase("GET")){
int begin = command.indexOf("/")+1;
int end = command.lastIndexOf(" ");
String fileName = command.substring(begin,end);
doGet(fileName,out);
}
}
out.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private void doGet(String fileName, OutputStream out) {
File file = new File(path+fileName);
if(!file.isDirectory()){
if(!file.exists()){
file = new File(path + Config.getConfig().getDefaultPage());
}
}else {
file = new File(path + Config.getConfig().getDefaultPage());
}
InputStream is = null;
try {
is = new FileInputStream(file);
byte[] data =new byte[1024];
int len = 0;
while((len = is.read(data)) != -1){
out.write(data,0,len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(is != null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}finally{
is = null;
}
}
}
}
}
---------------------------读取配置文件
package com.config;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Config {
private String path ;
private String defaultPage;
private static Config config ;
public static Config getConfig(){
if(config == null){
config = new Config();
config.init();
}
return config;
}
private void init(){
Properties properties = new Properties();
try {
InputStream reader = new FileInputStream(new File("config.properties"));
properties.load(reader);
this.path = properties.getProperty("path");
this.defaultPage = properties.getProperty("defaultIndex");
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private Config(){
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getDefaultPage() {
return defaultPage;
}
public void setDefaultPage(String defaultPage) {
this.defaultPage = defaultPage;
}
}
------------------配置文件要放到工程的根目录下,要不然自行修改属性文件的位置
path=c://
defaultIndex=div.html
文章出处:http://kaobian.iteye.com/blog/1126616
分享到:
相关推荐
**模拟Tomcat工作原理** Tomcat是一款开源的Java Servlet容器,它是Apache软件基金会下的Jakarta项目的一部分,主要用于运行Java Web应用程序。在这个模拟过程中,我们将深入理解Tomcat如何处理HTTP请求,以及它在...
【TOMCAT工作原理详解】 ...通过模拟TOMCAT工作过程,可以更深入地理解这些概念,为实际开发打下坚实基础。在`mvcdemo`这样的实践中,你可以亲自体验和学习如何在TOMCAT上部署和运行一个简单的MVC应用。
《模拟Tomcat运行机制》是一本深入解析Tomcat内核的书籍,主要针对Tomcat4.1.12和5.0.18版本。Tomcat作为一款流行的、开源的Servlet容器,其复杂性在于由多个组件组成。本书旨在帮助读者理解Tomcat的工作原理,无论...
首先,我们需要了解Tomcat的工作原理。Tomcat是基于Apache软件基金会的Jakarta项目,它接收HTTP请求,并将这些请求分发给Java应用程序,通常是Servlets。Servlets是Java编写的服务器端程序,可以处理动态内容。JSP则...
在IT行业中,构建一个模拟Tomcat或Servlet服务器是一项高级...通过以上知识点的学习和实践,你将能够构建一个基本的模拟Tomcat和Servlet服务器,这将帮助你深入理解Web服务器的工作原理,提升你的Java网络编程技能。
本篇文章将深入探讨如何用Java语言来模拟Tomcat的核心功能,以理解其工作原理。 首先,我们需要了解Java服务器的工作基础。在Java中,HTTP请求的处理是通过实现Servlet接口的类完成的。Servlet是Java中用于处理HTTP...
标题中的“j2se模拟tomcat”意味着我们将探讨如何使用Java标准版(J2SE)的编程技术来创建一个简单的Web服务器,模仿Tomcat的工作原理。Tomcat是一款流行的开源应用服务器,主要用于运行Java Servlet和JavaServer ...
本篇文章将深入解析“简单的tomcat实现1”,帮助读者理解Tomcat的核心概念、工作原理以及如何手写Tomcat的基本组件。 首先,我们要了解Tomcat的两大核心组成部分:连接器(Connector)和容器(Container)。连接器...
模拟Tomcat应用服务器的工作原理,有利于理解服务器的工作的模式。简单模拟,不考虑并发性等等因素。
### Tomcat Server原理初探——理解Tomcat的关键概念与架构 #### Tomcat Server概览 Tomcat是一款开源的Servlet容器,由Apache软件基金会旗下的Jakarta项目开发,它不仅支持Servlet和JSP技术,还得到了Sun ...
关于标签中的“源码”和“工具”,这里可能是指在处理Tomcat进程时,有时需要查看Tomcat的源代码,了解其内部工作原理,或者使用一些辅助工具来帮助管理和监控Tomcat。例如,`jps`(Java Virtual Machine Process ...
【标题】"Tomcat源码分析" ...通过对Tomcat源码的分析,开发者可以更好地理解其工作原理,从而优化性能、解决运行问题,或者开发出符合特定需求的扩展功能。同时,这也是提升Java Web开发技能的重要途径。
在这个文件中,会定义工作线程(workers)和它们与Tomcat实例的关系,以便正确地分发请求。 **uriworkermap.properties**:这个文件定义了URI到worker的映射,决定了哪些URL请求会被发送到哪个Tomcat实例处理。 **...
通过深入研究Tomcat7.0的源码,我们可以更好地理解HTTP服务器、Servlet容器的工作原理,提升Web应用的开发和优化能力。本文将探讨如何将Tomcat7.0源码导入Eclipse,并进行本地运行,以实现高效的学习和调试。 首先...
如果你需要深入理解Tomcat连接器的工作原理,或者想要对其进行定制,你可以编译这个源代码。这通常涉及到下载源码,配置构建环境(如Apache Maven或Ant),然后执行构建命令来生成可部署的二进制文件。 了解Tomcat ...
Http请求模拟报文返回工具的核心原理是基于HTTP协议的工作机制,它可以创建并配置自定义的HTTP响应报文。当用户通过HTTP客户端(如浏览器或HTTP库)发起请求时,该工具会捕获这些请求,并按照预设的规则返回预先配置...
### Tomcat 远程命令攻击漏洞 CVE-2017-12615 的深入解析及...通过本实验的学习,我们不仅了解了CVE-2017-12615漏洞的基本原理,还掌握了如何模拟和防御这种类型的攻击。这对于提高个人和组织的安全意识具有重要意义。
Tomcat作为开源的Servlet容器,其源码提供了深入理解其工作原理的机会。主要组件包括Catalina(核心引擎)、 Coyote(处理HTTP协议)、Apr(与操作系统交互的本地库)等。源码分析可以帮助我们理解请求处理流程、...
GZIP压缩的工作原理是在客户端请求网页后,由服务器端将网页文件压缩后再发送给客户端,客户端接收到压缩后的文件后,由浏览器进行解压并显示页面内容。这种方式不仅可以减少传输的数据量,而且还能对动态生成的内容...