笔记
使用JAVA 6 构建自己的HTTP服务器
wangxian00 2 2014-03-08 21:02
绑定的课程:
[color=#0000ff]import[/color] [color=#000000] java.io.IOException; [/color][color=#0000ff]import[/color] [color=#000000] java.io.InputStream; [/color][color=#0000ff]import[/color] [color=#000000] java.io.OutputStream; [/color][color=#0000ff]import[/color] [color=#000000] java.io.OutputStreamWriter; [/color][color=#0000ff]import[/color] [color=#000000] java.io.PrintWriter; [/color][color=#0000ff]import[/color] [color=#000000] java.net.InetSocketAddress; [/color][color=#0000ff]import[/color] [color=#000000] java.util.List; [/color][color=#0000ff]import[/color] [color=#000000] java.util.Map; [/color][color=#0000ff]import[/color] [color=#000000] com.sun.net.httpserver.Headers; [/color][color=#0000ff]import[/color] [color=#000000] com.sun.net.httpserver.HttpContext; [/color][color=#0000ff]import[/color] [color=#000000] com.sun.net.httpserver.HttpExchange; [/color][color=#0000ff]import[/color] [color=#000000] com.sun.net.httpserver.HttpHandler; [/color][color=#0000ff]import[/color] [color=#000000] com.sun.net.httpserver.HttpServer; [/color][color=#0000ff]public[/color] [color=#0000ff]class[/color] [color=#000000] HttpServerAPITest2 { [/color] [color=#0000ff]public[/color] [color=#0000ff]static[/color] [color=#0000ff]void[/color] [color=#000000] main(String[] args) { [/color] [color=#0000ff]try[/color] [color=#000000] { HttpServer hs [/color] [color=#000000]=[/color] [color=#000000] HttpServer.create([/color] [color=#0000ff]new[/color] [color=#000000] InetSocketAddress([/color] [color=#000000]8888[/color] [color=#000000]), [/color] [color=#000000]0[/color] [color=#000000]); hs.createContext([/color] [color=#000000]"[/color] [color=#000000]/[/color] [color=#000000]"[/color] [color=#000000], [/color] [color=#0000ff]new[/color] [color=#000000] MyHandler()); hs.start(); System.out.println([/color] [color=#000000]"[/color] [color=#000000]---Start---[/color] [color=#000000]"[/color] [color=#000000]); System.out.println(hs.getAddress().getHostName()); System.out.println(hs.getAddress().getPort()); System.out.println(hs.getAddress().getAddress()); } [/color] [color=#0000ff]catch[/color] [color=#000000] (IOException ioe) { ioe.printStackTrace(); } } [/color] [color=#0000ff]static[/color] [color=#0000ff]class[/color] [color=#000000] MyHandler [/color] [color=#0000ff]implements[/color] [color=#000000] HttpHandler { [/color] [color=#0000ff]public[/color] [color=#0000ff]void[/color] [color=#000000] handle(HttpExchange he) [/color] [color=#0000ff]throws[/color] [color=#000000] IOException { he.sendResponseHeaders([/color] [color=#000000]200[/color] [color=#000000], [/color] [color=#000000]0[/color] [color=#000000]); OutputStream os [/color] [color=#000000]=[/color] [color=#000000] he.getResponseBody(); PrintWriter printWriter [/color] [color=#000000]=[/color] [color=#0000ff]new[/color] [color=#000000] PrintWriter([/color] [color=#0000ff]new[/color] [color=#000000] OutputStreamWriter(os, [/color] [color=#000000]"[/color] [color=#000000]UTF-8[/color] [color=#000000]"[/color] [color=#000000])); he.getResponseHeaders().set([/color] [color=#000000]"[/color] [color=#000000]Content-Type[/color] [color=#000000]"[/color] [color=#000000], [/color] [color=#000000]"[/color] [color=#000000]HTML/plain;charset=utf-8[/color] [color=#000000]"[/color] [color=#000000]); printWriter.println([/color] [color=#000000]"[/color] [color=#000000]<font color='red'>--------------------------</font>[/color] [color=#000000]"[/color] [color=#000000]); Headers requestHeaders [/color] [color=#000000]=[/color] [color=#000000] he.getRequestHeaders(); [/color] [color=#0000ff]for[/color] [color=#000000] (Map.Entry[/color] [color=#000000]<[/color] [color=#000000]String, List[/color] [color=#000000]<[/color] [color=#000000]String[/color] [color=#000000]>>[/color] [color=#000000] entry : requestHeaders.entrySet()) { printWriter.println([/color] [color=#000000]"[/color] [color=#000000]</br>[/color] [color=#000000]"[/color] [color=#000000]+[/color] [color=#000000]entry.getKey() [/color] [color=#000000]+[/color] [color=#000000]"[/color] [color=#000000]: [/color] [color=#000000]"[/color] [color=#000000]+[/color] [color=#000000] entry.getValue()); } printWriter.println([/color] [color=#000000]"[/color] [color=#000000]</br>[/color] [color=#000000]"[/color] [color=#000000]+[/color] [color=#000000]"[/color] [color=#000000]<font color='red'>--------------------------</font>[/color] [color=#000000]"[/color] [color=#000000]); Headers responseHeaders [/color] [color=#000000]=[/color] [color=#000000] he.getResponseHeaders(); [/color] [color=#0000ff]for[/color] [color=#000000] (Map.Entry[/color] [color=#000000]<[/color] [color=#000000]String, List[/color] [color=#000000]<[/color] [color=#000000]String[/color] [color=#000000]>>[/color] [color=#000000] entry : responseHeaders.entrySet()) printWriter.println([/color] [color=#000000]"[/color] [color=#000000]</br>[/color] [color=#000000]"[/color] [color=#000000]+[/color] [color=#000000]entry.getKey() [/color] [color=#000000]+[/color] [color=#000000]"[/color] [color=#000000]: [/color] [color=#000000]"[/color] [color=#000000]+[/color] [color=#000000] entry.getValue()); printWriter.println([/color] [color=#000000]"[/color] [color=#000000]</br>[/color] [color=#000000]"[/color] [color=#000000]+[/color] [color=#000000]"[/color] [color=#000000]<font color='red'>--------------------------</font>[/color] [color=#000000]"[/color] [color=#000000]); printWriter.println([/color] [color=#000000]"[/color] [color=#000000]</br>[/color] [color=#000000]"[/color] [color=#000000]+[/color] [color=#000000]he.getHttpContext().getPath()); printWriter.println([/color] [color=#000000]"[/color] [color=#000000]</br>[/color] [color=#000000]"[/color] [color=#000000]+[/color] [color=#000000]"[/color] [color=#000000]<font color='red'>--------------------------</font>[/color] [color=#000000]"[/color] [color=#000000]); printWriter.println([/color] [color=#000000]"[/color] [color=#000000]</br>[/color] [color=#000000]"[/color] [color=#000000]+[/color] [color=#000000]he.getLocalAddress().getHostName()); printWriter.println([/color] [color=#000000]"[/color] [color=#000000]</br>[/color] [color=#000000]"[/color] [color=#000000]+[/color] [color=#000000]he.getLocalAddress().getAddress()); printWriter.println([/color] [color=#000000]"[/color] [color=#000000]</br>[/color] [color=#000000]"[/color] [color=#000000]+[/color] [color=#000000]he.getLocalAddress().getPort()); printWriter.println([/color] [color=#000000]"[/color] [color=#000000]<font color='red'>--------------------------</font>[/color] [color=#000000]"[/color] [color=#000000]); printWriter.close(); } } } [/color]
作者
的头像

已学习课程数:3

已发表笔记数:5

Ta的笔记
01    Oracle 如何查询锁表的对象

select s.username, decode(l.type,'tm','table lock','tx','row lock',null) lock_level, o.owner, o.object_name, o.object_type, s.sid, s.serial#, s.terminal, s.machine, s.program, s.osuser from v$session s,v$lock l,dba_objects o where l.sid = s.s

02    linux下优化tomcat服务器性能

服务器优化说明 WEB服务器优化 1、 更换tomcat5为tomcat6 版本copy测试服务版本即可 2、 加大tomcat内存 修改bin下的catalina.sh文件,增加青绿色部分 JAVA_OPTS='-Xms768m -Xmx1648m -XX:MaxPermSize=512m' 3、 加大tomcat连接数 修改conf下的server.xml文件,修改青绿色部分参数值 maxThrea

03    使用JAVA 6 构建自己的HTTP服务器

import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetSocketAddress; import java.util.List; import java.util.Map; import c

04    JAVA网站静态化方法

1. 通过freemarker静态化 2. 通过jsp filter静态化 主要思路:请求servlet->判断静态文件是否存在并且静态文件创建时间是否在阀值之内-->如果不是,则访问数据库生成静态文件->否则直接跳转静态文件 然后通过urlReWrite直接将访问servlet的请求改为html,完成seo 最后通过SQUID缓存前台数据 一、从数据库中取相应数据并替换掉模板中的对应标签,下面是一个简单的示例

05    Oracle SQL使用心得

1. 我用的Oracle 客户端最好的工具是PL/SQL Developer, 当然,如果用免费的Toad也不错,感觉现在用Toad的人还是挺多的。 2. Oracle SQL如果想提高速度有几个方式 1)创建索引,尽量建立唯一索引 2)当要创建的索引列的值取值比较小,建议创建Bitmap的索引而不是默认的Btree的。(比如性别,学历等) 3)在where条件后尽量采用数字类型的字段,比varchar的速度快 4)尽量不用用IN,Not In,union这样的条件查

