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>
-------------------------------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>