网编复习
Posted fzlzc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网编复习相关的知识,希望对你有一定的参考价值。
网络安全编程期末复习
第一章 绪论
- 计算机网络三要素
- 独立功能的计算机
- 外围设施(连接设备,传输介质)
- 网络协议
- 应用层 表示层 会话层 | 传输层 | 网络层 | 数据链路层 物理层
- 应用层
- 传输层
- tcp udp
- 网络层
- icmp igmp ip
- 链路层
arp rarp
第二章 网络层主要协议
- 网络层的功能是实现互连网络环境下点到点数据分组的传输,采用无连接的方式。
- 主要协议
- IP协议
- 路由选择、寻址
- 地址解析协议 ARP
- 逆地址解析协议 RARP协议
- ip和物理地址转换
- 因特网控制报文协议 ICMP
- 网络控制和差错处理
- 网络控制和差错处理
- IP协议
- IP地址中专门保留了三个区域作为私有地址,用于Intranet内部地址。其地址范围如下:
- 10.0.0.0 ~ 10.255.255.255
- 172.16.0.0 ~ 172.31.255.255
- 192.168.0.0~192.168.255.255
- 私有地址只能在内部网络中使用,只有通过代理服务器才能与Internet通信。
- 点分十进制
- ipv4
- 32位
- 五类地址
- ipv6
- 128
第三章 传输层主要协议
- 概述:
- 实现两个用户进程之间端到端的可靠通信
- 提供通信服务的最高层,因为传输层一下与用户无关
- 用户功能中的最低层,程序员可以调用之下的功能
- 传输层的主要功能
- 按端口号寻址(进程识别)
- 分割与重组数据(数据处理)
- 差错控制和流量控制(服务质量)
- 连接管理
- 数据链路层负责点到点之间的数据通信,传输层负责扩大了的点到点之间的通信,即端到端之间的通信。
- 对数据链路层来说,点与点之间的信道是一条物理链路,而对传输层来说,端与端之间的信道是一通信子网。
- TCP/IP的运输层有两个不同的协议:
- 传输控制协议 TCP(Transmission Control Protocol)
- TCP是面向连接的协议,可以在各种网络之间建立全双工的虚电路连接,实现无乱序、无丢失和无重复的数据传输,它采取了三次握手、两次确认的有效技术,做到了非常可靠。
- 要实现可靠的数据流传输服务,必须解决的问题
- 1.可靠性:
- ①防丢失:确认与重传;
- ②防重复:报文段序号;
- 2.传输效率、流量控制:滑动窗口机制;
- 3.拥塞控制:加速递减与慢启动技术;
- 4.建立连接:三次握手协议;
- 5.关闭连接:改进的三次握手协议。
- 1.可靠性:
- 用户数据报协议 UDP(User Datagram Protocol)
- 无连接
- 不可靠
- 面向报文
- 适用于视频音频传输
- 传输控制协议 TCP(Transmission Control Protocol)
- 三次握手
- syn=1,ack=0,seq=x
- syn=1,ack=1,seq=y,req=x+1
- syn=1,ack=1,seq=x+1,req=y+1
第四章 Socket编程
- 三种套接字
- 流式socket(SOCK_STREAM)
流式套接字提供可靠的、面向连接的通信流;它使用TCP协议,从而保证了数据传输的正确性和顺序性。 - 数据报socket(SOCK_DGRAM)
数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证是可靠、无差错的。 - 原始套接字RAW SOCKET
可以接收本机网卡上的数据帧或者数据包。
- 流式socket(SOCK_STREAM)
- 数据存储优先顺序
- 计算机数据存储有两种字节优先顺序:高位字节优先(称为大端模式)和低位字节优先(称为小端模式,PC机通常采用)。
- Internet 上数据以高位字节优先顺序在网络上传输,需要对这两个字节存储优先顺序进行相互转化。
- htons()、ntohs()、htonl()和ntohl() (s是short,16位,l是long,32位)
- socket编程流程
- 服务器
- 创建套接字socket()
- 将本地IP地址绑定到端口号bind()
- 监听listen()
- 取出队列的第一个连接请求并接受accept()
- 接收rev()
- 发送send()
- 关闭连接close()
- 客户端
- 创建套接字socket()
- 将本地IP地址绑定到端口号bind()
- 与服务器建立连接connect()
- 发送send()
- 接收rev()
- 关闭连接close()
- 地址结构体:struct sockaddr是通用的套接字地址,而struct sockaddr_in则是internet环境下套接字的地址形式,二者长度一样,都是16个字节。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr。一般情况下,需要把sockaddr_in结构强制转换成sockaddr结构再传入系统调用函数中。
struct sockaddr { unsigned short sa_family; /*协议族*/ char sa_data[14]; /*14字节的 协议地址,包含该socket的IP地址和端口号。*/ }; struct sockaddr_in { short int sa_family; /*协议族*/ unsigned short int sin_port; /*端口号*/ struct in_addr sin_addr; /*IP地址*/ unsigned char sin_zero[8]; /*填充0 以保持与struct sockaddr同样大小*/ };
- 服务器
- 各函数主要功能及参数
int socket(int family, int type, int protocol)
:建立一个socket连接,可指定socket类型等信息。- family:协议族
- AF_INET:IPv4协议
- AF_INET6:IPv6协议
- type:套接字类型
- SOCK_STREAM:字节流套接字socket
- SOCK_DGRAM:数据报套接字socket
- SOCK_RAW:原始套接字socket
- 返回值:
- 成功:非负套接字描述符
- 出错:-1
- family:协议族
- sockaddr或sockaddr_in:地址结构体,用于保存所建立的socket地址信息。
- WSADATA:存放windows socket初始化信息;
WSAStartup(MAKEWORD(1,1),&wsaData);
- 第一个参数:版本号;
- 第二个参数用于返回请求的socket版本信息;
- 成功返回0
int bind(int sockfd, struct sockaddr *my_addr, int addrlen)
:该函数是用于将本地IP地址绑定到端口号,若绑定其他IP地址则不能成功。- sockfd: 套接字描述符
- my_addr:本地地址
- addrlen:地址长度
- 返回值:
- 成功:0
- 出错:-1
int listen(int sockfd, int backlog)
:创建一个等待队列,在其中存放未处理的客户端连接请求。- backlog:请求队列中允许的最大请求数,大多数系统缺省值为5
int connect(int sockfd, struct sockaddr *serv_addr, int addrlen)
:该函数在TCP中是用于bind()的之后的client端,用于与服务器端建立连接。- addr:服务器端地址
- addrlen:地址结构体长度
- 返回值:
- 成功:0
- 出错:-1
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
- 返回值:
- 成功:0
- 出错:-1
- 返回值:
int send(int sockfd, const void *msg, int len, int flags)
- msg:指向要发送的数据的指针
- len:数据长度
- flags:一般为零
- 返回值:
- 成功:发送的字节数
- 出错:-1
-int recv(int sockfd, void *buf,int len, unsigned int flags)
- buf:存放接收数据的缓冲区
- 返回值:
- 成功:发送的字节数
- 出错:-1
WSACleanup:解除与Socket库的绑定并且释放Socket库所占用的系统资源。
第五章 应用层主要协议
- 常用协议端口
- http协议端口:80
- https协议端口:443
- ftp协议端口:21
- SMTP协议端口:25
- POP3协议端口:110。
- 域名服务器
- 本地域名服务器
- 根域名服务器
- 授权域名服务器
- 持久连接和非持久连接(HTTP1.1默认的连接方式为持久连接)
- 非持久连接:每个TCP连接只能有一个请求/响应对
- 持久连接:服务器在发出响应后让TCP连接继续打开着。同一对客户/服务器之间的后续请求和响应可以通过这个连接发送。
get post
6.1 Web编程概述
- 常见应用系统的体系结构
- cs结构:客户/服务器(Client/Server)结构
- bs结构:浏览器/服务器(Browser/Server)结构
- html常用标记
- 头部标记
<HEAD>基本描述信息</HEAD>
- 网页标题标记
<TITLE> 标题文字 </TITLE>
- 元信息标记:
- 可重复出现在头部标记中,用来指明本网页的作者、网页制作工具、所包含的的关键字,以及其他一些描述网页信息。
- 创建HTTP响应头,以便让浏览器知道如何去处理这个网页,例如这个网页什么时候过期,隔多少时间自动刷新等。
<META>
标记有name、http-equiv、content三个属性。Name和http-equiv可任选一个与content配合使用。- 设定网页的描述信息:
<meta name=“discription” content=“这是一个商务网站的主页”>
- 声明网页的作者:
<meta name=“author” content=“李程”>
- 声明网页采用的字符集:
<meta http-equiv=“Content-Type” content=“text/html;charset=gb2312”>
- 设定自动刷新间隔秒数:
<meta http-equiv=“refresh” content=“10”>
- 设定网页的描述信息:
<BODY>
标记的属性及其说明- text:页面文字颜色
- bgcolor:页面背景颜色
- background:页面背景图片
- bgproperties:页面背景图像是否随页面滚动
- link:设定默认的链接颜色
- alink:设定鼠标靠近时链接颜色
- vlink:设定已访问的链接颜色
- 标题文字标记:
<Hn align = 对齐方式> 标题文字 </Hn>
- 分段标记:
<P align = 对齐方式> 文字 </P>
- 换行标记:
<br>
,可连续使用多个,多次换行 - 横线标记:
<HR size = 粗细 align = 对齐方式 width = 宽度 color = 颜色 noshade=阴影>
- size的粗细,单位px; noshade:false有阴影,true没有阴影;
- 格式保留标记:
<pre>文本内容</pre>
- 在格式保留标记中的文本将保持原样输出。
- 文字有关的标记
- font字体
- b粗体
- i斜体
- 图像标记:
<IMG src= 图片文件的URL align = 对齐方式 border = 边框宽度 alt = 说明性替代文字 height = 图像高度 width = 图像宽度 hspace = 水平边距 vspace = 垂直边距>
- Src指明图片文件的路径和文件名
- Align有top、middle、bottom、left、right五种值。
- Alt指明图像未下载时的图像说明文字
- 超链接标记:
<A href = URL target=目标窗口>用作链接的文字或图像</A>
- Href:用于指定被链接的文件URL
- Target:用于指定被链接的网页所显示的窗口,取值:
_blank
,_parent
,_self
,_top
- 脚本链接:
<a href=“javascript:脚本函数”>说明文字</a>
- 头部标记
6.2 HTML基础
- HTML表格有关标记
- 表格标记:
<table></table>
- 行标记:
<tr></tr>
- 表头单元格标记:
<th></th>
- 单元格标记:
<td></td>
- 表格标记:
- 表格定义格式
<TABLE align = 对齐方式 bgcolor = 表格背景颜色 background= 表格背景图像 width = 表格宽度 height = 表格高度 border = 边框粗细 bordercolor = 边框颜色 cellspacing = 单元格间距 cellpadding = 单元格边距 >
<TR><TH>…</TH><TH>…</TH>……</TR>
<TR><TD>…</TD><TD>…</TD>……</TR>
<TR><TD>…</TD><TD>…</TD>……</TR>
……
</TABLE>
- 框架定义格式
<FRAMESET cols = 框架列数及各列宽度 rows = 框架行数及各行高度 bordercolor = 边框颜色 frameborder = 框架边框 framespacing = 框架间距>
<FRAME name = 框架名称 target = 目标框架 src = URL border = 边框宽度 bordercolor = 边框颜色>
<FRAME ……>
……
</FRAMESET>
- 表单定义格式
<form >
表单元素
</form>
<form>
标记属性- name:给出表单名称,用于脚本编程;
- method:用来定义服务器表单除了程序从表单中年获得信息的方式
- get方法将数据打包作为URL整体的一部分传递给服务器。
- post方法分离地传递数据给服务器表单处理程序,不需要设置QUERY_STRING环境变量,因此POST有更好的安全性,表单中数据的多少是任意的,因为这些数据从来也不分配到一个变量里。
- action:设置表单处理程序的网络路径和程序名,当用户提交表单时,服务器将执行action属性所设置的程序。
- 输入类型标记:
<input type="" name = "" value="" …>
- type属性,给出输入控件的类型,常用的控件类型有:text,textarea,radio,checkbox,button,image,hidden,password,file,submit/reset
- name属性,设置输入控件的名字,程序需要通过控件名称处理用户输入数据,同时,设置控件名称可以增加HTML代码的可读性。
- value属性,保存用户的输入和选择,服务器通过调用输入区域的value属性值来获得输入控件的数据。另外,用户可以通过value属性来指定输入区域的缺省值 。
- size属性,设置表示文本框的显示长度。
- maxlength属性,maxlength是文本框中输入的有效数据长度。
- 单行文本框输入:
<input type="text" name = "" value=""…>
eg:
<form name="myForm" method="POST" action="/custom/feedback.jsp">
用户账户:<input type="text" name=“myaccount" size="10" value="guest" maxlength="8">
</form>
- 密码文本框输入:
<input type=" password " …>
- 多行文本框输入:
<textarea name=" " rows="" cols="">
数据
</textarea>
- 按钮输入:
<input type="button" value="回前一页" onclick="history.go( -1 );return true;">
- 单选钮输入:
<input type=" radio" >
- name属性,单选扭的名称,一般是若干个radio一组,取相同的name。
- checked属性,用来设置该单选框缺省时是否被选中,相同name的多个radio中只能有一个选择,或都不使用该参数。
- value属性,存储单旋钮的取值,多个具有相同name的单旋钮应该具有不同的value。
<form name="myForm" method="POST" action="/custom/feedback.jsp"> 性别: <input type="radio" name="gender" value="Female">女性 <input type="radio" name="gender" value="Male" checked>男性 <br><br> 学历: <input type="radio" name="degree" value="Bachelor" checked>学士 <input type="radio" name="degree" value="Master">硕士 <input type="radio" name="degree" value="Doctor">博士 </form>
- 复选框输入:
<input type=" checkbox " …>
- name属性,name为复选框的名称,便于程序获取用户输入
- value属性,每一个checkbox 必须有一个value,当复选框选中时,value值便会传到表单的action属性指定的程序中。
- checked属性,用来设置该复选框缺省时是否被选中。
<form name="myForm" method="POST" action="/progs/feedback.jsp">
兴趣爱好:<br><br>
<input type="checkbox" name="intrests01" value="Sports" checked>体育
<input type="checkbox" name="intrests02" value="Music">音乐
<input type="checkbox" name="intrests03" value="Arts">文学
<input type="checkbox" name="intrests04" value="Others" checked>其它
</form>
- 复选列表框输入
- name属性,name为下拉式列表控件名称,便于程序获取用户输入。
- size属性,下拉式列表的高度,缺省时值为1,若没有设置(加入)multiple属性,显示的将是一个弹出式的列表框。若使用此参数则不会有PopUp效果。如果小于可选的项目数量,则出现垂直滚动条。
- multiple属性,指定是否可以多选。multiple属性不用赋值,直接加入
<select>
标记中即可使用,加入了此属性后列表框就成了可多选的了。
<select name="" size="">
<option value="">…</option>
<option value="">…</option>
… …
</select>
- 隐藏元素:
<input type="hidden" name=" " value=" "…>
- 在一个表单中,可以定义隐藏表单元素,它在网页上并不显示,不需要用户输入,主要目的是随表单一起传给表单处理程序一个特定的值,用于为网页处理程序传送数据。
- 文件上传:
<input type="file" name=" " size=" " accept=" " >
- name属性为控件名称,
- size属性显示文本框长度。
- Accept属性设置上载文件过滤,即点击“浏览”按钮时,只显示指定文件类型的文件列表。
- 表单提交标记:
<input type=“submit”…>
- 重填按钮:
<input type="reset"…>
- name属性,这和其它控件属性不同,在提交表单中,name可以指定一个函数,需要和form标记中action属性的程序配合。一般情况下不需要name属性。
- value属性,提交按钮的显示名字,一般为“确定”、“提交”等易于理解的名字
- Onclick事件属性。
eg:
<form method="POST" action=“xxxxxxxxx”>
<input type="submit" value="提交" name="B1">
<input type="reset" value="重置" name="B2">
</form>
- 例子:使用form计算阶乘
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>A simple example for Form</title>
<script language="javascript">
var calcOnly = false;
function fact(n)
{
if (n==0)
return 1;
else
return n*fact(n-1);
}
function calcFact(n)
{
var res;
res=fact(n);
document.myForm.result.value = res;
calcOnly=true;
document.myForm.n.focus();
}
</script>
</head>
<body>
<p align="center"><font size="5">使用表单示例</font>
</p><hr>
<form name="myForm">
<div align="center">
<table border="1" cellpadding="0" width="303" height="62">
<tr>
<th colspan="3" height="26" width="292" bgcolor="#C0C0C0">
<p align="center">计算n的阶乘</p></td>
</tr>
<tr>
<td>输入n<input type="text" name="n" size="6" onChange="calcFact(this.value)">
</td>
<td><input type="button" value="阶乘等于" name="equ" onClick="calcFact(n.value)">
</td>
<td><input type="text" name="result" size="13"
onChange="if (calcOnly) { alert('This is a calculated field.');}">
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
- 层次块标记div:
<div>…</div>
- 定义网页上的一个矩形块,中间可以包含引起行中断的标记,如
标记等。
- Id属性:用于标记一个
块,以便引用该块。- style属性:
和没有默认的显示样式,必须使用style属性和class样式类定义图层块的位置、大小、显示属性等。<div id =" " style =" "> </div>
- 例子:定义div块并进行平滑移动
<html> <head> <title>Moving Div Sample</title> <script language="javascript"> var movingID = null; var scrolling = false; function startMove() { var left = eval(div1.style.left.replace("px","")); if (left <document.body.scrollWidth-150) div1.style.left = left+1; else div1.style.left =10; movingID = setTimeout("startMove()",1); } function stopMove() { clearTimeout(movingID); } </script> </head> <body onDblClick = "startMove()" onMouseDown="stopMove()"> <div id="div1" style="visibility:visible; position:absolute; left:10; top:10; z-index:1;"> <table bgColor ="#ffffcc" border = "1" cellPadding ="0" cellSpacing = "0"> <tr> <td>Div moving....</td> </tr> </table> </div> <p>双击鼠标,块开始从左向右移动</p> <p>单击鼠标,块停止移动</p> </body> </html>
- 在行内定义一个区域,也就是一行内可以被划分成好几个区域,从而实现某种特定效果。
- 和标记相比,在CSS定义中属于一个行内元素,而是块级元素
eg: <html> <script> function setspan(id) { if (id==1) a.innerText="更新文本内容…"; if ( id==2) a.innerHTML="<font color=red size=7>更新html代码</font>" } </script> <body> <a href=javascript:setspan(1)>更新span内容</a></br> <a href=javascript:setspan(2)>更新html代码</a></br> <span id=a></span> </body> </html>
- 例子:综合使用JavaScript+DIV+SPAN+Form
<html> <head> <script language="javascript"> function check() { var checked_num=0; var length=document.form1.answer.length; for(i=0;i<length;i++) { if(document.form1.answer[i].checked) checked_num++; } return checked_num; } function show() { var num=check(); result.innerHTML ="你已经选择了:"+"<font color=red>"+num;+"</font>" } function mysubmit() { var checked_num=check(); if (checked_num>3) alert("您选择了超过三种兴趣"); else form1.submit(); } </script> </head> <body> <form action="myformsave.jsp" method="post" name="form1"> <table align="center"> <tr> <td> <input type="checkbox" name="answer" value="1" onclick="javascript:show();">兴趣1 <input type="checkbox" name="answer" value="2" onclick="javascript:show();">兴趣2 <input type="checkbox" name="answer" value="3" onclick="javascript:show();">兴趣3 <input type="checkbox" name="answer" value="4" onclick="javascript:show();">兴趣4 </td> <tr> <td align="center"> <input type="button" value="提交" class="menu" onClick="mysubmit()"> </td> </tr> </table> </form> <hr> <div id="result"></div> </body> </html>
6.3 CSS
- 三种样式表
- 内嵌样式(Inline Style)
- 将STYLE属性直接加在超文本标记内;
- 内部样式表(Internal Style Sheet)
- 将样式规则写在head中的标签里
- 外部样式表(External Style Sheet)
- 引入方法:
<link REL=“stylesheet” TYPE=“text/css” HREF=“home.css”>
<STYLE TYPE=“text/css”>
@import url(home.css);
</STYLE>
- 引入方法:
- 内嵌样式(Inline Style)
- CSS基本语法:
selector {property: value}
- 标记选择符:
p {font-family: “sans serif”}
- 类选择符:让相同的标记具有不同的样式,故而优先级高于标记选择符
- CSS中定义:
p.left{text-align: left}
p.center{text-align: center}
- 页面中调用:
<p class=“left”>段落文字左对齐。</p>
<p class="center">段落文字居中。</p>
- CSS中定义:
- 伪类:使链接在不同状态下具有不同的样式效果,名称是默认定义好的
- 语法:
selector: pseudo-class {property: value}
伪类的取值:
- 注意:在CSS定义中,a:hover必须被置于a:link和a:visited之后才是有效的。同时,a:active必须被置于a:hover之后也才是有效的。伪类名称对大小写不敏感。
- 语法:
- ID选择符:定义ID选择符时在ID名称前面加一个“#”号,有如下两种应用:
- (1) 在“#”号前指定标记名,只能应用于指定标记中具有此ID的元素。
- (2) 以“#”号开头,可应用于所有具有此ID的元素。
- CSS中定义:
#one{color:#FF0000;}
#two{color:#000000;}
- 页面中调用:
<p id="one">ID选择符1</p>
<p id="two">ID选择符2</p>
- CSS继承
- (1) 外部的元素样式会保留下来继承给该元素。
- (2) 当样式表继承遇到冲突时,以最后定义的样式为准。
- (3) 不同的选择符定义相同的元素时,其优先级次序依次从高到低为行内选择符、ID选择符、类选择符、标记选择符。除非使用!important改变提升某样式的优先权。
- eg:
P{color :#FF0000 !important}
- eg:
<h1 class=“green yellow”>这里以前一个为准</h1>
- 常用CSS属性
- 字体属性
- color:字体颜色
- font-family:字体名称
- font-size:字体大小
- font-style:字体风格,italic斜体
- font-weight:字体粗细
- 文本属性
- direction:设置文本方向
- text-align:设置文本对齐方向
- text-decoration:文本修饰属性,下划线之类的
- text-indent:文本缩进属性,设置首行缩进
- text-transform:控制元素中的字母,大小写
- 颜色和背景属性
- background-color:背景颜色
- 字体属性
6.4 Javascript编程技术
- 概述
- JavaScript是一种脚本编写语言,采用小程序段的方式实现编程。其基本结构形式与C、Java、C++十分类似,但不像这些语言需要先编译,而是
在程序运行过程中才被逐行解释的
。
- JavaScript是一种脚本编写语言,采用小程序段的方式实现编程。其基本结构形式与C、Java、C++十分类似,但不像这些语言需要先编译,而是
- 代码格式
- 内嵌式
<script language=“JavaScript”> //JavaScript语言代码部分 </script>
- 外挂式
<script src=“myscript.js”></script>
- 在网页中使用JavaScript时执行顺序与其位置有关
- 1) 在和标签之间:在显示页面之前,执行JavaScript程序;
- 2) 在和标签之间:按照网页内容的顺序依次执行
- 创建对象:
var Object1=new Object(parameters table);
- 动态增删表格
<html> <head> <script language="javascript"> var row_index=0; //建立一个函数addRow()用于建立新的一行 function addRow(){ row_index++; //新增一行赋给变量new_row,表示建立了一个tr var new_row=Table1.insertRow(Table1.rows.length); //给tr元素设置属性,参数1表示属性名(id),参数2表示该属性的值 new_row.setAttribute("id", "row"+row_index); //新增一列赋给变量new_col,表示建立了一个td var new_col=new_row.insertCell(0); //给列里赋值 new_col.innerHTML="<input type='text'name='name"+row_index+"'size=10>"; var new_col=new_row.insertCell(1); new_col.innerHTML="<input type='text'name='age"+row_index+"'size=2>"; var new_col=new_row.insertCell(2); new_col.innerHTML="<select name=‘sex"+row_index+"'><option value='男'>男</option><option value='女'>女</option></select>"; var new_col=new_row.insertCell(3); new_col.innerHTML="<input type='text' name='phone"+row_index+"' size=10>"; var new_col=new_row.insertCell(4); new_col.innerHTML="<input type='text' name='spec"+row_index+"' size=10>"; var new_col=new_row.insertCell(5); new_col.innerHTML="<input type='button' value='删除此行' onclick="delete_row('row"+row_index+ "')">"; } function delete_row(rname){ //函数delete_row用于删除一行 var i; i=Table1.rows(rname).rowIndex; if (confirm('确定删除第'+i+'行?')) Table1.deleteRow(i); } </script> </head> <body> <table border=1 id="Table1" style="text-align:center"> <tr> <td width="84">姓名</td> <td width="35">年龄</td> <td width="44">性别</td> <td width="84">电话</td> <td width="84">学历</td> <td width="68"> </td> </tr> </table> <br/> <input type="button" value="增加一行" onclick="javascript:addRow()"> </body> </html>
6.5 服务器编程—Servlet
- HTTP请求消息
GET /somedir/page.html HTTP/1.1 Host:www.besti.edu.cn Connection:close User-agent:Mozilla/4.0 Accept-language:zh-cn POST /HTTP/1.1 Host: www.wrox.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1 Content-Type: application/x-www-form-urlencoded Content-Length: 40 Connection: Keep-Alive user=zhangsan&password=lisi
- Servlet概述
- 定义:Servlet 是一个 Java程序,是在服务器上运行以处理客户端请求、业务逻辑并做出响应的程序
- 需要运行在服务器端
- 需要Web容器的支持
- Java编写
- Servlet代码结构
//初始化方法 public void init() throws ServletException { } //处理HTTP Get请求 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } //处理HTTP Post请求 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } //销毁方法 public void destroy() { super.destroy(); }
- 前端中method使用get方法提交,则使用servlet中的doGet()方法,相应的,还有doPost()方法。
- web.xml的配置
<web-app> <servlet> //声名servlet对象 <servlet-name> HelloServlet </servlet-name> //自行定义 <servlet-class> y2javaee.sg.ch02.HelloServlet </servlet-class> //路径,要有完整的包名.类名 </servlet> <servlet-mapping> //映射servlet <servlet-name> HelloServlet </servlet-name> //与上面定义的相同 <url-pattern> /HelloServlet </url-pattern> //与action相同,在url中体现 </servlet-mapping> </web-app>
- 一个servlet可以使用多个url-pattern规则,每个
标签代表1个匹配规则 - 精确匹配:
中配置的项必须与url完全精确匹配 - Servlet使用过程
- 前端配置表单时声名一个method和action,在用户完成填写后提交给后台;
- 在web.xml的
<servlet-mapping>
中查找匹配的<url-pattern>
- 再根据
<url-pattern>
的<servlet-name>
,找到有相同<servlet-name>
的<servlet-class>
- 然后根据路径执行这个指定的java程序。
6.6 JDBC数据库编程
- JDBC开发流程
- 加载JDBC驱动程序;
Class.forName("com.mysql.cj.jdbc.Driver");
- 建立DB连接;
Class.forName("com.hxtt.sql.access.AccessDriver").newInstance(); String url = "jdbc:Access:////C:/Database1.mdb"; String uname = ""; String password = ""; Connection conn = DriverManager.getConnection(url, uname, password);
- 创建SQL语句;
- PreparedStatement与Statement的区别:PreparedStatement是预编译的,由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象
String sql = "select * from Account"; Statement stmt = conn.createStatement(); 或 PreparedStatement pstmt = conn.prepareStatement();
- 执行SQL语句;
ResultSet rs=stmt.executeQuery(sql);
- executeQuery对数据库进行查询;
- executeUpdate对数据库进行增、删、改;
- 得到数据库结果;
String dbUserName = rs.getString("userID"); String dbPassWord = rs.getString("password");
- 断开连接
Stmt.close(); conn.close();
- 和
以上是关于网编复习的主要内容,如果未能解决你的问题,请参考以下文章
- Id属性:用于标记一个
- 定义网页上的一个矩形块,中间可以包含引起行中断的标记,如