设计网页录入信息与自己定义server数据接收
需求:设计一个注冊网页用于录入username和登录password。并将数据传入server并显示出来。
1、前言:网页提交的 get 和 post 两种方式。
(1)对于get提交方式,以本文中样例为例。server接收到的完整信息为:
</pre><pre name="code" class="java"><span style="font-size:14px;">GET /? username=admin&password=admin HTTP/1.1(请求头和请求体在一起)
Accept(表示可以接受的类型): application/x-shockwave-flash, image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-cn(表示接收的为中文)
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2)
Accept-Encoding(接收编码): gzip(压缩程序), deflate
Host: 192.168.3.100:10000(server的IP及port号)
Connection: Keep-Alive(保持连接)
</span>
我们发送的实质数据(username=admin&password=666)称为请求体,其他的称为请求头,能够发现get方式是将请求体放在了请求头内部。由于请求头和请求体就像文章的标题和内容一样。标题必然不能有太多数据,而内容数据大小却没有限制。
所以请求头数据容量非常小。一般仅仅有8k,所以假设将请求体放在请求头内部时。不能用于传输图片、音频、视频等大型数据,而放在请求头外部则对数据大小没有限制。
所以能得出 get 方式提交特点为:数据有限制,可是由于放在了请求头,首先被提交。所以提交速度非常快这个和网络传输中的UDP协议(请猛点这里)特点非常类似。
get方式提交另一个缺点就是:被提交的内容会在地址栏中显示。如:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
(2)对于 post 提交方式,以本文中样例为例,server接收到的完整信息为:
<span style="font-size:14px;">POST / HTTP/1.1(我是请求头開始)
Accept: application/x-shockwave-flash, image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: 192.168.3.100:10000
Content-Length: 29
Connection: Keep-Alive
Cache-Control: no-cache(我是请求头结束) username=admin&password=admin(我是请求体) </span>
能够看见,post方式中请求头和请求体是分开的,中间隔了两个空行(说明隔了两个“ / r / n”。这将是后面server提取请求体内容的重要根据) 。由于请求体中的数据大小没有限制。所以post提交方式的特点为:
特点:传输数据大小无限制,可是传输速度慢。并且没有地址栏暴露用户信息的缺陷。
2、设计网页
<span style="font-size:14px;"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> <span style="font-family: Arial, Helvetica, sans-serif;"><!-- 这个页面的头部表示了w3c的规范信息。 --></span> <head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>用户登录</title>
</head>
<body> <form action="http://192.168.3.100:888888" method="post"> //表示将要訪问IP地址为<span style="font-family: Arial, Helvetica, sans-serif;">192.168.3.100的server上port为888888的应用程序,这里设置为post 方式提交</span> <table border="1" align="center" width="40%">
<caption>用户登录</caption>
<tr>
<td>用户名:</td>
<td>
<input type="text" name="username" id="username" /> //文本框用于输入文本
</td>
</tr>
<tr>
<td>密码:</td>
<td>
<input type="password" name="password" id="password" /> //密码框用于输入密码
</td>
</tr>
<tr>
<td>邮箱:</td>
<td>
<input type="text" name="email" id="email" />
</td>
</tr>
<tr>
<td colspan="2" align="center"> //合并两列,格式为居中
<input type="submit" value="登录" /> //提交button,值设为登录
<input type="reset" value="重置" /> //重置button
</td>
</tr>
</table>
</form>
</body>
</html>
</span>
实现网页效果为:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
3、自己定义server(如果我输入的username为admin。password为666)
<span style="font-size:14px;">public class LoginServer {
public static void main(String[] args) throws IOException {
// 创建serverSocket对象,port设置为888888
ServerSocket ss = new ServerSocket(888888);
// 监听client连接
Socket s = ss.accept();
System.out.println("连接成功"); //假设有对象成功连接到server。输出信息提示
// 获取输入流
InputStream is = s.getInputStream();
byte[] bys = new byte[1024]; //用字符数组接收,大小设置为1024字节
int len = is.read(bys); //定义len为每次实际读到的内容长度
String data = new String(bys, 0, len); //由于是post方式提交,所以此处得到的data内容是标题1中post方式提交server得到的完整数据状态
//由于post提交,请求体通过连续两次的\r\n和请求头隔开,而我们须要的数据是请求体。
所以我们获取请求体内容步骤为:
int index = data.indexOf("\r\n\r\n"); //<span style="font-family: Arial, Helvetica, sans-serif;">首先获取连续两次的\r\n的索引位置</span>
String newData = data.substring(index+4); //获得请求体。此时newData实际内容为:<span style="font-family: Arial, Helvetica, sans-serif;">username=admin&password=666</span>
//将请求体分解
String username = getParameter("username",newData); //调用<span style="font-family: Arial, Helvetica, sans-serif;">getParameter方法获取newData中的username内容</span>
String password = getParameter("password",newData); //<span style="font-family: Arial, Helvetica, sans-serif;">调用</span><span style="font-family: Arial, Helvetica, sans-serif;">getParameter方法获取newData中的password内容</span>
String email = getParameter("email",newData); //<span style="font-family: Arial, Helvetica, sans-serif;">调用</span><span style="font-family: Arial, Helvetica, sans-serif;">getParameter方法获取newData中的email内容</span>
//获取输出流。在网页中返回信息
PrintWriter pw = new PrintWriter(s.getOutputStream(),true); //得到打印流对象
pw.println("用户登录成功<br/>"); //在网页中输出登陆成功提示
pw.println("用户名是:<font color=red>"+username+"</font><br/>"); //显示用户注冊名
pw.println("密码是:"+password+"<br/>"); //显示用户注冊密码
pw.println("邮箱是:"+email+"<br/>"); //显示用户注冊邮箱
pw.close(); //关闭打印流对象,由于server须要全天候处于开启状态。所以不关闭socket对象
}
private static String getParameter(String key, String newData) { //自己定义getParameter方法。用于获取请求体中的对象
String[] datas = newData.split("&"); //将数据按&分为两部分并存入datas数组中,当中datas[0]=(username=admin)。datas[1]=(password=666)
for(String data : datas){ //增强for遍历datas数组
//username=admin
String[] keyAndValue = data.split("="); //根据“=”进行数据拆分
if(keyAndValue[0].equals(key)){ //根据传入參数进行匹配
return keyAndValue[1];
}
}
return null; //假设没有则返回null
}
}
</span>
小结:网页数据提交主要有get和post两种方式。其各有利弊。get主要特点为速度快。容量小;post主要特点为速度慢,容量大。另外。在进行数据传送之前,要注意首先保证server已经开启并处于监听状态。
设计网页录入信息与自己定义server数据接收的更多相关文章
- php获取网页header信息的4种方法
php获取网页header信息的方法多种多样,就php语言来说,我知道的方法有4种, 下面逐一献上. 方法一:使用get_headers()函数 推荐指数: ★★★★★ get_header方法最简单 ...
- 在 Apache error_log 中看到多个信息,提示 RSA server certificate CommonName (CN) 与服务器名不匹配(转)
在 Apache error_log 中看到多个信息,提示 RSA server certificate CommonName (CN) 与服务器名不匹配. Article ID: 1500, cre ...
- Python 网页投票信息抓取
最近学习python,为了巩固一下学过的知识,花了半天(主要还是因为自己正则表达式不熟)写了个小脚本来抓取一个网站上的投票信息,排名后进行输出. 抓取的网站网址是http://www.mudidi.n ...
- 斗地主算法的设计与实现--项目介绍&如何定义和构造一张牌
本篇主要讲解斗地主中如何比较两手牌的大小. 友情提示:本篇是接着以下两篇文章就讲解的,建议先看看下面这2篇. 斗地主算法的设计与实现--如何判断一手牌的类型(单,对子,三不带,三带一,四代二等) 斗地 ...
- 使用JavaScript实现录入信息生成名片
首先是布局: 一个大的盒子模型套两个小的盒子模型:左边是录入信息生成界面,右边是名片显示界面. 框架: 这里新建一个css文件,用于外部链接使用装饰 /*最外层div,主框架*/ .frame{ wi ...
- 熟练使用jquery ui / easyui的各种组件设计网页界面
熟练使用jquery ui / easyui的各种组件设计网页界面
- [从源码学设计]蚂蚁金服SOFARegistry 之 LocalDataServerChangeEvent及数据同步
[从源码学设计]蚂蚁金服SOFARegistry 之 LocalDataServerChangeEvent及数据同步 目录 [从源码学设计]蚂蚁金服SOFARegistry 之 LocalDataSe ...
- (Sql Server)数据的拆分和合并
(Sql Server)数据的拆分和合并 背景: 今天遇到了数据合并和拆分的问题,尝试了几种写法.但大致可分为两类:一.原始写法.二.Sql Server 2005之后支持的写法.第一种写法复杂而且效 ...
- C#高级编程四十一天----用户定义的数据类型转换
用户定义的数据类型转换 C#同意定义自己的 数据类型,这意味着须要某些 工具支持在自己的数据类型间进行数据转换.方法是把数据类型转换定义为相关类的一个成员运算符,数据类型转换必须声明为隐式或者显式,以 ...
随机推荐
- 【Android 应用开发】 ActionBar 样式具体解释 -- 样式 主题 简单介绍 Actionbar 的 icon logo 标题 菜单样式改动
作者 : 万境绝尘 (octopus_truth@163.com) 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/3926916 ...
- 利用ajax异步处理POST表单中的数据
//防止页面进行跳转 $(document).ready(function(){ $("#submit").click(function(){ var str_data= ...
- SVN打tag
SVN打tag是一个非经常常使用的功能,要谈打tag,还得从SVN官方推荐的文件夹结构说起.SVN官方推荐在一个版本号库的根文件夹下先建立trunk.branches.tags这三个文件夹 ...
- Gzip压缩优化网站
网站常使用GZIP压缩算法对网页内容进行压缩,然后传给浏览器,以减小数据传输量,提高响应速度.浏览器接收到GZIP压缩数据后会自动解压并正确显示.GZIP加速常用于解决网速慢的瓶颈. 压缩Filter ...
- 2015.05.18,外语,学习笔记-《Word Power Made Easy》 03 “如何谈论不同从业者”
Prefix Person,nous,etc. Practice,etc. Adjective psyche 精神 psychic ['saikik] adj.精神的n.灵媒 -logos 科研 ps ...
- JAVA设计模式之【原型模式】
1.案例一 学生复制 package Prototype; /** * Created by Jim on 2016/10/1. */ public class Student implements ...
- 升级Xcode8后的相机crash问题-IOS10权限问题
当我升级到Xcode8后,启动我的相机项目,直接crash,输出的日志如下: '2016-07-08 16:41:11.268943 project-name[362:56625] [MC] Syst ...
- hdoj--1051--Wooden Sticks(LIS)
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- Ubuntu桌面基础介绍
1. 目录结构和文件系统 ubuntu的文件系统也是一个又层次的树形结构,文件系统的最上层是 / ,表示根目录,所有其他文件和目录都位于跟目录下,在linux中,一切皆为文件,包括硬盘.分区和拔插介质 ...
- KCP kcptun
简介 KCP是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果.纯算法实现,并不负责底层协议(如UDP)的收发,需要使用者 ...