- 浏览: 209115 次
- 性别:
- 来自: 哈尔滨
文章分类
- 全部博客 (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 987什么是泛型? 我的理解是对不同的数据结构采用相同的算法 -
xfire1.2.6 srping2.5 集成WebService
2012-04-28 10:36 3328和大家分享一下我做的demo案例,xfire和spring2. ... -
CXF2.4 Spring3 编写WebService Server & Client
2012-04-27 22:58 3406最近由于公司的项目需求,需要编写WebService,以前用a ... -
聊聊Java 方法中的参数
2012-04-16 10:48 1165昨天拜读了一下《Thinking In Java》翻译版,其中 ... -
Antlr V3 编写的四则运算
2012-04-11 15:50 1780这两天在研究antlr这个框架,至于这个鸟东西如何解释,大家可 ... -
计算两个日期点间的周末天数
2012-04-06 13:08 5264闲来无事,想起这么一个问题,所以就试着搞了搞这个算法,希望大家 ... -
Extjs combobox 自动提示
2012-01-05 17:25 4064简单介绍一些原理,代码大家下载附件就可以了。 extjs 的 ... -
RMI demo
2011-12-17 15:40 2797由于公司的项目中用到了java.rmi 分布式中的东西,所以就 ... -
java的|、||、&、&&知多少
2011-11-21 00:04 4579java用的久的朋友都会回归基础,我想问个问题,大家对 |、 ... -
Spring整合Axis2
2011-11-15 11:00 4502在单独使用axis2做webservice的话,操作步骤其实挺 ... -
hibernate 一对一双向关联的 级联操作
2011-10-29 23:33 1204今天在做 hibernate 一对一 双向 操作的时候,我的 ... -
自己写的定时器功能
2011-10-18 21:46 987实际执行任务的类: package MyTask; i ... -
安装LCDS
2011-07-20 15:56 1492ldcs下载地址:http://www.adobe.com/p ... -
Flex3 的三种通信
2011-07-20 15:46 1808最近看了一些关于flex3的一些学习资料,算是初级的接触了fl ... -
xfire webservice
2011-07-14 09:27 3526跟大家分享一下我对xfire的初步了解,我想可以帮助刚刚接触 ... -
axis2
2011-07-09 13:56 2351昨天研究了一下Axis2 开发webservices的流 ... -
Struts2 标签获得 session 范围的属性
2011-04-23 16:35 1761经常用 EL 来取得属性范围内的值时,可以不用加上这个属性属于 ... -
struts2获取上传文件大小
2011-03-24 19:35 2697struts2中上传的文件为File 类型,可以同过 Fil ...
相关推荐
模拟了tomcat的工作原理,用到了多线程,http协议 等等
模拟TOMCAT的原理的全过程,新手理解TOCMAT以及SERVLET有很大的帮助
这个例子是用j2se的Socket和线程的技术来简单的模拟tomcat的执行过程,虽然没有tomact复杂但是原理都是一样的,理解了它再去理解tomcat的执行过程就会比较轻松了
模拟Tomcat应用服务器的工作原理,有利于理解服务器的工作的模式。简单模拟,不考虑并发性等等因素。
本资源是tomcat的源码(包含阅读的注释),和相关原理及生命周期的文档,启动流程等,以及模拟并发对tomcat不同的支持(bio、nio)的压测,还有相关tomcat的启动和部署脚本命令(模拟从svn下载)。
whatsmars-tomcat 模拟tomcat实现 whatsmars-dbrouter 分库分表实现 whatsmars-worker 多实例任务调度 whatsmars-dubbo Dubbo demo whatsmars-mq rocketmq,activemq rocketmq-console rocketmq管理后台 whatsmars-...
whatsmars-tomcat 模拟tomcat实现 whatsmars-dbrouter 分库分表实现 whatsmars-worker 多实例任务调度 whatsmars-dubbo Dubbo demo whatsmars-mq rocketmq,activemq rocketmq-console rocketmq管理后台 whatsmars-...
通过本内容的学习: 1,能够理解 XML 语言的概述 a, 说出 XML 语言的概念 b, 说出 XML 语言的作用 c, 说出 XML 语言的应用...6,能够运用 XML 语言来模拟 Tomcat 服务器 a, 运用 XML 语言写出配置文件文档 b, 运
包括jBPM4扩展研发先决条件、深入jPDL和jBPM Service API、升级jBPM3到jBPM4、流程虚拟机原理、jBPM4的设计思想、随需而配jBPM4、异步工作执行器、深入jBPM4电子邮件支持、系统日志、jBPM4与Spring框架集成、jBPM4与...
通过手写模拟SpringBoot源码了解其中的逻辑原理,自动配置,整合Tomcat,启动过程等。
本文首先介绍了传统连接、tomcat下连接池和hibernate下连接池的基本原理,然后在此基础上提出了一种改进的新型连接池方法,最后基于Java语言对四种连接方法进行了仿真模拟。通过实验测试及连接时间的对比分析,看到...
1.3) Nginx+Tomcat模拟动静分离效果 ????1.4) 集群环境动静分离效果模拟 2.nginx+python? ????2.1) wsgi、uwsgi协议 ????2.2) uwsgi为什么需要Nginx ????2.3) uwsgi配置场景 ( Django ) ????2.4)部署一个完整的...
ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试Apache的负载压力,也可以测试Nginx、Lighthttp、Tomcat、IIS等其它Web服务器的压力。 ...
我正在对Metaverse的工作原理进行有效的解释。 连接在。 有一个非常粗糙的消息传递示例,它是形式的。不久将有世界范围内的端点。 目前只有最低层,没有微服务或存储,只有路由。 有关演示,示例和说明,请参见 。 ...
百度地图开发java源码 UpdateDemo 应用内更新demo 对于Android app来说,应用内更新几乎成了一个标配...我们这里模拟一个新版apk相关信息的json文件内容。 {"data":{"content":"更新内容如下:\n 1.xxxxxx;\n 2.xxxxxx
10.5.1 Tomcat 224 10.5.2 JBoss 226 10.5.3 WebLogic 229 10.6 小结 233 第3篇 实战篇 第11章 实战入侵与防范 236 11.1 开源程序安全剖析 236 11.1.1 0day攻击 236 11.1.2 网站后台安全 238 11.1.3 MD5还安全吗 243...
它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。 ab命令对发出负载的计算机要求很低,它既不会占用很高CPU,也不会占用很多...
对学生知识的要求 对Windows、Linu*及SQL语句有一定的了解即可 学生的知识能力提高 本课程重点培训学生的Web渗透测试能力,通过20天的渗透测试培训,学生可具备以下能力 1)、了解Web服务器的工作过程及原理 ...
它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。 ab命令对发出负载的计算机要求很低,既不会占用很高CPU,也不会占用很多...