Java HttpServer实现交互

</pre><pre name="code" class="java">package com.knightsight.server;
import java.io.*;
import java.util.Date;

public class Response {
	public static final String CRLF="\r\n";
	public static final String BLANK=" ";
	private BufferedWriter bw;
	
	//头信息、正文及长度 response工具类
	private StringBuilder headInfo;
	private StringBuilder content;
	private int len=0;
	
	public Response(OutputStream os){
		headInfo=new StringBuilder();
		content=new StringBuilder();
		len=0;
		bw=new BufferedWriter(new OutputStreamWriter(os));
		
	}
	public Response print(String info){
		content.append(info);
		len+=info.getBytes().length;
		return this;
		
	}
	
	public Response println(String info){
		content.append(info).append(CRLF);
		len+=(info+CRLF).getBytes().length;
		return this;
		
	}
	private void createHeadInfo(int code){
		headInfo.append("HTTP/1.1").append(BLANK).append(code).append(BLANK);
		switch(code){
		case 200:
			headInfo.append("OK");
			break;
		case 404:
			headInfo.append("NOT FOUND");
			break;
		case 500:
			headInfo.append("SERVER ERROR");
			break;
		}
		headInfo.append(CRLF);
		//响应头response head
		headInfo.append("Server:knight Server/0.0.1").append(CRLF);
		headInfo.append("Date:").append(new Date()).append(CRLF);
		headInfo.append("Content-type:text/html;charset=GBK").append(CRLF);
		//正文长度
		headInfo.append("Content-Length:").append(len).append(CRLF);
		headInfo.append(CRLF);
	}
	
	public void pushToClient(int code) throws IOException{
		createHeadInfo(code);
		bw.append(headInfo.toString());
		bw.append(content.toString());
		System.out.println(headInfo.toString()+content.toString());
		bw.flush();
		bw.close();
	}
}

/*
     输入localhost:8800 会提示responseText信息,表单键入显示账号密码
(1)协议头。协议版本、状态码、描述
    HTTP/1.1200 ok
1xx 信息类 正在进一步处理
2xx 成功类 接收到请求并进一步处理 200 ok
3xx 重定向类 请求没有成功,采取进一步操作
4xx 客户端错误 404not found
5xx 服务器错误
 
(2)Response Header。服务器类型、日期时间、正文类型长度。
   Server:ApacheTomcat/1.1.0
   Date: Sat, 31 Dec 2005 23:59:59 GMT
   Content-Type: text/html;charset=GBK
   Content-Length: 122
   Content-Type:text/plain
 
(3)Response Content。协议正文
<html>
<head>
<title>Wrox Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>
 */

package com.knightsight.server;
import java.net.*;
import java.util.*;
import java.io.*;

public class Server3 {
	private ServerSocket server;
	public static void main(String[] args) {
		Server3 server3=new Server3();
		server3.start();
		
	}
	
	public void start(){
		try {
			server = new ServerSocket(8800);	
			this.receive();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void receive(){
			try {
				Socket client=server.accept();
			 	byte []data=new byte[20480];
			 	//1.获取输入流
				int len=client.getInputStream().read(data);
				String requestInfo=new String(data,0,len).trim();
				System.out.println(requestInfo);
								
				Response reponse=new Response(client.getOutputStream());
				reponse.println("<html><head><title>HTTP responseExample</title>");
				reponse.println("</head><body>     Hello 杨雪 困了吃水果</body></html>");
				reponse.pushToClient(500);	
				
			} catch (IOException   e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		
	}
	
}


<html>
<head>
<title>First Form</title>
</head>

<body>
	<pre>
	get:数据量小,安全性不高,默认方式
	post:量大安全性相对高
	action:请求的服务器路径
	id:编号js使用
	name:后端区分唯一性,只要提交数据后台,必须有name
	</pre>
<form method="post" action="http://localhost:8800/index.html">
	username:<input type="text" name="uname" id="name" />
	passw:<input type="password" name="pwd" id="password"/>
	<input type="submit" value="Submit" />
</form>
</body>
  
</html> 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值