简易网页制作

1.格式  dreamwave
<!DOCTYPE html>
<html >
    <head>
        <meta charset="utf-8">
        <title>中文测试。。。。</title>
    </head>
    <body>
        这里是测试body测试内容。。。
    </body>
</html>

使用一个可以调整格式的软件,后缀为html,可以提示你正确和错误

要选择UTF-8编码,可以先转为utf-8,在使用utf-8

设置网页背景和颜色

<html>
    <head>
        <style>
            body {
                background-image: url(w3s.png);
                    }
        </style>
    </head>
<body>
    <h1>Hello world!</h1>
    <p><a href="">访问 W3School.com.cn!</a></p>
</body>
<html>
    <head>
            <style>
            body {background-color: #E6E6FA;}
            </style>
    </head>
<body>
    <h1>Hello world!</h1>
    <p><a href="https://www.w3school.com.cn">访问 W3School.com.cn!</a></p>
</body>

2.标签 在body内
<h1></h1>双标签 标题 ,加粗,换行  1-6 ---》小
<p></p> 双标签  段落,有换行功效
<hr> 单标签  左到右分割符
<!--    -->注释


3,元素的属性
给元素提供更多的属性,大部分的元素属性
语法:<标签 属性1=参数1 属性2=参数2>
1)align left,right,center
2) bgcolor ,body的属性设置网页的背景色
<body bgcolor="0xff1234" bgcolor="0xff1234">
4,文本元素属性
b 元素 <b>内容</b> 加粗
br 换行<br> 如果是p标签中间有间隔
i元素, 字体倾斜<i></i>
del元素 删除文字<del></del>
strong  强调一段文字,效果类似 b标签
u元素,下划线<u></u>
small元素, 超小字体<small></small>
sub 下标<sub></sub>
sup  上标<sup></sup>
<br>h<sub>2</sub>0
        <br>100m<sup>2</sup>
ruby,拼音,<ruby>二姐 <rt>(er) (jie)<rt></ruby>,可能部分浏览器不支持。
mark 元素 <mark> </mark> 加黄色背景

                <h1 >h1</h1>
                <h3 style="text-align:center">h3</h3>
                <h6 align='right'>h6</h6>
                
                <p><h1 style='color:gray'>随着后<br><br><br>续信息的披露,我们可以了解到更多这次美军部署菲律宾中程导弹的信息。这次部署是美菲“盾牌2024”</h1></p><hr><p>(Salaknib 2024)联合演习的一部分演练内容。4月,美陆军第1多域特遣部队第3野战炮兵团第5营(远程火力营)的“</p>
                
                <b>内容</b><i>字体倾斜</i><del>删除文字</del>
                <u>下划线</u>  <small>超小字体</small><br>h<sub>2</sub>0
                <br>100m<sup>2</sup><ruby>二姐 <rt>(er) (jie)<rt></ruby>
                <mark>加黄色背景 </mark> 

5超链接
5种形式
1,链接外部网站
2,链接本地文件
3,图片链接
4,电子邮件链接打开电子邮件
5,下载文件链接

        <a href="http://www.baidu.com">baidu</a>
        <br><a href="1.html">1111</a>
        <br><a href="1.html"><img src="abc.jpg"></a>
        <br><a href="mailto:123@13.com">contract me</a>
        <br><a href="abc.jpg">下载</a>
上面的方法在打开新网页时,老的网页会关闭
target 属性
_self :当前位置打开 默认值
_blank 新窗口中打开
<a href="http://www.baidu.com" target="_blank">baidu</a>

                <a href="http://www.baidu.com">baidu</a>
                <br><a href="02.html">go 2</a>
                <br><a href="http://www.taobao.com"><img src="1.png"></a>
                <br><a href="mailto:123@13.com">contract me</a>
                <br><a href="1.7z">下载</a>

6 img 单标签
src 图像来源
alt 如果不能正确打开,显示的文字
width, heigh
<img src="abc.jpg" alt="美女" width="100" height="200">
<img src="abc.jpg" alt="美女" width="50%" height="200%">
百分比是相对于网页而言的, 高度百分比无效的

                <img src="1.jpg" alt="美女" width="300" height="200">


    
