dtcms 源码 bash dataframe jsf tkinter automation ros 打印 eking文件 layer casting path 管理后台模板 nginx教程视频 网络营销视频 electron教程 php抽奖源码 rxjava线程切换 oracle删除字段sql ipex接口 cpm怎么计算 多线程实现方式 edate函数的使用方法 arraylist删除指定元素 河南普通话报名入口 python3正则表达式 python环境配置 python设置环境变量 java变量 java中正则表达式 java的基本类型 java初级教程 java文档 linux中sudo opengl编程指南 asp建站系统 不寻常的指南针 摩斯电码翻译器 图片链接生成器 倒计时计时器 spoonwep
当前位置: 首页 > 学习教程  > 编程语言

达内javaSE_day20 —— 服务器v1-v4

2020/8/11 19:43:41 文章标签:

javaSE_day20

  • 服务器
    • v1 多线程的服务器端
    • v2 读客户端的请求
    • v3 定义HttpRequest类
    • v4 读文件,响应文件到客户端

服务器

v1 多线程的服务器端

写多线程的服务器端(ClientHandler)

  1. 包:cn.tedu.core
  2. 类名:WebServer
  3. 声明成员变量:server:ServerSocket
  4. 方法:
    无参的构造方法:WebServer
    功能:初始化server,端口号为8080
    start方法
    功能:启动服务器
    接收客户端请求:accept()
    定义线程对象,并启动线程start()
  5. 定义内部类:ClientHandler
    线程类定义成员变量:socket:Socket
    定义带参的构造方法初始化:socket
    重写run方法:功能:控制台输出处理客户端请求
  6. 定义main方法:启动服务器
  7. 测试:打开浏览器客户端:http://localhost:8080/

WebServer.java

package cn.tedu.core;
public class WebServer {
	private ServerSocket server;
	public WebServer()  {
		try {
			server = new ServerSocket(8080);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
	}
	public void Start(){
		try {
			while(true){
				System.out.println("等待客户端的请求......");
				Socket socket = server.accept();
				new Thread(new ClientHandler(socket)).start();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}						
	}
	
	class ClientHandler implements Runnable{
		Socket socket ;
		public ClientHandler(Socket socket) {
			this.socket = socket;
		}
		@Override
		public void run() {
			System.out.println("接收到了客户端请求......");			
		}				
	}
	public static void main(String[] args) {
		new WebServer().Start();
	}
}

运行截图:
在这里插入图片描述

v2 读客户端的请求

  1. 读客户端的请求。
    在run方法处理客户端请求
    1)获取InputStream对象
    2)使用read方法读取数据,判断如果!=-1,输出
    3)观察打印结果:学习http协议请求头信息格式
  2. 解析请求行:
    1)使用StringBuilder存放
    2)测试:打开浏览器客户端:http://localhost:8080/myweb/index.html
  3. 解析url,并打印输出

WebServer.java

class ClientHandler implements Runnable{
		Socket socket ;
		public ClientHandler(Socket socket) {
			this.socket = socket;
		}
		@Override
		public void run() {
			System.out.println("接收到了客户端请求......");
			try {
				InputStream in = socket.getInputStream();
				StringBuilder builder = new StringBuilder();				
				int d = -1;
				char c1 = 0,c2 = 0;
				while((d = in.read())!=-1) {
					c2 = (char)d;
					//解析第一行
					if (c1==13 && c2 == 10) {//\r\n  13 10
						break;
					}
					builder.append(c2);
					c1 = c2;//存储到前面字符的变量					
					//System.out.print((char)d);// 不写ln,因为在每行后面,有\r\n  13 10
				}
				String str = builder.toString().trim();//trim()去除\r\n
				//System.out.println(str);
				String[] data = str.split(" ");
				System.out.println(data[0]);//请求方式
				System.out.println(data[1]);//URL请求的资源
				System.out.println(data[2]);//协议名称				
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}			
		}				
	}

在这里插入图片描述
运行截图:
在这里插入图片描述

v3 定义HttpRequest类

  1. 定义HttpRequest类。
    1)定义HttpRequest类在com.tedu.http包中
    2)定义变量:method,url,protocol;
    3)定义带参的构造方法HttpRequest(InputStream in)
    4)定义三个变量的get方法
    5)定义方法:parseRquestLine(InputStream in):void
    方法的功能:解析请求行,给三个变量赋值
    在构造方法中调用
  2. 重构WebServer的run方法。
    创建HttpRequest对象,调用get方法打印请求的方法,url,protocl
  3. 测试:打开浏览器客户端:http://localhost:8080/myweb/index.html

HttpServer.java

package cn.tedu.http;

public class HttpRequest {
	private String method;
	private String url;
	private String protocol;
	public HttpRequest(InputStream in) {
		try {
			parseRequestLine(in);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	private void parseRequestLine(InputStream in) throws IOException {
		StringBuilder builder = new StringBuilder();		
		int d = -1;
		char c1 = 0,c2 = 0;
		while((d = in.read())!=-1) {
			c2 = (char)d;
			//解析第一行
			if (c1==13 && c2 == 10) {//\r\n  13 10
				break;
			}
			builder.append(c2);
			c1 = c2;//存储到前面字符的变量
		}
		String str = builder.toString().trim();//trim()去除\r\n
		//System.out.println(str);
		String[] data = str.split(" ");
		this.method = data[0];//请求方式
		this.url = data[1];//URL请求的资源
		this.protocol = data[2];//协议名称		
	}
	public String getMethod() {
		return method;
	}
	public String getUrl() {
		return url;
	}
	public String getProtocol() {
		return protocol;
	}	
}

WebServer.java
在这里插入图片描述

v4 读文件,响应文件到客户端

  1. 在项目中添加目录webapps,并在里面添加一个子目录myweb,然后在其中存放我们定义的页面index.html。
  2. 响应包括两部分,响应头和响应文件
  3. 学习掌握响应头信息
  4. 响应画面到客户端
    1)读文件:通过url File file = new File(“webapps”+request.getUrl());
    2)获取输出流
    3)通过输出流写响应头信息

index.html
在这里插入图片描述
WebServer.java
在这里插入图片描述
运行截图:
在这里插入图片描述


本文链接: http://www.dtmao.cc/news_show_100164.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?