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的简单应用:
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() {
}
}