- 浏览: 212192 次
- 性别:
- 来自: 哈尔滨
文章分类
- 全部博客 (63)
- Java 框架技术 (11)
- flex3 (3)
- oracle (5)
- 工作总结 (2)
- javascript (15)
- struts2 (3)
- jQuery (8)
- Velocity (2)
- ibatis (3)
- Extjs (3)
- 算法 (1)
- java (11)
- tomcat (1)
- 中间件 (1)
- 应用服务器 (1)
- java,多线程 (1)
- 工作思考 (2)
- zTree (1)
- hibernate (1)
- spring (2)
- axis2 (2)
- autocomplete (1)
- antlr (1)
- CXF (1)
- WebService (2)
- xfire (1)
- fieldset (1)
- bug (1)
- js (1)
- svn (1)
- 数据库 (1)
最新评论
-
bq_test1:
我是这么理解的,你的synchorized方法还没执行完,i已 ...
多线程读取文件 -
bq_test1:
ReadFileAll 这个类的run方法多线程执行会阻塞,没 ...
多线程读取文件 -
bq_test1:
你好,我想请教个问题。单线程读取大文件和多线程读取大文件是否会 ...
多线程读取文件 -
wangcl011:
采用ExtJS4.2的Ext.form.ComboBox实现自 ...
Extjs combobox 自动提示 -
kizz:
keyis 谢谢兄弟,很好使~
SWFUpload+struts2 进度条
本文也是参考了网上的资料,加上我自己的整理得出的。
httpserver原理:服务器端 打开一个socket,一直处在监听tomcat指定的 ip 的指定端口,一旦有访问的,就开启一个线程去处理,代码如下:
-------------------------------server:
---------------------------------处理线程
---------------------------读取配置文件
------------------配置文件要放到工程的根目录下,要不然自行修改属性文件的位置
path=c://
defaultIndex=div.html
这方法不是在不停的创建HttpSession 吗
不是,这个方法只有在客户端有请求的时候 才会去创建一个线程去执行,server.accept();
是一个阻塞式的执行,他一直 出去监听状态,只有有访问的时候才会实例化一个socket
这方法不是在不停的创建HttpSession 吗
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
- HTTPServer.zip (7.9 KB)
- 下载次数: 54
评论
2 楼
kaobian
2011-07-18
cheney_love 写道
while (true) { Socket socket = server.accept(); HttpSession session = new HttpSession(socket); new Thread(session).start(); }
这方法不是在不停的创建HttpSession 吗
不是,这个方法只有在客户端有请求的时候 才会去创建一个线程去执行,server.accept();
是一个阻塞式的执行,他一直 出去监听状态,只有有访问的时候才会实例化一个socket
1 楼
cheney_love
2011-07-18
while (true) { Socket socket = server.accept(); HttpSession session = new HttpSession(socket); new Thread(session).start(); }
这方法不是在不停的创建HttpSession 吗
发表评论
-
我眼中的泛型
2012-12-10 21:26 1021什么是泛型? 我的理解是对不同的数据结构采用相同的算法 -
xfire1.2.6 srping2.5 集成WebService
2012-04-28 10:36 3421和大家分享一下我做的demo案例,xfire和spring2. ... -
CXF2.4 Spring3 编写WebService Server & Client
2012-04-27 22:58 3458最近由于公司的项目需求,需要编写WebService,以前用a ... -
聊聊Java 方法中的参数
2012-04-16 10:48 1217昨天拜读了一下《Thinking In Java》翻译版,其中 ... -
Antlr V3 编写的四则运算
2012-04-11 15:50 1831这两天在研究antlr这个框架,至于这个鸟东西如何解释,大家可 ... -
计算两个日期点间的周末天数
2012-04-06 13:08 5330闲来无事,想起这么一个问题,所以就试着搞了搞这个算法,希望大家 ... -
Extjs combobox 自动提示
2012-01-05 17:25 4148简单介绍一些原理,代码大家下载附件就可以了。 extjs 的 ... -
RMI demo
2011-12-17 15:40 2848由于公司的项目中用到了java.rmi 分布式中的东西,所以就 ... -
java的|、||、&、&&知多少
2011-11-21 00:04 4628java用的久的朋友都会回归基础,我想问个问题,大家对 |、 ... -
Spring整合Axis2
2011-11-15 11:00 4574在单独使用axis2做webservice的话,操作步骤其实挺 ... -
hibernate 一对一双向关联的 级联操作
2011-10-29 23:33 1238今天在做 hibernate 一对一 双向 操作的时候,我的 ... -
自己写的定时器功能
2011-10-18 21:46 1027实际执行任务的类: package MyTask; i ... -
安装LCDS
2011-07-20 15:56 1549ldcs下载地址:http://www.adobe.com/p ... -
Flex3 的三种通信
2011-07-20 15:46 1846最近看了一些关于flex3的一些学习资料,算是初级的接触了fl ... -
xfire webservice
2011-07-14 09:27 3569跟大家分享一下我对xfire的初步了解,我想可以帮助刚刚接触 ... -
axis2
2011-07-09 13:56 2407昨天研究了一下Axis2 开发webservices的流 ... -
Struts2 标签获得 session 范围的属性
2011-04-23 16:35 1803经常用 EL 来取得属性范围内的值时,可以不用加上这个属性属于 ... -
struts2获取上传文件大小
2011-03-24 19:35 2754struts2中上传的文件为File 类型,可以同过 Fil ...
相关推荐
**模拟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压缩的工作原理是在客户端请求网页后,由服务器端将网页文件压缩后再发送给客户端,客户端接收到压缩后的文件后,由浏览器进行解压并显示页面内容。这种方式不仅可以减少传输的数据量,而且还能对动态生成的内容...