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

相关代码: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 基础深化和提高/手写服务器项目(旧) 2410楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/IO 流技术(旧) 2411楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器 2413楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/网络编程 2414楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

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