模拟tomcat工作原理

httpserver原理:服务器端 打开一个socket,一直处在监听tomcat指定的 ip 的指定端口,一旦有访问的,就开启一个线程去处理,代码如下:
-------------------------------server:
package com.kaobian;<br><br>import java.io.ioexception;<br>import java.net.serversocket;<br>import java.net.socket;<br>import com.session.httpsession;<br><br>public class httpserver {<br>    public static void main(string[] args) {<br>        try {<br>            serversocket server = new serversocket(8888);<br>            while (true) {<br>                socket socket = server.accept();<br>                httpsession session = new httpsession(socket);<br>                new thread(session).start();<br>            }<br>        } catch (ioexception e) {<br>            e.printstacktrace();<br>        }<br>    }<br>}<br>---------------------------------处理线程
package com.session;<br><br>import java.io.bufferedreader;<br>import java.io.file;<br>import java.io.fileinputstream;<br>import java.io.filenotfoundexception;<br>import java.io.ioexception;<br>import java.io.inputstream;<br>import java.io.inputstreamreader;<br>import java.io.outputstream;<br>import java.net.socket;<br><br>import com.config.config;<br><br>public class httpsession implements runnable {<br>    private string path = config.getconfig().getpath();<br>    private socket socket ;<br><br>    public httpsession(socket socket){<br>        super();<br>        this.socket = socket;<br>    }<br><br>    public void run() {<br>         try {<br>            bufferedreader br = new bufferedreader(new inputstreamreader(this.socket.getinputstream()));<br>            outputstream out = this.socket.getoutputstream();<br>            string command = null;<br>            while((command = br.readline()) != null){<br>                system.out.println("浏览器的指令:"+command);<br>                if(command.length() <3){<br>                    break;<br>                }<br>                string result = command.substring(0,3);<br>                if(result.equalsignorecase("get")){<br>                    int begin = command.indexof("/")+1;<br>                    int end   = command.lastindexof(" ");<br>                    string filename = command.substring(begin,end);<br>                    doget(filename,out);<br>                }<br>                <br>            }<br>            out.close();<br>            br.close();<br>        } catch (ioexception e) {<br>            e.printstacktrace();<br>        }<br>    }<br><br>    private void doget(string filename, outputstream out) {<br>        file file = new file(path+filename);<br>        if(!file.isdirectory()){<br>            if(!file.exists()){<br>                file = new file(path + config.getconfig().getdefaultpage());    <br>            }<br>        }else {<br>            file = new file(path +  config.getconfig().getdefaultpage());<br>        }<br>        inputstream is  = null;<br>        try {<br>            is = new fileinputstream(file);<br>            byte[] data  =new byte[1024];<br>            int    len = 0;<br>            while((len = is.read(data)) != -1){<br>                out.write(data,0,len);<br>            }<br>        } catch (filenotfoundexception e) {<br>            e.printstacktrace();<br>        } catch (ioexception e) {<br>            e.printstacktrace();<br>        }finally {<br>            if(is != null){<br>               try {<br>                    is.close();<br>                } catch (ioexception e) {<br>                    e.printstacktrace();<br>                }finally{<br>                    is = null;<br>                }<br>            }<br>        }<br>        <br>    }<br><br>}<br>---------------------------读取配置文件
[b]package com.config;<br><br>import java.io.file;<br>import java.io.fileinputstream;<br>import java.io.ioexception;<br>import java.io.inputstream;<br>import java.util.properties;<br><br>public class config {<br>    <br>    private string  path ;<br>    private string  defaultpage;<br>    private static config config ;<br>    <br>    public static config getconfig(){<br>        if(config == null){<br>            config = new config();<br>            config.init();<br>        }<br>        return config;<br>    }<br>    <br>    private void init(){<br>        properties properties = new properties();<br>        try {<br>            inputstream reader = new fileinputstream(new file("config.properties"));<br>            properties.load(reader);<br>            this.path = properties.getproperty("path");<br>            this.defaultpage = properties.getproperty("defaultindex");<br>            reader.close();<br>        } catch (ioexception e) {<br>            e.printstacktrace();<br>        }<br>    }<br>    <br>    private config(){<br>    }<br>    <br>    public string getpath() {<br>        return path;<br>    }<br>    public void setpath(string path) {<br>        this.path = path;<br>    }<br>    public string getdefaultpage() {<br>        return defaultpage;<br>    }<br>    public void setdefaultpage(string defaultpage) {<br>        this.defaultpage = defaultpage;<br>    }<br>    <br>}<br>[/b]
------------------配置文件要放到工程的根目录下,要不然自行修改属性文件的位置
path=c://<br>defaultindex=div.html<br>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值