http请求
一般一个http请求包括以下三个部分:
1 请求方法,如get,post
2 请求头
3 实体
一个http请求的实例如下:
get /index.jsp http/1.1
host: localh教资面试时间ost:8080
ur-agent: mozilla/5.0 (windows nt 5.1; rv:15.0) gecko/20100101 firefox/15.0
accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
accept-language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
accept-encoding: gzip, deflate
connection: keep-alive
注意红色部分的url,这是我们待会要截取出来的。
http响应
与http请求类似,http响应也包括三个部分
1 协议-状态码-描述
2 响应头
3 响应实体段
套接字是网络连接的断点。套接字使得应用程序可以从网络中读取数据,可以向网络中写入数据。不同计算机上的应用程序可以通过套接字发送或接受字节流。java中提供了socket类来实现这个功能,通过getinputstream和getoutputstream可以获取网络中的输入输出流。
但是,光靠socket类还是不能够实现我们构建一个服务器应用程序的功能的,因为服务器必须时刻待命,因此java里面提供了rversocket类来处理等待来自客户端的请求,当rversocket接受到了来自客户端的请求之后,它就会创建一个实例来处理与客户端的通信。
首先,我们要构建一个封装请求信息的类requst,一个响应请求的类respon,还要有一个主程序httprver来处理客户端来的请求。
package com.lwq;import java.io.ioexception;import java.io.inputstream;/** * @author joker * 类说明 * 将浏览器发来的请求信息转化成字符和截取url */public class request { //输入流 private inputstream input; //截取url,如http://localhost:8080/index.html ,截取部分为 /index.html private string uri; public request(inputstream inputstream){ this.input = inputstream; } public inputstream getinput() { return input; } public void tinput(inputstream input) { this.input = input; } public string geturi() { return uri; } public void turi(string uri) { this.uri = uri; } //从套接字中读取字符信息 public void par(){ stringbuffer request = new stringbuffer(2048); int i = 0; byte[] buffer = new byte[2048]; try { i = input.read(buffer); } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); 3月12日是什么节 i = -1; } for(int j = 0;j<i;j++){ request.append((char)(buffer[j])); } system.out.println(request.tostring()); uri = paruri(request.tostring()); } //截取请求的url private string paruri(string requeststring){ int index1 = 0; int index2 = 0; index1 = requeststring.indexof(' '); if(index1!=-1){ index2 = requeststring.indexof(' ',index1+1); if(index2>index1){ return requeststring.substring(index1+1,index2); } 桃花源记读后感 } return null; } }
下面是封装了响应请求的类respon:
package com.lwq;import j对比论证的作用ava.io.file;import java.io.fileinputstream;import java.io.filenotfoundexception;import java.io.ioexception;import java.io.outputstream;import java.io.printwriter;/** * @author joker * @version 创建时间:p 5, 2012 9:59:53 pm * 类说明 根据相应信息返回结果 */public class respon { private static final int buffer_size = 1024; request request; outputstream output; public respon(outputstream output){ this.output = output; } public void ndstaticresource() throws ioexception{ byte[] bytes = new byte[buffer_size]; fileinputstream fis = null; file file = new file(httprver.web_root,request.geturi()); if(file.exists()){ try { fis = new fileinputstream(file); int ch = fis.read(bytes,0,buffer_size); while(ch != -1){ output.write(bytes,0,ch); ch = fis.read(bytes,0,buffer_size); } } catch (filenotfoundexception e) { // todo auto-generated catch block e.printstacktrace(); }catch(ioexception e){ e.printstacktrace(); }finally{ if(fis !=null){ fis.clo(); } } }el{ //找不到文件 string errormessage = "http/1.1 404 file not found\r\n" + "content-type: text/html\r\n" + "content-length: 23\r\n" + "\r\n" + "file not found"; try { output.write(errormessage.getbytes()); output.flush(); } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); } } } public request getrequest() { return request; } public void trequest(request request) { this.reque清贫的反义词st = request; } public outputstream getoutput() { return output; } public void toutput(outputstream output) { this.output = output; } public static int getbuffer_size() { return buffer_size; }}
接下来是主程序,
package com.lwq;import java.io.file;import java.io.inputstream;import java.io.outputstream;import java.net.inetaddress;import java.net.rversocket;import java.net.socket;/** * @author joker * 类说明 */public class httprver { /** * @param args */ //web_root是服务器的根目录 public static final string web_root = system.getproperty("ur.dir")+file.parator+"webroot"; //关闭的命令 private static final string shutdown_command= "/shutdown"; public static void main(string[] args) { // todo auto-generated method stub httprver rver = new httprver(); rver.await(); } public void await(){ rversocket rversocket = null; int port = 8080; try { rversocket = new rversocket(port,1,inetaddress.getbyname("127.0.0.1")); while(true) { try { socket socket = null; inputstream input = null; outputstream output = null; socket = rversocket.accept(); input = socket.getinputstream(); output = socket.getoutputstream(); //封装request请求 request request = new request(input); request.par(); //封装respon对象 respon respon = new respon(output); respon.trequest(request); respon.ndstaticresource(); socket.clo(); } catch (exception e) { // todo auto-generated catch block e.printstacktrace(); continue; } } } catch (exception e) { // todo auto-generated catch block e.printstacktrace(); } } }
运行httprver,在浏览器中打下http://localhost:8080/index.jsp,就能看到服务器响应的结果了。
到此这篇关于java服务器的简单实现的文章就介绍到这了,更多相关java服务器实现内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-03 22:12:14,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/5dd251a6bcdce0671f61153c946d3fb3.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:java服务器的简单实现过程记录.doc
本文 PDF 下载地址:java服务器的简单实现过程记录.pdf
留言与评论(共有 0 条评论) |