Web课程设计 - 中南大学主页

中南大学主页 - Shuai-Xie - Github

实验一

一、实验内容

制作一个与中南大学主页类似的页面:

  1. 熟悉html、CSS以及JavaScript使用,完成网页设计。CSS和JS文件单独书写。
  2. 版面排版和内容需基本接近学校主页
  3. 只需完成首页的制作,无需做二级页面
  4. “教育机构”需有类似的弹出窗口菜单
  5. “首页”等菜单需要有类似的弹出菜单

二、实验设计

2.1 head 标签内容

head 标签内通常会由 title,meta,link,script 标签。

  • title 是网页标题栏名称;
  • meta 提供有关页面的元信息,比如作者,页面字符格式等;
  • link 可以链接标题栏要显示的图标:
    images/favicon.ico (icon文件在线生成生成器转化图片)
    link也可以链接css文件路径,自定义的css和bootstrap的css;
  • script 写入自己的 js 文件或者 src 链接的 jQuery 文件。
<head>
    <title>中南大学</title>
    <!-- meta 可提供有关页面的元信息(meta-information)-->
    <meta name="keywords" content="中南大学" charset="utf-8"/>

    <!--标题栏图标-->
    <!--rel, shortcut icon, type-->
    <link href="images/favicon.ico" rel="icon" type="image/x-icon">
    <link href="images/favicon.ico" rel="shortcut icon" type="image/x-icon">  <!--快捷方式的图标-->

    <!--css文件-->
    <link href="css/style.css" rel="stylesheet" type="text/css">
    <link href="css/bootstrap.css" rel="stylesheet">

    <script src="js/jquery-3.2.1.min.js"></script>

</head>

2.2 页面布局

整体页面自上而下分为 3 部分:

绿色框 div class = “top” 页面头部
紫色框 div class = “main” 页面主体
红色框 div class = “foot” 页面尾部

2.2.1 页面头部

左边中南大学矩形 logo,img 标签

右边内容分为3行

  • 第1行:
    未来学生 在校学生 教职员工 校友校董
    包含2个下拉列表(教育机构 研究机构)

  • 第2行:
    信息门户| 中南e行| 邮件系统| 图书馆| 简| 繁| English
    这些都是 a 标签,通过合理地设置字体大小和间距就可以做出这种效果

  • 第3行:
    1个搜索框

通过设置浮动,使得左边的图片和右边的内容显示在一行。

2.2.2 页面主体

主体部分自上而下分为 4 部分:

红色 nav 导航栏包含8个选项
紫色 banner 学校图片海报
蓝色 中南要闻,2个 li 浮动显示
绿色 学生信息查询

2.2.3 页面底部

页面底部蓝色的固定在浏览器底部,如果页面内容足够多,就不用设置 fixed 属性,底部的 bar 自动就在页面底部,效果也不错。

div id = “foot” 对应的CSS

/*底部*/
#foot {
    width: 100%;
    height: 50px;
    padding: 0;
    background: #0f70b4;
    position: fixed;
    bottom: 0;
}

2.3 弹出子菜单

教育机构和首页栏目弹出菜单一样,将子菜单 ul 包括在上一级标签教育机构的 li 下面。

  • 红色箭头指示隐藏的下拉列表 ul class="jyjgli"
  • 绿色箭头指示 ul 的父级标签 li id="eduqlink"

默认情况下 ul 的 display=none,当鼠标 hover 时,display=block

/*教育机构*/
#main_nav li ul.jyjgli {
    position: absolute;
    top: 21px;
    right: 0;
    width: 350px;
    height: 410px;
    padding: 15px 5px 15px 18px;
    background: #396f98;
    border: 1px solid white;
    display: none;
    z-index: 999;
}

/*hover需要上下级*/
/*li:hover ul*/
#main_nav li:hover ul {
    display: block;
}

同样,对于首页部分,也是这样的原理。

  • 红色 ul 对应子菜单
  • 绿色 li 对应父级标签

对应的 css

.dropdown-content {
    display: none; /*隐藏下拉菜单的内容*/
    position: absolute;
    background-color: #f9f9f9;
    list-style: none;
    width: 115px;
    font-size: 14px;
    line-height: 32px;
    font-weight: 100;
}

/*hover设置光标悬停未点击之前的样式*/
.dropdown:hover .dropdown-content {
    display: block;
}

2.4 导航条横向菜单

这个菜单基于 html 最原始的标签 ul 的。ul 默认的内容li时竖直排列的,通过设置 ul 和 li 的 float 等属性使得这些 li 标签横向排列。

对应的 css

  • "#nav对应ul
  • .dropdown对应ul下的li
/*导航栏内容设置*/
#nav {
    width: 943px;
    height: 32px;
    padding: 0 0 0 5px;
    margin: 0;
    list-style: none;
}

/*设置下拉菜单*/
.dropdown {
    float: left;
}

实验二

一、实验内容