相关笔记
01    JAVA网站静态化方法

1. 通过freemarker静态化 2. 通过jsp filter静态化 主要思路:请求servlet->判断静态文件是否存在并且静态文件创建时间是否在阀值之内-->如果不是,则访问数据库生成静态文件->否则直接跳转静态文件 然后通过urlReWrite直接将访问servlet的请求改为html,完成seo 最后通过SQUID缓存前台数据 一、从数据库中取相应数据并替换掉模板中的对应标签,下面是一个简单的示例

02    java中的io系统详解

  Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。 Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他编码的字符流和 java 内 Unicode 字符流之间的转换。而类 InputStreamReader 和 OutputStreamWriter 处理字符流和字节流的转换。字符流(一次可以处理一个缓冲区)一次操作比字节流(一次一个字节)效

03    流的概念和作用

流的概念和作用学习Java IO,不得不提到的就是JavaIO流。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。IO流的分类       根据处理数据类型的不同分为:字符流和字节流       根据数据流向不同分为:输入流和输出流字符流和字节流字符流的由来:

04    Java源码:URL编程

 Example 1 Below is a simple Java program which can get the hostname of a computer from IP address. download now Tips 1. Compile: javac GetHost 2. Run: java GetHost 111.111.111.1(your IP or others) import java.io.*; import java.net.*; // // /