7列表
有序列,无序序列
自定义列表
无序列表 前面无数字
<ul> 
        <li>列表1</li>
        <li>列表2</li>
        <li>列表3</li>
        <li>列表4</li>
</ul>
有个type属性 文字最前面的符号
disc 黑色实心圆
circle 白色空心圆
square 黑色方块
有序列,前面有数字

<ol>
        <li>列表1</li>
        <li>列表2</li>
        <li>列表3</li>
        <li>列表4</li>
</ol>
其中可以放文字,图片,或链接
有type属性,设置排序使用什么数字
start 开始值,后面的++;

<ul> 
                <li>列表1</li>
                <li>列表2</li>
                <li>列表3</li>
                <li>列表4</li>
</ul>

<ol type='I'>
                <li>列表1</li>
                <li>列表2</li>
                <li>列表3</li>
                <li>列表4</li>
</ol>


8     表格
表格的构成,
    table,外框
    tr 行
    td 列
    <table>
        <tr><td>1-1</td><td>1-2</td><td>1-3</td></tr>
        <tr><td>2-1</td><td>2-2</td><td>2-3</td></tr>
        <tr><td>3-1</td><td>3-2</td><td>3-3</td></tr>
        </table>
        3行 3列
表格的属性
 border 边框粗细
 th,是tr的属性,列标题,自动居中,加粗
 colspan,横向合并单元格,需要 整形参数
    <tr><th colspan="3">name</th></tr> 
表格的合并
rowspan ,列项合并,整数参数

<!DOCTYPE html> 
<html >
        <body >
          <table border ='1' >
                <tr><td>1-1</td><td>1-2</td><td>1-3</td></tr>
                <tr><td>2-1</td><td>2-2</td><td>2-3</td></tr>
                <tr><td>3-1</td><td>3-2</td><td>3-3</td></tr>
                </table>
                
                        <table border ='1' >
                <tr><th colspan="3">1-1</th></tr>
                <tr><td>2-1</td><td>2-2</td><td>2-3</td></tr>
                <tr><td>3-1</td><td>3-2</td><td>3-3</td></tr>
                </table>
                
                                <table border ='1' >
                <tr><th rowspan="3">1-1</th><td>1-2</td><td>1-3</td></tr>
                <tr><td>2-2</td><td>2-3</td></tr>
                <tr><td>3-2</td><td>3-3</td></tr>
                </table>


        </body>
</html>

9 html 实体
用于输出一些特殊的字符
有些特殊的字符不能直接在网页中直接显示的

10,表单    传递参数,数据
<form></form>
    <!-- 表单中重要的字元素 input button -->
<!-- 属性 action,指定表单发送的地址 -->
<!-- 属性 method 发送的方式 get,post -->
<!--get方法 数据会附加到url的后面传递给服务器 默认-->
<!--post,将数据包大包发给服务器,等候服务器来读取 -->
13,input元素,(输入框)他是表单的一个字属性
    指定表单中的内容项,比如输入内容的文本框
    可以指定表单属性,也可以放在表单的外面。
    input元素的属性:
        type,指定输入框的类型,text单行文本,password密码,submit提交按钮,
        reset,重置按键,button按键,普通的按键需要和特定的时间关联。
        image:图片式按键
        hidden:隐藏字段,该内容不显示在页面上,提交其他的一些变量。
        email: 是一个邮箱类型,新特性,可能支持有差异
        required:表示内容必须填写,不然不能提交。
    name:名称,输入内容识别名称,传递参数时候的参数名称
    value: 默认值,输入框默认填入的内容,
    maxlength,指定最大长度
    placeholder,设置提示信息的。

<!DOCTYPE html>
<html >
        <head>
                <meta charset="utf-8">
                <title>登录测试</title>
        </head>
        <body>
                <h1 align='center'>登录 </h1>
                <form action='login'>
                用户名:<input type='text' name='username' required='required' placeholder='请输入微信账号'>
                密码:<input  type='password' name='userpw' required='required' placeholder='qq的密码'>
                <input type='submit'>
                </form>
        </body>