制作一个信息查询页面:

  1. 在数据库(任选)中建两个数据表(学生信息表(学号、姓名、班级)和学生成绩表(学号、课程名称、成绩、成绩登记时间)
  2. 页面中输入学生姓名点击搜索即可查询到该学生的所有成绩
  3. 成绩以表格形式显示
  4. 需使用Ajax技术

二、实验设计

2.1 建立数据库

(1)Student 表

-- auto-generated definition
CREATE TABLE Student
(
  sNo   VARCHAR(10) NOT NULL
    PRIMARY KEY,
  sName VARCHAR(32) NOT NULL,
  class VARCHAR(32) NOT NULL
);

表中插入 3 行数据

(2)Grade 表

-- auto-generated definition
CREATE TABLE Grade
(
  no           VARCHAR(10) NOT NULL,
  course       VARCHAR(32) NULL,
  grade        INT(10)     NULL,
  registerTime DATE        NULL,
  CONSTRAINT fk_sno
  FOREIGN KEY (no) REFERENCES csu.Student (sNo)
);

CREATE INDEX fk_sno
  ON Grade (no);

表中插入数据

(3)表间关系

2.2 前端输入框

在前端设置了输入框,输入学生姓名进行查询。

对应 html 代码,采用了 bootstrap 的输入框和按钮样式。

在输入框的下面定了一个空的 table,用于当查询的时候返回内容。

2.3 Ajax 向后端传输数据

<script>
    function postData() {
        $.ajax({
            type: "post",
            url: "HelloForm",
            data: {
                "name": $("#name").val()
            },
            success: function (res) {
//                        alert(res);
                $("#my_table").html(""); // tbody置空
                $("#my_table").append(res); // tbody添加数据
            }
        });
    }
</script>
  • type:post 向后端传递 name 输入框输入的 data
  • url:数据传入的链接:原链接+/HelloFrom
  • data:传递的数据
  • success:成功后进行的操作,jsp 中预留的 table append 数据

初始

查询

查询另一个人

页面没有刷新,效果很不错。

2.4 后端 Servlet 数据查询

在 src 目录下定义了 HelloForm 这个类,主要包括:

  • 数据库属性设定
  • doPost 和 doGet 处理
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Created by shuai
 * on 2017/6/10.
 */
@WebServlet("/HelloForm")
public class HelloForm extends HttpServlet {

    private static final long serialVersionUID = 1;

    // JDBC 驱动名及数据库 URL
    private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    private static final String DB_URL = "jdbc:mysql://localhost:3306/csu"; // 同DataGrip

    // 数据库的用户名与密码,需要根据自己的设置
    private static final String USER = "root";
    private static final String PASS = "shuai";

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 获取输入的学生姓名
        String name = new String(request.getParameter("name").getBytes(), "UTF-8");

        try {
            // 注册 JDBC 驱动器
            Class.forName(JDBC_DRIVER);

            // 打开一个连接
            Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);

            // 执行sql查询
            Statement stmt = conn.createStatement();

//            String sql = "SELECT * FROM Grade WHERE no = \"0902140133\"; ";

            // 注意String要加引号
            String sql = "SELECT * FROM Grade " +
                    "WHERE no = (SELECT sNo FROM Student WHERE sName = \"" + name + "\");";

            // 执行查询得到结果集
            ResultSet rs = stmt.executeQuery(sql);

            // 向jsp页面传递数据
            RequestDispatcher rd = request.getRequestDispatcher("temp.jsp");
            request.setAttribute("data", rs);
            rd.forward(request, response);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

doGet 分为以下几步:

  1. 获取前端输入的学生姓名,request.getParameter("name")
  2. 给 HelloForm 注册 JDBC 驱动器
  3. 打开与 MySQL 数据库的链接
  4. 定义 sql 语句
  5. 执行 sql 查询得到结果集
  6. 将结果集传回给 temp.jsp 页面

2.5 帮助 Ajax 的 temp.jsp

temp.jsp 是一个临时的 jsp 文件,用于将执行 sql 返回的结果集转化成列表项,然后这些内容被 index.jsp 预留的 table 添加,从而在主页面异步加载数据。

<%@ page import="java.sql.ResultSet" %><%--
  Created by IntelliJ IDEA.
  User: shuai
  Date: 2017/6/20
  Time: 18:04
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<tr>
    <th width="25%">学号</th>
    <th width="25%">课程</th>
    <th width="25%">成绩</th>
    <th width="25%">登记时间</th>
</tr>
<%
    ResultSet rs = (ResultSet) request.getAttribute("data");

    // 展开结果集数据库
    try {
        while (rs.next()) {
            String sNo = rs.getString("no");
            String course = rs.getString("course");
            String grade = rs.getString("grade");
            String registerTime = rs.getString("registerTime");

            // 输出数据
            out.println("<tr>");
            out.println("<td>" + sNo + "</td>");
            out.println("<td>" + course + "</td>");
            out.println("<td>" + grade + "</td>");
            out.println("<td>" + registerTime + "</td>");
            out.println("</tr>");

        }
    } catch (Exception e) {
        e.printStackTrace();
    }

%>
Ajax 完成
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容

  • 1、HTML介绍 1 2、Html和CSS的关系 HTML是网页内容的载体。内容就是网页制作者放在页面上想要让用户...
    夏沫xx阅读 1,356评论 0 8
  • 一:在制作一个Web应用或Web站点的过程中,你是如何考虑他的UI、安全性、高性能、SEO、可维护性以及技术因素的...
    Arno_z阅读 1,138评论 0 1
  • HTML需要掌握标签 标签(空格分隔): H5+CSS [TOC] 常用标签 img 注意点 和H系列标签/p标签...
    袁俊亮技术博客阅读 2,045评论 1 8
  • 俞老师好,人与人之间的差距是怎么拉开的?每个人都有一个头脑,两只手、两条腿,但随着时间的推移,即使是同一个社会层次...
    魏文花阅读 242评论 0 0
  • 给用户一个打开app的理由。用户为何要使用我们的产品?(产品定位) 在我们的产品中可以买到货真价实的黄金珠宝商品,...
    雾雨花都阅读 148评论 0 0