会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132883个问题
JAVA 全系列/第二阶段:JAVA 基础深化和提高/常用类 2402楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/IO 流技术(旧) 2405楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 2406楼

相关代码:Request类

package com.bjsxt.server;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Request {//请求
	private InputStream is;//输入流
	private String requestInfo;//请求字符串,请求方式,请求路径,参数,协议,协议版本,请求正文
	private String method;//请求方式
	private String url;//请求的url
	//输入框name为key,值为value
	/**
	 * key:username value:bjsxt
	 * key:pwd		value:123
	 * key:hobby 	value:    read,ball
	 */
	private Map<String,List<String>> parametermapValues;//参数 
	private static final String CRLF="\r\n";//换行
	private static final String BLANK=" ";//空格
	//构造方法,初始化属性
	public Request() {
		parametermapValues=new HashMap<String,List<String>>();
		method="";
		url="";
		requestInfo="";
	}
	public Request(InputStream is) {
		this();
		this.is=is;
		try {
			byte[]buf=new byte[20480];
			int len=this.is.read(buf);
			requestInfo=new String(buf,0,len);
		} catch (IOException e) {
			return;
		}	
		this.parseRequestInfo();
	}//分解请求信息的方法
	/**请求方式
	 * 请求路径
	 * 请求参数
	 * 
	 */
	private void parseRequestInfo() {
		String paraString="";//用于存储请求参数
		//获取请求参数的第一行
		String firstLine = requestInfo.substring(0, requestInfo.indexOf(CRLF)).trim();
		//分解出请求方式
		int index = firstLine.indexOf("/");
		this.method=firstLine.substring(0, index).trim();
		//分解url,可能包含参数(get),也可能不包含参数(post)
		String urlString = firstLine.substring(index,firstLine.indexOf("HTTP/") ).trim();
		if ("get".equalsIgnoreCase(this.method)) {
			if (urlString.contains("?")) {
				String[] urlArray=urlString.split("\\?");
				this.url=urlArray[0];
				paraString=urlArray[1];
				
			}else {
				this.url=urlString;
			}
		}else {//不包含请求参数
			this.url=urlString;
			paraString=requestInfo.substring(requestInfo.lastIndexOf(CRLF)).trim();						
		}
		if (paraString.equals("")) {
			return;
		}
		//请求参数
		System.out.println(paraString);
	}//用于测试
	public void show() {
		System.out.println(this.url);
		System.out.println(this.method);
	}
}


Server类

package com.bjsxt.server;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {//服务器,用于启动和停止服务
	private ServerSocket server;
	public static void main(String[] args) {
		Server server=new Server();
		server.start();
	}
	public void start() {
		this.start(8888);
	}
	public void start(int port) {
		try {
			server=new ServerSocket(port);
			this.receive();//请求接收信息的方法
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	private void receive() {
		//监听
		try {
			Socket client=server.accept();
			//获取用户请求
			/*InputStream is=client.getInputStream();
			byte[] buf=new byte[20480];
			int len=is.read(buf);			
			System.out.println(new String(buf,0,len));*/
			//封装请求信息
			Request req=new Request(client.getInputStream());
			req.show();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}


JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 2408楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/IO 流技术(旧) 2409楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器 2411楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/网络编程 2412楼

package com.bjsxt.homework.Thread;

public class JoinThread {
    public static void main(String[] args) {
        System.out.println("main线程开始");
        Thread  t1 = new Thread(new A());

        t1.start();
        //new B().start();
        for(int i =0;i<10;i++){
            System.out.println(Thread.currentThread().getName()+"正在运行"+i);

            //i=3时,main被挂起,直到A执行完。
        if (i == 3) {

            try {
                t1.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
        System.out.println("main线程结束");
    }
}
 class A implements Runnable{
    Thread t = new B();

    @Override
    public void run() {
        t.run();
        for(int i =0;i<10;i++){
        System.out.println(Thread.currentThread().getName()+"正在运行"+i);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        //i=5时,A被挂起,直到B执行完。
        if(i==5){
            try {
                t.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }}

}
 class B extends Thread{
     @Override
     public void run() {
         for(int i =0;i<10;i++){
             System.out.println(Thread.currentThread().getName()+"正在运行!!!"+i);
             try {
                 Thread.sleep(1000);
             } catch (InterruptedException e) {
                 e.printStackTrace();
             }
     }

     }
 }


JAVA 全系列/第二阶段:JAVA 基础深化和提高/多线程技术(旧) 2414楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/反射技术(旧) 2415楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637