05    多线程

一:理解多线程 多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。 线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。 多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。如果系统只有一个CPU,那么真正的“同时”是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,因此我们也不用关心

06    一个理解wait()与notify()的例子

  下面是我原来在CSDN论坛上看到的一个贴子,涉及到同步,wait(),notify()等概念的理解,我试着根据原来的一些回复和Think in Java上的相关概念将wait()和notify()这两个方法剖析了一下,欢迎指教.   问题如下:   //分析这段程序,并解释一下,着重讲讲synchronized、wait(),notify 谢谢!   class ThreadA   {    public static void main(String[] args)    {   

07    Java多线程yield心得分享

一. Thread.yield( )方法:使当前线程从执行状态(运行状态)变为可执行态(就绪状态)。cpu会从众多的可执行态里选择,也就是说,当前也就是刚刚的那个线程还是有可能会被再次执行到的,并不是说一定会执行其他线程而该线程在下一次中不会执行到了。Java线程中有一个Thread.yield( )方法,很多人翻译成线程让步。顾名思义,就是说当一个线程使用了这个方法之后,它就会把自己CPU执行的时间让掉,让自己或者其它的线程运行。打个比方:现在有很多人在排队上厕所,好不容易轮到这个人上厕所了,突然这个人

08    java多线程详细总结

一、Thread.start()与Thread.run()的区别通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止,而CPU再运行其它线程。而如果直接用Run方法,这只是调用一个方法而已,程序中依然只有“主线程”这一个线程,并没有开辟新线程,其程序执行路径还是只有一条,这样就没有达到写线程的目的。测试代码如下

09    java多线程中的异常处理机制简析

在java多线程程序中,所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的checked exception处理掉。这一点是通过java.lang.Runnable.run()方法声明(因为此方法声明上没有throw exception部分)进行了约束。但是线程依然有可能抛出unchecked exception,当此类异常跑抛出时,线程就会终结,而对于主线程和其他线程完全不受影响,且完全感知不到某个线程抛出的异常(也是说完全无法catch到这个异常)。JVM

10    java多线程入门知识及示例程序

为什么需要多线程?模型的简化,如某些程序是由多个相对独立任务的运行:图形界面的出现,输入、输出的阻塞多核CPU的更好利用异步行为的需要 Java多线程的特性:程序的入口main本身是一个线程线程是并发的,无序执行的线程内部是顺序执行的共享数据 Java多线程的风险:安全风险:由于线程的操作顺序是不确定的,某些在单线程下能运行的程序到多线程下会出现意外的结果。性能风险:服务器的吞吐量、响应性、资源消耗 Java多线程API:Java可以通过两种形式创建线程:一、实现Runnable接口,二、继承Thread

