创建好项目,web目录一定要放在项目根目录,方便用相对路径查询

创建服务器获取浏览器请求
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket server=new ServerSocket(8000);
servers(server);
server.close();
}
private static void servers(ServerSocket server) throws IOException {
Socket socket=server.accept();
InputStream is = socket.getInputStream();
int read=0;
byte[] buff=new byte[1024];
read = is.read(buff);
System.out.println(new String(buff,0,read));
socket.close();
}
}

读取文件里的内容并返回给浏览器
在这里插入代码片 private static void servers(ServerSocket server) throws IOException {
Socket socket=server.accept();
InputStream is = socket.getInputStream();
// int read=0;
// byte[] buff=new byte[1024];
// read = is.read(buff);
// System.out.println(new String(buff,0,read));
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = br.readLine(); // GET /web/index.html HTTP/1.1
String[] arr = line.split(" ");// arr[0]=GET ,arr[1]=/web/index.html HTTP/1.1
line=arr[1]; // /web/index.html HTTP/1.1
line=line.substring(1); //web/index.html HTTP/1.1
System.out.println(line);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(line));
BufferedOutputStream bos=new BufferedOutputStream(socket.getOutputStream());
// 写入HTTP协议响应头,固定写法
bos.write("HTTP/1.1 200 OK\r\n".getBytes());
bos.write("Content-Type:text/html\r\n".getBytes());
// 必须要写入空行,否则浏览器不解析
int read=0;
bos.write("\r\n".getBytes());
while( (read=bis.read())!=-1 ){
bos.write(read);
}
bis.close();
bos.close();
br.close();
is.close();
socket.close();
}

- 一次请求得不到样式链接和图片链接,浏览器得到网页内容后会根据样式链接和图片链接自动向
浏览器发起请求,所以浏览器要加上循环。
加上循环(显示图片和样式),加上多线程(提高效率)
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket server=new ServerSocket(8000);
servers(server);
server.close();
}
private static void servers(ServerSocket server) throws IOException {
while(true){
Socket socket=server.accept();
// System.out.println(socket);
new Thread(new Runnable() {
@Override
public void run() {
try {
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = br.readLine(); // GET /web/index.html HTTP/1.1
String[] arr = line.split(" ");// arr[0]=GET ,arr[1]=/web/index.html HTTP/1.1
line=arr[1]; // /web/index.html HTTP/1.1
line=line.substring(1); //web/index.html HTTP/1.1
System.out.println(line);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(line));
BufferedOutputStream bos=new BufferedOutputStream(socket.getOutputStream());
// 写入HTTP协议响应头,固定写法
bos.write("HTTP/1.1 200 OK\r\n".getBytes());
bos.write("Content-Type:text/html\r\n".getBytes());
// 必须要写入空行,否则浏览器不解析
int read=0;
bos.write("\r\n".getBytes());
while( (read=bis.read())!=-1 ){
bos.write(read);
}
bis.close();
bos.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}
