模拟http协议所以需要处理请求与封装响应
之后在服务器端就可以进行使用
创建处理请求类
package com.yunhe;
import java.io.IOException;
import java.io.InputStream;
public class HttpRequest {
private String uri;
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}
public HttpRequest(InputStream in) throws IOException{
resolverRequest(in);
}
private void resolverRequest(InputStream in) throws IOException {
//1.读取 客户端请求过来的数据,解析出来uri
byte[] buff = new byte[1024];
int len = in.read(buff);
if( len>0 ){
String msg = new String(buff,0,len);
System.out.println("客户端请求信息");
System.out.println("客户端请求过来的数据是:" + msg );
this.uri = msg.substring( 4,msg.indexOf("HTTP/1.1") );
}else{
System.out.println("bad request!");
}
}
public static void main(String[] args) {
}
}
创建响应类
package com.yunhe;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
public class HttpResponse {
private OutputStream out = null;
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
public HttpResponse(OutputStream out) {
super();
this.out = out;
}
//这个方法的作用是把请求的地址传递进来,服务器这个时候向客户端回写响应的文件数据等
public void writeFile( String path ) throws IOException{
String basepath = new File("").getCanonicalPath();
FileInputStream fis = new FileInputStream( basepath +"/"+ path);
byte[] buff = new byte[1024];
int len = 0;
StringBuffer sb = new StringBuffer();
//拼凑响应头信息
sb.append("HTTP/1.1 200 OK\n");
//sb.append("Content-Type: text/html;charset=UTF-8\n");
sb.append("\r\n");
//响应业务,
out.write(sb.toString().getBytes());
while((len=fis.read(buff))!=-1){
out.write(buff,0,len);
}
fis.close();
out.flush();
out.close();
}
}
使用tcp创建服务器端
package com.yunhe;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Server {
static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8888);
System.out.println("启动服务器....8888端口");
while(true){
Socket s = ss.accept();
System.out.println("客户端:"+s.getInetAddress().getLocalHost()+"已连接到服务器");
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
HttpRequest request = new HttpRequest( s.getInputStream() );
String requesturi = request.getUri();
System.out.println("请求路径是:"+requesturi);
HttpResponse response = new HttpResponse(s.getOutputStream());
//if(isStatic(requesturi)){
response.writeFile(requesturi);
//}
s.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
//静态资源的重复获取需要通过过滤
public static boolean isStatic( String uri ){
boolean isStatic = false;
String []suffixs = {"html","css","js","jpg","png","gif","bmp"};
for( String suffix : suffixs){
if(uri.endsWith("."+suffix)){
isStatic = true;
break;
}
}
return isStatic;
}
}