最新笔记
01    Mysql DBA

基本知识1.mysql的编译安装2.mysql 第3方存储引擎安装配置方法3.mysql主流存储引擎(MyISAM/innodb/MEMORY)的特点4.字符串编码知识5.MySQL用户账户管理6.数据备份/数据入导出7.mysql 支持的基本数据类型8.库/表/字段/索引 的创建/修改/删除9.基本sql语法:select/insert/update/delete,掌握最基本的语法即可,什么inner join,left join的了解就行mysql的应用场景大多都是高并发访问/业务逻辑简单,join/

02    mysql 备份

备份:mysqldump -uroot-p'root' jpstudy > /opt/mysql_jpstudy_bak.sql恢复:mysql -uroot-p'root' jpstudy < /opt/mysql_jpstudy_bak.sql参数说明:1、备份sql文件名以 -B ,即:mysqldump -uroot-p'root' -B jpstudy >/opt/mysql_jpstudy_bak_B.sql表示:备份的sql语句中有创建数据库和字符集的语句2、参数--com

03    mysql 索引失效

1.全值匹配2.最佳左前缀法则:如果索引了多列,要遵守最佳左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。3.不在索引列上做任何操作(计算、函数、类型转换),会导致索引失效而转向全表扫描4.存储引擎不能使用索引中范围条件右边的列5.尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select*6.mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描7.is null ,is not null也无法使用索引8.like以通配符开头(‘%abc’)

04    tomcat安全问题4

7 脚本权限回收去除其他用户对bin目录下可执行权限,防止其他用户起停tomcat# chmod -R 744bin/*8 访问日志格式规范开启Referer和User-Agetn是为了一旦出现安全问题能够更好的根据日志进行排查       <Hostname="23.83.xx.xx" appBase="webapps"     

05    tomcat安全问题2

3 禁用管理端对于tomcat的web管理端属于高危安全隐患,一旦被攻破,黑客通过上传web shell方式取得服务器的控制权,那是非常可怕的。我们需要删除tomcat安装目录下conf/tomcat- user.xml或者删除webapps下默认的目录和文件。 # mv webapps/*/tmp 4 降权启动tomcattomcat 启动用户权限必须为非root,避免一旦tomcat服务被入侵,获取root权限,普通用户只能使用大于1024端口,如果要想使用80端

06    tomcat安全问题

1、telnet管理端口保护使用telnet连接进来可以输入SHUTDOWN可以直接关闭tomcat,极不安全,必须关闭。可以修改默认的管理端口8005改为其他端口,修改SHUTDOWN指令为其他字符串。# viconf/server.xml <Server port="8365" shutdown="IN0IT">2 AJP连接端口保护Tomcat 服务器通过Connector连接器组件与客户程序建立连接,Connector组件负责接收客户的

07    发个测试

发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试 发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试 发个测试发个测试发个测

08    Elasticsearch 优化之路

1、index 创建的时候一定要计算好shard,因为主分片一经确认是不能修改的,每一个分片上面独立运行着一个lucene程序;因此设置主分片的时候尽量考虑未来发展需求,如果当前有1G数据,使用默认分片5个,每一个主分片数据相当于200M数据(hash(ID)%max_shards进行数据分片存储的),但是随着时间推移如果3个月后数据变成100G了,但是主分片还是5个,每一个上面就是20G的数据,会大大降低处理性能;(2.3.1版本增加了对index的动态迁移能力,也许可以快速的处理这一问题)。2、字段的

09    SQL-触发器

1.触发器的定义触发器是一种特殊的存储过程 在表或视图上执行insert、update、delete操作自动被调用的存储过程 用途: 1.检测数据的有效性(check) 2.*记录操作的日志 3.拦截数据 rollback 4.*统计某表中的数据 分类: 1.after —— 在数据操作完成之后触发 2.inserted of —— 在数据操作完成之前触发  after可以创建在普通表上和视图上  inserted of可以创建在表 触发器的创建 表示:在指定表上执行upd

10    Java面试题—2016最新Java面试考题知识详解(1)

    动力节点Java培训  下面给出的Java开发中ClassLoader中的描述,哪些描述是正确的(C) AClassLoader没有层次关系 B所有类中的ClassLoader都是AppClassLoader C通过classforname(StringclassName)能够动态加载一个类 D不同的ClassLoader加载同一个Class文件,所得的类是相同的   拓展知识ClassLoader知识

