• Java基础教程——模拟B/S结构的服务器


    浏览器发送请求,用Java模拟写个简单的服务器,浏览器可以收到响应。

    执行下列代码(设置static final int TEST = 1),

    使用浏览器访问:http://127.0.0.1:8888/tigerlion/index.html
    

    服务器会打印如下代码,这就是浏览器请求的内容:

    GET /tigerlion/index.html HTTP/1.1
    Accept: text/html, application/xhtml+xml, image/jxr, /
    Accept-Language: zh-CN
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
    Accept-Encoding: gzip, deflate
    Host: 127.0.0.1:8888
    Connection: Keep-Alive

    第一句反应了请求访问的资源信息,找到响应文件,返回给请求放即可(设置static final int TEST = 0)。

    import java.net.*;
    import java.io.*;
    public class SocketBS {
    	// 使用IE访问:http://127.0.0.1:8888/tigerlion/index.html
    	static final int TEST = 1;// 1:输出请求内容/其它:接受请求并响应
    	public static void main(String[] args) {
    		try {
    			ServerSocket sSocket = new ServerSocket(8888);
    			while (true) {
    				System.out.println("accept:");
    				Socket s = sSocket.accept();
    				InputStream ips = s.getInputStream();
    				if (TEST == 1) {
    					// 测试请求内容
    					byte[] b = new byte[1024];
    					ips.read(b);
    					System.out.println(new String(b));
    				} else {
    					// 使用缓冲流,读取一行,并进行解析
    					BufferedReader br = new BufferedReader(new InputStreamReader(ips));
    					// |--获取首行
    					String firstLine = br.readLine();
    					// |--按空格分割
    					String[] request = firstLine.split(" ");
    					// |--0是GET,1是路径
    					String requestPage = request[1];
    					System.out.println("用户请求的资源是:" + requestPage);
    					// 根据用户请求的资源,找到服务器上的文件,发送给用户
    					OutputStream os = s.getOutputStream();
    					// HTML协议响应头(固定写法)
    					os.write("HTTP/1.1 200 OK
    ".getBytes());
    					os.write("Content-TYpe:text/html
    ".getBytes());
    					os.write("
    ".getBytes());
    					// 写网页(应该是从服务器上读文件并写入,此处简化)
    					os.write("<HTML><a href='https://zhuanlan.zhihu.com/hulaoshi'>Story of Computer</a></HTML>"
    							.getBytes());
    					os.close();
    					br.close();
    				}
    				ips.close();
    				s.close();
    			}
    			// sSocket.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			System.out.println("服务器端,OVER");
    		}
    	}
    }
    
  • 相关阅读:
    第四周
    第二次作业
    jsp
    软件测试第一次
    增删改查
    用户添加
    登录
    购物商城
    jsp第七周作业
    jsp第六周作业
  • 原文地址:https://www.cnblogs.com/tigerlion/p/11182822.html
Copyright © 2020-2023  润新知