• 网编复习


    网络安全编程期末复习

    第一章 绪论

    • 计算机网络三要素
      • 独立功能的计算机
      • 外围设施(连接设备,传输介质)
      • 网络协议
    • 应用层 表示层 会话层 | 传输层 | 网络层 | 数据链路层 物理层
    • 应用层
    • 传输层
      • tcp udp
    • 网络层
      • icmp igmp ip
    • 链路层
      • arp rarp

    第二章 网络层主要协议

    • 网络层的功能是实现互连网络环境下点到点数据分组的传输,采用无连接的方式。
    • 主要协议
      • IP协议
        • 路由选择、寻址
      • 地址解析协议 ARP
      • 逆地址解析协议 RARP协议
        • ip和物理地址转换
      • 因特网控制报文协议 ICMP
        • 网络控制和差错处理

    • 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.关闭连接:改进的三次握手协议。
      • 用户数据报协议 UDP(User Datagram 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
        可以接收本机网卡上的数据帧或者数据包。
    • 数据存储优先顺序
      • 计算机数据存储有两种字节优先顺序:高位字节优先(称为大端模式)和低位字节优先(称为小端模式,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
      • 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>
    • 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>
    • 伪类:使链接在不同状态下具有不同的样式效果,名称是默认定义好的
      • 语法: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++十分类似,但不像这些语言需要先编译,而是在程序运行过程中才被逐行解释的
    • 代码格式
      • 内嵌式
    <script language=“JavaScript”>   
          //JavaScript语言代码部分
    </script>
    
    • 外挂式
    <script src=“myscript.js”></script>
    
    • 在网页中使用JavaScript时执行顺序与其位置有关
        1. <HEAD></HEAD>标签之间:在显示页面之前,执行JavaScript程序;
        1. <BODY></BODY>标签之间:按照网页内容的顺序依次执行
    • 创建对象: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">&nbsp;</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();
    
  • 相关阅读:
    toj 2819 Travel
    toj 2807 Number Sort
    zoj 2818 Prairie dogs IV
    zoj 1276 Optimal Array Multiplication Sequence
    toj 2802 Tom's Game
    toj 2798 Farey Sequence
    toj 2815 Searching Problem
    toj 2806 Replace Words
    toj 2794 Bus
    css截取字符
  • 原文地址:https://www.cnblogs.com/fzlzc/p/12114304.html
Copyright © 2020-2023  润新知