热门笔记
01    Storm单机+zookeeper集群安装

Storm单机+zookeeper集群安装 1、安装zookeeper集群 2、准备机器 10.10.3.44 flumemaster1 zk 10.10.3.129 flumemaster2 zk 10.10.3.132 flumecollector1 zk 10.10.3.115 flumeNg1 storm 3、配置hosts文件(4台服务器上面都需要配置) vi /etc/hosts

02    sqoop安装使用手册

sqoop使用 需求:将mysql中的表b05_age的数据导入hive中 1、安装 yum install sqoop(sqoop必须安装在有hive client的服务器上面,如果没有执行yum install hive) 复制mysql的驱动jar到/usr/lib/sqoop/lib下面 2、异常处理 正确命令:(将关系型数据的表结构复制到hive中) sudo -u hive sqoop create-hive-table --connect jdbc:my

03    CDH hadoop集群安装-1

准备机器: 192.168.1.241 192.168.1.242 192.168.1.243 1、查看ip地址是否为静态ip,如果不是进行配置 vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none IPADDR=192.168.1.241 NE

04    Oracle SQL使用心得

1. 我用的Oracle 客户端最好的工具是PL/SQL Developer, 当然,如果用免费的Toad也不错,感觉现在用Toad的人还是挺多的。 2. Oracle SQL如果想提高速度有几个方式 1)创建索引,尽量建立唯一索引 2)当要创建的索引列的值取值比较小,建议创建Bitmap的索引而不是默认的Btree的。(比如性别,学历等) 3)在where条件后尽量采用数字类型的字段,比varchar的速度快 4)尽量不用用IN,Not In,union这样的条件查

05    JAVA网站静态化方法

1. 通过freemarker静态化 2. 通过jsp filter静态化 主要思路:请求servlet->判断静态文件是否存在并且静态文件创建时间是否在阀值之内-->如果不是,则访问数据库生成静态文件->否则直接跳转静态文件 然后通过urlReWrite直接将访问servlet的请求改为html,完成seo 最后通过SQUID缓存前台数据 一、从数据库中取相应数据并替换掉模板中的对应标签,下面是一个简单的示例

06    使用JAVA 6 构建自己的HTTP服务器

import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetSocketAddress; import java.util.List; import java.util.Map; import c

07    linux下优化tomcat服务器性能

服务器优化说明 WEB服务器优化 1、 更换tomcat5为tomcat6 版本copy测试服务版本即可 2、 加大tomcat内存 修改bin下的catalina.sh文件,增加青绿色部分 JAVA_OPTS='-Xms768m -Xmx1648m -XX:MaxPermSize=512m' 3、 加大tomcat连接数 修改conf下的server.xml文件,修改青绿色部分参数值 maxThrea

08    Oracle 如何查询锁表的对象

select s.username, decode(l.type,'tm','table lock','tx','row lock',null) lock_level, o.owner, o.object_name, o.object_type, s.sid, s.serial#, s.terminal, s.machine, s.program, s.osuser from v$session s,v$lock l,dba_objects o where l.sid = s.s

09    【Twitter Storm系列】flume-ng+Kafka+Storm+HDFS 实时系统搭建

一直以来都想接触Storm实时计算这块的东西,最近在群里看到上海一哥们罗宝写的Flume+Kafka+Storm的实时日志流系统的搭建文档,自己也跟着整了一遍,之前罗宝的文章中有一些要注意点没提到的,以后一些写错的点,在这边我会做修正;内容应该说绝大部分引用罗宝的文章的,这里要谢谢罗宝兄弟,还有写这篇文章@晨色星空J2EE也给了我很大帮助,这里也谢谢@晨色星空J2EE之前在弄这个的时候,跟群里的一些人讨论过,有的人说,直接用storm不就可以做实时处理了,用不着那么麻烦;其实不然,做软件开发的都知道模块化

10    实时流处理框架——Storm(介绍篇)

1. Storm介绍2. Storm环境配置3. Storm程序流程4. Storm总结及问题1. Storm介绍 1.1 实时流计算背景 随着互联网的更进一步发展,信息浏览、搜索、关系交互传递型,以及电子商务、互联网旅游生活产品等将生活中的流通环节在线化。对于实时性的要求进一步提升,而信息的交互和沟通正在从点对点往信息链甚至信息网的方向发展,这样必然带来数据在各个维度的交叉关联,数据爆炸已不可避免。因此流式处理和NoSQL产品应运而生,分别解决实时框架和数据大 规模存储计算的问题。 流式处理可

友情链接