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