手写HttpServerDemo01_准备Server_html基本知识的介绍_html的简单应用_day_35

1.HttpServer的准备阶段:

package Demo01;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
	private ServerSocket server;
	public static final String NEWLINE = "\r\n";
	public static final String BLANK = " ";

	public static void main(String[] args) {
		Server ser = new Server();
		ser.start(9999);
		ser.receive();
	}

	/**
	 * 服务器的启动 可以自己设定服务器的端口号
	 */
	public void start(int port) {
		try {
			server = new ServerSocket(port);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 服务器的启动 服务器的端口号默认为6666
	 */
	public void start() {
		this.start(6666);
	}

	/**
	 * 接收客户端
	 */
	public void receive() {
		try {
			Socket client = server.accept();
			StringBuilder sb = new StringBuilder();// 将接收到的信息处理完的放进这里面
			String message = null;// 接收到的信息

			BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
			while ((message = br.readLine()) != null) {// 循环读取读取出来的东西都放到sb里面
				sb.append(message);// 每次读取一行存进去
				sb.append(NEWLINE);// 换行
			}
			String requestInfo = sb.toString().trim();// trim()是String的方法 所以先调用toString将StringBuilder转为String 去除空格
			// System.out.println(requestInfo);//打印一下看一下效果
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 停止服务器
	 */
	public void stop() {

	}

}

2.HTML的简单介绍:

超文本标记语言(HyperText Markup Language):是一种用于创建网页的标准标记语言,可以用来建立web站点。 

注意:这个一个成对语言的编程

    

这里我们要用<meta charset=utf-8>   来指定一下编码集一般指定为UTF——8   有的是gbk  视情况而定

<html>
	<head>
	<meta  charset=utf-8>
		<title>第一个html</title>
	</head>
	<body>
		<h1>定义一个大标题</h1>
		显示正文的信息
		<p> 定义一个段落 </p>
	</body>
</html>

<html>
	<head>
	<meta  charset=utf-8>
		<title>第一个html</title>
	</head>
	<body>
		<h1>定义一个大标题(一级标题)</h1>
		<h2>这是一个二级标题</h2>
		<hr />  <!--这是一条水平线-->
		<font size = "4">用4号字体显示正文<br>的信息</font>
		<p> 定义一个段落 </p>
	</body>
</html>

效果图如下:

3.HTML的简单应用:

       method:请求方式 get/post  
get: 默认方式,数据量小,安全性不高
post:量大,安全性相对高
action:请求的服务器路径
id:编号,前端区分唯一性 ,js中经常使用
name:名称,后端(服务器)区分唯一性 ,获取值

只要提交数据给后台,必须存在name

<html>
	<head>
	<meta  charset=utf-8>
		<title>第一个表单</title>
	</head>
	<body>
		<pre>
		method:请求方式 get/post  
			get: 默认方式,数据量小,安全性不高
			post:量大,安全性相对高
		action:请求的服务器路径
		id:编号,前端区分唯一性 ,js中使用
		name:名称,后端(服务器)区分唯一性 ,获取值
		只要提交数据给后台,必须存在name
		</pre>
		<form method="post" action="http://localhost:8888/index.html">
			用户名:<input type="text" name="uname" id="uname"/>
			密码:<input type="password" name="pwd" id="pwd"/>
			<input type="submit" value="登录"/>
		</form>
	</body>
</html>
效果如下图:


如果我们在这里使用get他的安全性不高  账号和密码都会在网址的参数后面显示,可以获取到用户名和密码;

如果是post方法我们就没法获取到账号和密码   我们应该用字节流读;

改动后如下:

只是receive改动了一下,改了一下读取方式;

package Demo01;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server2 {
	private ServerSocket server;
	public static final String NEWLINE = "\r\n";
	public static final String BLANK = " ";

	public static void main(String[] args) {
		Server2 ser = new Server2();
		ser.start(8888);
	}

	/**
	 * 服务器的启动 可以自己设定服务器的端口号
	 */
	public void start(int port) {
		try {
			server = new ServerSocket(port);
			this.receive();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 服务器的启动 服务器的端口号默认为6666
	 */
	public void start() {
		this.start(6666);
	}

	/**
	 * 接收客户端
	 */
	private void receive() {
		try {
			Socket client = server.accept();
			//StringBuilder sb = new StringBuilder();// 将接收到的信息处理完的放进这里面
			//String message = null;// 接收到的信息

			//BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
			//while ((message = br.readLine()).length() > 0) {// 循环读取读取出来的东西都放到sb里面
			//	sb.append(message);// 每次读取一行存进去
			//	sb.append(NEWLINE);// 换行
			//}
			//String requestInfo = sb.toString().trim();// trim()是String的方法 所以先调用toString将StringBuilder转为String 去除空格
			//System.out.println(requestInfo);//打印一下看一下效果
			//我们这里直接用字节流进行读取
			byte[] data = new byte[20480];//一次性读取完;
			int length = client.getInputStream().read(data);
			String requestInfo=new String(data,0,length).trim();	
			System.out.println(requestInfo);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 停止服务器
	 */
	public void stop() {

	}

}

猜你喜欢

转载自blog.csdn.net/qq_38053395/article/details/80724101
今日推荐