</html>

服务器实例

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <time.h>
#include <fcntl.h>
#include <string.h>
#include <sys/stat.h>
typedef struct sockaddr* (SA);
int send_head(int conn,char* filename)
{
    struct stat st;
    int ret = stat(filename,&st);
    if(-1 == ret)
    {
        return 1;
    }
    char buf[512]={0};
    char *http_cmd[6]={NULL};
    http_cmd[0]="HTTP/1.1 200 OK\r\n";
    http_cmd[1]="Server: MyServer\r\n";
    http_cmd[2]="Content-Type: text/html;charset=utf-8\r\n";
    http_cmd[3]=buf;
    sprintf(http_cmd[3],"Content-Length: %lu\r\n",st.st_size);
    //http_cmd[3]=;
    http_cmd[4]="Connection: closed\r\n";
    http_cmd[5]="Date: Sun, 11 Aug 2024 06:58:38 GMT\r\n\r\n";


    int i = 0 ;
    for(i=0;i<6;i++)
    {
        send(conn,http_cmd[i],strlen(http_cmd[i]),0);
    }
}
int send_file(int conn,char* filename)
{
    send_head(conn,filename);
    int fd = open(filename,O_RDONLY);
    if(-1 ==fd)
    {
        perror("open");
        return 1;
    }
    while(1)
    {
        char buf[4096]={0};
        int rd_ret = read(fd,buf,sizeof(buf));
        if(rd_ret<=0)
        {
            break;
        }
        send(conn,buf,rd_ret,0);
    }
    close(fd);
    return 0;
}
int main(int argc, char *argv[])
{
    //监听套接字
    int listfd = socket(AF_INET,SOCK_STREAM,0 );
    if(-1 ==listfd)
    {
        perror("socket");
        exit(1);
    }
    struct sockaddr_in ser,cli;
    bzero(&ser,sizeof(ser));
    bzero(&cli,sizeof(cli));
    ser.sin_family = AF_INET;
    ser.sin_port = htons(80);
    ser.sin_addr.s_addr =inet_addr("127.0.0.1");

    //man 7 socket 
    int on = 1;
    setsockopt(listfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));
    setsockopt(listfd,SOL_SOCKET,SO_REUSEPORT,&on,sizeof(on));
    int ret = bind(listfd,(SA)&ser,sizeof(ser));
    if(-1 ==ret)
    {
        perror("bind");
        exit(1);
    }
    //建立连接的排队数
    listen(listfd,3);
    socklen_t len = sizeof(cli);
    //通讯套接字
    while(1)
    {   
        int conn = accept(listfd,(SA)&cli,&len);
        if(-1 == conn)
        {
            perror("accept");
            continue;
        }
        char buf[1024]={0};
        int rd_ret = recv(conn,buf,sizeof(buf),0);
        if(rd_ret<=0)
        {
            close(conn);
            //break;
            continue;
        }
        printf("%s\n",buf);


        // GET / HTTP/1.1 
        
       char *method=strtok(buf," ");
       char * url = strtok(NULL," ");
       char * ver= strtok(NULL,"\r");
    
       if(0==strcmp(url,"/"))
       {
            send_file(conn,"./03.html");
       }
       else if (0==strncmp(url+1,"login",5)) //  /login?username=zhagnsan&userpw=123 
       {
            char *username=NULL;
            char * userpw =NULL;
            char * end = NULL;
            username = strchr(url,'=');
            username+=1;
            end = strchr(username,'&');
            *end = '\0';
            userpw = strchr(end+1,'=');
            userpw+=1;

            if(0==strcmp(username,"zhangsan")
               && 0 == strcmp(userpw,"123"))
            {
                send_file(conn,"./01.html");
            }
            else 
            {
            
                send_file(conn,"./04.html"); 
            }
       }

        close(conn);
    }
    close(listfd);
    return 0;
}

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值