javaSE_day21—— 服务器v5-v9

v5:定义HttpResponse类

该类用于定义响应页面的相关内容

  1. 定义HTTPResponse类在com.tedu.http包中
  2. 定义变量: OutputStream out; File entity;
    定义setEntity()和getEntity()方法。
  3. 定义构造方法:HttpResponse(OutputStream out)
    功能:初始化out成员变量
  4. 定义方法: println(String line) :void
    功能: 向客户端发送一行字符串
  5. 定义方法sendStatusLine():void
    功能:发送状态行信息
  6. 定义方法:getMimeTypeByEntity():String
    功能:根据实体文件的名字获取对应的介质类型,Content-Type使用的值(常用的几种):根据文件扩展名返回文件的介质类型
  7. 定义方法:sendHeaders()
    功能:响应头信息
  8. 定义方法: sendContent()
    功能:发送响应正文信息
  9. 定义方法:flush() : void
    功能:调用sendStatusLine();sendHeaders();sendContent()

HttpResponse.java:

package cn.tedu.http;

public class HttpResponse {
	OutputStream out;
	File entity;	
	public HttpResponse(OutputStream out) {
		this.out = out;
	}	
	//发送状态行信息
	public void sendStatusLine() {
		String line="HTTP/1.1 200 OK";
		this.println(line);
	}
	//功能:遍历响应头信息
	public void sendHeaders(){
		String contentType="Content-Type:"+getMimeTypeByEntity();
		this.println(contentType);
		String contentLength = "Content-Length:"+entity.length();
		this.println(contentLength);
		this.println("");
	}
	//功能:发送响应正文信息
	public void sendContent() {
		FileInputStream fin;
		try {
			fin = new FileInputStream(this.entity);
			byte[] buffer = new byte[(int) this.entity.length()];
			fin.read(buffer);
			out.write(buffer);
			fin.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}
	//功能:根据实体文件的名字获取对应的介质类型,Content-Type使用的值(常用的几种):根据文件扩展名返回文件的介质类型
	public String getMimeTypeByEntity(){
		//文件的扩展名
		int index = this.entity.getName().lastIndexOf(".");
		String name = this.entity.getName().substring(index+1);
		if("html".equals(name)){
			return "text/html";
		}else if("jpg".equals(name)){
			return "image/jpg";
		}else if("png".equals(name)){
			return "image/png";
		}
		else if("gif".equals(name)){
			return "image/gif";
		}
		return "";
	}
	public void println(String line)  {
		try {
			out.write(line.getBytes());
			out.write(13);
			out.write(10);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}
	//功能:调用sendStatusLine();sendHeaders();sendContent()
	public void flush() {
		this.sendStatusLine();
		this.sendHeaders();
		this.sendContent();
	}
	public File getEntity() {
		return entity;
	}
	public void setEntity(File entity) {
		this.entity = entity;
	}	
}

相当于v4中的webServer:在这里插入图片描述
WebServer.java
在这里插入图片描述

v6:定义HttpContext类

一、在com.tedu.core中添加一个类HttpContext
该类用于定义相关Http协议的内容
比如头信息中Content-Type的值与文件后缀的关系等.

  1. 在com.tedu.core包中定义HttpContext类
  2. 定义两个常量int CR = 13; int LF = 10;
  3. 定义介质的类型静态变量 Map<String,String> mimeTypeMapping;
  4. 定义方法private static void initMimeTypeMapping()
    功能:初始化介质的类型
  5. 定义public static String getContentTypeByMime(String mime)方法
    功能:根据给定的介质类型获取对应的Content-Type的值
  6. 定义初始化的方法public static void init()
    功能:完成HTTPContext初始化的功能
  7. 定义静态块
    功能:HttpContext加载的时候开始初始化

二、在HttpResponse中进行代码重构

  1. 添加一个Map属性,用于保存响应的所有响应头信息.
  2. 添加常用头的设置方法,供外界设置响应头:
    (1)把内容类型添加到头信息中
    (2)把响应文件的长度添加到头信息中
  3. 重新实现sendHeaders方法。
  4. 重构WebServer的run方法。

HttpContext .java:

package cn.tedu.core;
/**
 * 该类用于定义相关Http协议的内容.
	比如头信息中Content-Type的值与文件后缀的关系等.
 * @author Dell
 */
public class HttpContext {
	public static int CR = 13; 
	public static int LF = 10;
	private static Map<String,String> map;
		
	//功能:HttpContext加载的时候开始初始化
	static{
		init();
	}	
	//功能:初始化介质的类型
	private static void initMimeType() {		
		map = new HashMap<String,String>();
		map.put("html", "text/html");
		map.put("jpg", "image/jpeg");
		map.put("gif", "image/gif");
		map.put("png", "image/png");
	}
	//功能:完成HTTPContext初始化的功能
	public static void init() {	
		//1 初始化介质类型映射
		initMimeType();
	}
	//功能:根据给定的介质类型获取对应的Content-Type的值(返回扩展名的媒体类型)
	public static String getContentTypeByMime(String key) {	
		return map.get(key);
	}
}

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

v7:完成HttpRequest中对消息头的解析工作

  1. HttpRequest中使用Map创建一个属性headers,用于保存所有客户端发送过来的消息头信息。
  2. 添加方法parseHeaders,用于解析所有的消息头。
  3. 封装方法readLine()。

HttpRequest.java:
在这里插入图片描述
在这里插入图片描述
测试:
在这里插入图片描述
在这里插入图片描述

v8:完成注册的功能

  1. 重构HttpRequest类
    1)添加成员变量
    //保存服务器的url,不带?的url的register
    private String requestUrl;
    //请求所附带的所有参数
    private Map<String,String> params = new HashMap<String,String>();

    2)定义paresUrl():
    功能完成:判读是否有?,如果有解析出来放到map集合中

    3)在parseRquestLine方法中调用

    4)定义getParameter方法,和getRequestUrl

  2. 重构run方法
    处理注册功能,响应页面到客户端

  3. 定义forward方法,响应视图

  4. 测试:http://localhost:8080/myweb/register.html

register.html
在这里插入图片描述
registerok.html
在这里插入图片描述
HttpRequest.java
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
WebServer.java
在这里插入图片描述
测试结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

v9:解析介质文件web.xml

  1. 重构:HTTPContext类的 initMimeTypeMapping方法
  2. 测试:
    public static void main(String args[]){
    System.out.println(getMimeType(“afp”));
    }

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

测试结果:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值