Javaweb基础
1.web概念概述
1.1 Javaweb
使用Java语言开发基于互联网的项目
1.2 软件架构
C/S架构:Client/Server 客户端/服务器端
在用户本地有一个客户端程序,在远程有一个服务器端程序
如:QQ,微信,支付宝等
优点:用户体验好
缺点:开发、安装、部署、维护 麻烦
B/S架构:Browser/Server 浏览器/服务器端
只需要一个浏览器,用户通过不同网址(URL:统一资源定位器),客户访问不同的服务器端程序
优点:开发、安装、部署、维护 简单
缺点:如果应用过大,用户体验可能受到影响
对硬件需求过高
1.3 B/S架构详解
资源分类:
-
静态资源
使用静态网页技术发布的资源
特点:
所有用户访问,得到的结果一样
如:文本,图片,音频,视频,HTML,css,JavaScript
如果用户请求的是静态资源,那么服务器会直接将静态资源发送给浏览器。浏览器中内置了静态资源的解析引擎,可以展示静态资源
-
动态资源
使用动态网页技术发布的资源
特点:
所有用户访问,可能得到的结果不一样。
如:jsp,servlet,php,asp…
如果用户访问的是动态资源,那么服务器会执行动态资源,转换为静态资源,再发送给浏览器
我们要学习动态资源,必须先学习静态资源
静态资源:
- HTML:用于搭建基础网页,展示页面内容
- CSS:用于美化页面,布局页面
- JavaScript:控制页面的元素,让页面有一些动态效果
2.HTML概述
2.1 HTML定义
HTML(Hyper Text Markup Language):超文本标记语言
HTML是用来写网页的,是设计页面的基础
文本:相当于记事本里写的文字,展示信息
超文本:超越了文本仅仅展示信息的功能范畴。泛指:图片、有样式的文字、点击能跳转页面的文字等
语言:工具
标记:标签
HTML是由标签所组成的语言,能展示超文本效果
标记语言不是编程语言
2.2 HTML案例
步骤:
- 创建文件,后缀名为html或htm
- 用记事本打开,并且编写文字
- 用浏览器打开,例如:火狐或IE等
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<font color="red">hello world</font>>
</body>
</html>
2.3 HTML语言特征
格式:
<html>
<head>
<title>标题</title>
</head>
<body>需要展示给用户看的信息</body>
</html>
< html>标签就相当于Java类的大括号
< head>中存放的都是网页的说明性内容,例如:标题等
HTML文件扩展名为html或者htm。htm是老的命名规范,html是新的
HTML文件是由浏览器直接解析执行,无需编译,直接由上到下依次解析执行
HTML标签通常由开始标签和结束标签组成,例如:< font>内容体< /font>
HTML没有内容的标签称为空标签。仅由一个标签组成,例如< br/> 自关闭
HTML标签不区分大小写,为了方便阅读,建议使用小写
HTML标签是有属性的,格式为:属性名=“属性值”,属性值用引号(单引号、双引号)引起
HTML标签建议包裹嵌套,不建议交叉嵌套
2.4 标签学习
-
文件标签:构成html最基本的标签
- html:html文档的根标签
- head:头标签。用于指定html文档一些属性,引入外部资源
- title:标题标签
- body:体标签
- <! doctype html>:html5中定义该文档是html文档
-
文本标签:和文本有关的标签
-
注释:< !-- 注释内容 -->
-
<h1> to <h6>:标题标签,字体大小逐渐递减
-
<p>:段落标签
-
<br>:换行标签
-
<hr>:展示一条水平线 属性: color:颜色 width:宽度 size:高度 align:对齐方式(默认居中center,左对齐left,右对齐right)
-
<b>:字体加粗
-
<i>:字体斜体
-
<font>:字体标签 属性: color:颜色 size:大小 face:字体 属性定义: color: 1.英文单词:red,green,blue 2.rgb(值1,值2,值3):值的范围:0~255 如:rgb(0,0,255) 3.#值1值2值3:值的范围:00~FF之间 如:#FF00FF width: 1.数值:width="20",数值的单位,默认是px(像素) 2.数值%:占比相对于父元素的比例
-
<center>:居中标签
<!DOCTYPE html> <html lang="ch"> <head> <meta charset="UTF-8"> <title>文本标签</title> </head> <body> <!-- 注释内容 --> <!-- br 换行 --> 白日依山尽,<!--<br/>--><br> 黄河入海流。<br> <!-- 标题标签--> HTML标题标签<br> <h1>HTML标题标签</h1> <h2>HTML标题标签</h2> <h3>HTML标题标签</h3> <h4>HTML标题标签</h4> <h5>HTML标题标签</h5> <h6>HTML标题标签</h6> <!--段落标签--> <p> 这是一个有意思的html段落,让你眼界大开,进入新世界。这是一个有意思的html段落,让你眼界大开,进入新世界。这是一个有意思的html段落,让你眼界大开,进入新世界。这是一个有意思的html段落,让你眼界大开,进入新世界。 </p> <p> 这是一个有意思的html段落,让你眼界大开,进入新世界。 </p> <p> 这是一个有意思的html段落,让你眼界大开,进入新世界。 </p> <!--hr 显示一条水平线--> <hr color="red" align="left" width="200" size="10"> <hr> <!--加粗--> 白日依山尽<br> <b>白日依山尽</b><br> <!--斜体--> <hr> 白日依山尽<br> <i>白日依山尽</i><br> <hr> <!--字体标签--> <font color="red" size="20" face="楷体">白日依山尽</font><br> <font color="rgb(20,254,25)" size="18" face="楷体">白日依山尽</font><br> <font color="#0000ff" size="18" face="楷体">白日依山尽</font><br> <hr color="red" align="left" width="300" size="10"> <hr color="red" align="left" width="50%" size="10"> <!--center居中标签--> <center> <font color="#0000ff" size="18" face="楷体">白日依山尽</font><br> </center> </body> </html>
-
-
图片标签
-
<!-- <img src="image/image01.jpg" width="100%" sizes="100%" align="center"/><br> 相对路径 以.开头的路径 ./:代表当前目录 例如:./image/1.jpg ../:代表上一级目录 -->
-
-
列表标签
- 有序列表
- ol:
- li:
- 无序列表
- ul:
- li:
- 有序列表
-
链接标签:
-
< a>:< a href="www.baidu.com">点我< /a> <!-- target="_self" 在本页面打开链接(默认) target="_blank" 新建一个页面打开链接 -->
-
a:定义一个超链接
-
属性:
href:指定访问资源的URL(统一资源定位符)
target:指定打开资源的方式
_self:默认值,在当前页面打开
_blank:在空白页面打开
-
-
-
块标签:div和span
- span:文本信息在一行展示 行内标签 内联标签
- div:每个div占一整行 块级标签
-
语义化标签:html5中为了提高程序可读性,提供了一些标签
- header:页眉
- footer:页脚
-
表格标签:
- table:定义一个表格
- width:宽度
- border:边框
- cellpadding:定义内容和单元格的距离
- cellspacing:定义单元格之间距离。如果定义为0,则单元格的线会合为一条
- bgcolor:背景色
- align:对齐方式
- tr:定义行
- bgcolor:背景色
- align:对齐方式
- td:定义单元格
- colspan:合并列
- rowspan:合并行
- th:定义表头单元格
- caption:表格标题
- thead:表示表格的头部分
- tbody:表示表格的体部分
- tfoot:表示表格的脚部分
- table:定义一个表格
2.5 简单案例
案例1:设计网页如下:
代码如下:
<!DOCTYPE html>
<html lang="ch">
<head>
<meta charset="UTF-8">
<title>公司简介</title>
</head>
<body>
<h1>公司简介</h1>
<hr color="#f87842">
<p>
<font color="red">HTML</font>的全称为<b><i>超文本标记语言</i></b>,是一种标记语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。
</p>
<p>
超文本是一种组织信息的方式,它通过超级链接方法将文本中的文字、图表与其他信息媒体相关联。这些相互关联的信息媒体可能在同一文本中,也可能是其他文件,或是地理位置相距遥远的某台计算机上的文件。这种组织信息方式将分布在不同位置的信息资源用随机方式进行连接,为人们查找,检索信息提供方便。
</p>
<p>
HTML的英文全称是 Hyper Text Markup Language,即超文本标记语言。HTML是由Web的发明者 Tim Berners-Lee和同事 Daniel W. Connolly于1990年创立的一种标记语言,它是标准通用化标记语言SGML的应用。用HTML编写的超文本文档称为HTML文档,它能独立于各种操作系统平台(如UNIX, Windows等)。使用HTML,将所需要表达的信息按某种规则写成HTML文件,通过专用的浏览器来识别,并将这些HTML文件“翻译”成可以识别的信息,即现在所见到的网页。
</p>
<hr color="#f87842">
<p>
<center>
<font color="#a9a9a9" size="3" face="楷体" >©2021 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号</font>
</center>
</p>
</body>
</html>
案例2:设计网页如下:
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>学生信息表</title>
</head>
<body>
<table width="50%" align="center" border="1" cellspacing="0">
<caption>学生成绩表</caption>
<tr align="center">
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>成绩</th>
</tr>
<tr align="center">
<td>1</td>
<td>小龙女</td>
<td>女</td>
<td>100</td>
</tr>
<tr align="center">
<td>2</td>
<td>杨过</td>
<td>男</td>
<td rowspan="2">90</td>
</tr>
<tr align="center">
<td>3</td>
<td>金轮法王</td>
<td>男</td>
</tr>
<tr align="center">
<td>总成绩</td>
<td colspan="3">190</td>
</tr>
</table>
</body>
</html>
案例3:旅游网站首页
1、确定使用table来完成布局
2、如果某一行只有一个单元格,则使用< tr>< td>< /td>< /tr>
3、如果某一行有多个单元格,则使用嵌套table
<tr>
<td>
<table></table>
</td>
</tr>
2.6 表单标签
表单:用于采集用户输入数据的。用于和服务器进行交互
使用的标签:form
form:用于定义表单的。可以定义一个范围,范围代表采集用户数据的范围
属性:
action:指定提交数据的URL
method:指定提交方式
分类:一共7种,2种常用
get:
1.请求参数会在地址栏中显示,会封装到请求行中
2.请求参数大小是有限的
3.不太安全
post:
1.请求参数不会在地址栏中显示,会封装在请求体中(HTTP协议后讲解)
2.请求参数大小没有限制
3.较为安全
表单项中的数据想要被提交,必须指定其name属性
表单项标签:
input:可以通过type值,改变展示的样式
type属性:
text:文本输入框,默认值
placeholder:指定输入框的提示信息,当输入框内容发生变化,会清空提示信息
password:密码输入框
radio:单选框
注意:
1、要想使多个单选框实现单选效果,则多个单选框name属性值必须一致
2、一般会给每个单选框提供value值,指定其被选中后提交的值
3、checked属性,可以指定默认值
checkbox:复选框
注意:
1、一般会给每个单选框提供value值,指定其被选中后提交的值
2、checked属性,可以指定默认值
file:文件选择框
hidden:隐藏域,用于提交一些信息
按钮:
submit:提交按钮,可以提交表单
button:普通按钮
image:图片提交按钮
src属性指定图片路径
label的for属性值一般会和input的id属性值对应。如果对应了,则点击label区域,会让input输入框获取焦点
select:下拉列表
子元素:option 指定列表项
textarea:多行文本标记(文本域)
cols:指定列数,指定每一行有多少个字符
rows:默认多少行
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>表单项标签</title>
</head>
<body>
<form action="#" method="get">
<label for="username">用户名:</label>
<input type="text" name="username" id="username" placeholder="请输入用户名"> <br>
密码:<input type="password" name="password" placeholder="请输入密码"> <br>
性别:<input type="radio" name="sex" value="男" checked>男
<input type="radio" name="sex" value="女"> 女 <br>
爱好:<input type="checkbox" name="hobby" value="movie"> 电影
<input type="checkbox" name="hobby" value="music"> 音乐
<input type="checkbox" name="hobby" value="game"> 游戏
<input type="checkbox" name="hobby" value="shopping"> 购物
<br>
图片:<input type="file" name="filename">
<br>
隐藏域:<input type="hidden" name="id" value="aaa" >
<br>
取色器:<input type="color" name="color">
<br>
日期:<input type="date" name="brithday">
<br>
生日:<input type="datetime-local" name="datetime">
<br>
邮箱:<input type="email" name="email">
<br>
年龄:<input type="number" name="age">
<br>
省份:<select name="provice">
<option>--请选择--</option>
<option value="1">北京</option>
<option value="2">上海</option>
<option value="3" selected>成都</option>
</select>
<br>
文本域:<textarea name="text" cols="30" rows="5"></textarea>
<br>
<input type="submit" value="登录">
<input type="button" value="按钮">
<input type="image" src="../image/image_icon01.png">
</form>
</body>
</html>
显示效果:
2.7 简单案例
使用所学表单知识编写代码设计简单注册页面,如下:
实现如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册信息</title>
</head>
<body>
<table border="1" align="center" width="400">
<tr>
<td>用户名</td>
<td><input type="text" name="username" placeholder="请输入用户名"></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="password" placeholder="请输入密码"></td>
</tr>
<tr>
<td>Email</td>
<td><input type="email" name="email" placeholder="请输入Email"></td>
</tr>
<tr>
<td>姓名</td>
<td><input type="text" name="username" placeholder="请输入真实姓名"></td>
</tr>
<tr>
<td>手机号</td>
<td><input type="text" name="username" placeholder="请输入手机号"></td>
</tr>
<tr>
<td>性别</td>
<td>
<input type="radio" name="sex"> 男
<input type="radio" name="sex"> 女
</td>
</tr>
<tr>
<td>出生日期</td>
<td><input type="date" name="birthday"></td>
</tr>
<tr>
<td>验证码</td>
<td>
<input type="text" name="text">
<img src="../image/image_yan01.jpg" width="50">
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="regist" value="注册">
</td>
</tr>
</table>
</body>
</html>
3.CSS
3.1 概念
层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。
CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力
层叠:多个样式可以作用在同一个html的元素上,同时生效
3.2 优点
1、功能强大
2、将内容展示和样式控制分离
降低耦合度。解耦
让分工协作更容易
提高开发效率
3.3 CSS使用
css与html结合方式:
-
内联样式
- 在标签内使用style属性指定css代码 例如:< div style=“color: red;”>helloworld< /div>
- 不推荐使用
-
内部样式
-
在head标签内定义style标签,style标签体的内容就是css代码
-
例如:
<style> div{ color: blue; } </style> <div>helloworld</div>
-
-
外部样式
-
定义css资源文件
-
在head标签内,定义style标签,引入外部资源文件
-
a.css文件: div{ color: green; } <link rel="stylesheet" href="a.css"> <div>helloworld</div>
-
注意:1,2,3种方式,css作用范围越来愈大。
1方式不常用,后期常用2,3两种方式
3种格式可以写为:
<style>
@import "a.css";
</style>
3.4 CSS语法
格式:
格式:
选择器{
属性名1:值1;
属性名1:值1;
...
}
选择器:筛选具有相似特征的元素
注意:每一对属性值需要加分号“;”隔开,最后一对可以不加
3.5 选择器
基础选择器:
1. id选择器:选择器具体的id属性值的元素,建议在一个html页面id值唯一
语法:#id属性值{}
2. 元素选择器:选择具有相同标签名称的元素
语法:标签名{}
注意:id选择器优先级高于元素选择器
3. 类选择器:选择具有相同class属性值的元素
语法:.class属性值{}
注意:类选择器优先级高于元素选择器
扩展选择器:
1. 选择所有元素
语法:*{}
2. 并集选择器
语法:选择器1,选择器2{}
3. 子选择器:筛选选择器1元素下选择器2
语法:选择器1 选择器2{}
4. 父选择器:筛选选择器2的父元素选择器1
语法:选择器1 > 选择器2{}
5. 属性选择器:选择元素名称,属性名=属性值的元素
语法:元素名[属性名="属性值"]{}
6.伪类选择器:选择元素具有的一些状态
语法:元素:状态{}
如:<a>
状态:
link:初始化状态
visited:被访问过的状态
active:正在被访问的状态
hover:鼠标悬浮状态
基础类选择器:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>基础选择器</title>
<style>
#div1{
color: #89fff0;
}
div{
color: darkorange;
}
.class1{
color: #0088f9;
}
</style>
</head>
<body>
<!--
基础选择器:
1. id选择器:选择器具体的id属性值的元素,建议在一个html页面id值唯一
语法:#id属性值{}
2. 元素选择器:选择具有相同标签名称的元素
语法:标签名{}
注意:id选择器优先级高于元素选择器
3. 类选择器:选择具有相同class属性值的元素
语法:.class属性值{}
注意:类选择器优先级高于元素选择器
-->
<div id="div1">study css</div>
<div class="class1">study html</div>
<p class="class1">class选择器</p>
</body>
</html>
扩展类选择器:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>扩展选择器</title>
<style>
div p{
color: red;
}
div >p {
border: 1px solid;
color: blue;
}
input[type="text"]{
border: 3px solid;
}
a:link{
color: red;
}
a:hover{
color: forestgreen;
font-size: 20px;
}
a:active{
color: gold;
}
a:visited{
color: gray;
}
</style>
</head>
<body>
<!--扩展选择器-->
<div>
<p>study html</p>
</div>
<p>study css</p>
<div>aaa</div>
<input type="text">
<br>
<input type="password">
<br>
<a href="#">link</a>
</body>
</html>
3.6 属性
- 字体、文本
- font-size:字体大小
- color:颜色
- text-align:对齐方式
- line-height:行高
- 背景
- background:
- 边框
- border:设置边框,复合属性
- 尺寸
- width:宽度
- height:高度
- 盒子模型:控制布局
- margin:外边距
- padding:内边距
- 默认情况下内边距会影响盒子大小
- box-sizing: border-box;设置盒子属性,让width和height就是盒子最终大小
- float:浮动
- left
- right
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>字体属性</title>
<style>
p{
color: blue;
font-size: 30px;
text-align: center;
line-height: 100px;
/*
边框
*/
border: 2px solid red;
}
div{
border: 1px solid red;
/*
尺寸
*/
height: 200px;
width: 300px;
background: url("../image/image_log01.png") no-repeat center;
}
</style>
</head>
<body>
<p>学习网页设计</p>
<div> sss </div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>盒子模型</title>
<style>
div{
border: 3px red solid;
height: 200px;
width: 300px;
float: left;
}
.div1{
border: 2px blue solid;
height: 150px;
width: 200px;
/*padding: 23px; 会改变盒子大小*/
/*设置盒子属性,让width和height就是盒子最终大小*/
box-sizing: border-box;
padding: 22px;
}
.div2{
border: 1px gold solid;
height: 100px;
width: 150px;
/*margin: 25px;*/
}
</style>
</head>
<body>
<div class="div1">
<div class="div2"></div>
</div>
<div></div>
<div></div>
<div></div>
</body>
</html>
3.7 简单案例
使用CSS设计注册页面,如下:
实现代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册</title>
<style>
.div1{
width: 100%;
height: 600px;
border: red 1px solid;
background: url("../image/image07.jpg");
}
.div2{
width: 60%;
height: 90%;
border: 5px #eeeeee solid;
background-color: antiquewhite;
/*margin-left: 15%;*/
margin: auto;
margin-top: 2%;
}
.div31{
float: left;
/*border: 1px red solid;*/
width: 21%;
height: 80%;
margin-left: 5%;
margin-top: 2%;
}
.div32{
float: left;
/*border: 1px red solid;*/
width: 50%;
/*height: 80%;*/
/*margin-left: 5%;*/
margin-top: 2%;
}
.div33{
float: right;
/*border: 1px red solid;*/
width: 18%;
height: 80%;
margin-top: 2%;
margin-right: 1%;
}
.p1{
font-size: 20px;
color: gold;
}
.p2{
font-size: 20px;
color: gray;
}
.p3{
font-size: 12px;
}
.t_left{
width: 100px;
text-align: right;
height: 40px;
}
.t_right{
padding-left: 40px;
}
#username,#password,#email,#name,#phone,#birthday{
width: 250px;
height: 30px;
border: 1px solid #a6a6a6;
border-radius: 5px;
padding-left: 10px;
}
#checkcode{
width: 150px;
height: 30px;
border: 1px solid #a6a6a6;
border-radius: 5px;
}
#img_check{
height: 30px;
vertical-align: middle;
}
#btn_sub{
width: 100px;
height: 30px;
background-color: #ffd026;
border: 1px solid #ffd026;
border-radius: 5px;
}
</style>
</head>
<body>
<div class="div1">
<div class="div2">
<div class="div31">
<p class="p1">新用户注册</p>
<p class="p2">USER REGISTER</p>
</div>
<div class="div32">
<table>
<tr>
<td class="t_left"><label for="username"><p>用户名</p></label></td>
<td class="t_right"><input type="text" id="username" name="username" placeholder="请输入用户名"></td>
</tr>
<tr>
<td class="t_left" ><label for="password"><p>密码</p></label></td>
<td class="t_right"><input type="text" id="password" name="username" placeholder="请输入密码"></td>
</tr>
<tr>
<td class="t_left" ><label for="email"><p>Email</p></label></td>
<td class="t_right"><input type="text" id="email" name="email" placeholder="请输入Email"></td>
</tr>
<tr>
<td class="t_left" ><label for="name"><p>姓名</p></label></td>
<td class="t_right"><input type="text" id="name" name="username" placeholder="请输入真实姓名"></td>
</tr>
<tr>
<td class="t_left" ><label for="phone"><p>手机号</p></label></td>
<td class="t_right"><input type="text" id="phone" name="username" placeholder="请输入用手机号"></td>
</tr>
<tr>
<td class="t_left" >性别</td>
<td class="t_right">
<input type="radio" name="sex" > 男
<input type="radio" name="sex" > 女
</td>
</tr>
<tr>
<td class="t_left" >出生日期</td>
<td class="t_right">
<input type="date" id="birthday" name="birthday">
</td>
</tr>
<tr>
<td class="t_left" >验证码</td>
<td class="t_right">
<input type="text" name="key" id="checkcode">
<img src="../image/image_yan01.jpg" width="50px" id="img_check">
</td>
</tr>
<tr align="center">
<td colspan="2">
<input type="submit" id="btn_sub" name="btn" value="注册"></td>
</tr>
</table>
</div>
<div class="div33">
<p class="p3">已有账号?<a href="#">立即登录</a></p>
</div>
</div>
</div>
</body>
</html>