HTML
一、HTML簡介
1.1 HTML概述
HTML全稱:Hyper Text Markup Language(超文本標記語言)
HTML是一門用戶創建網頁文檔的標記語言,網頁本身是一種文本文件,在文本文件中添加標記符
瀏覽器解析HTML標記的內容(文字的處理,排版的安排,圖片如何顯示、音頻、視頻等等)
HTML是用來創建網頁的標記語言
1.2 HTML特點
1.簡易性:超文本標記語言的版本升級採用的超集方式。更加方便靈活
2.可擴展性:超文本標記語言採取的子類元素的方式,爲系統擴展帶來保證
3.平臺無關性
4.通用性:HTML是網絡的通用語言,一種簡單、通用的標記語言
1.3 HTML的發展
超文本標記語言(第一版)—1993年6月作爲互聯網工程小組(IETF)工作草案發布(並非標準)
HTML2.0 --1995年11月
HTML3.2–1997年1月14日,W3C標準
HTML4.0 --1997年12月18日 W3C標準
HTML4.01 --1999年12月24日 W3C的推薦標準
HTML5—2014年10月29日,W3C推薦標準
1.4 HTML基本結構
<!--文檔聲明,告訴瀏覽器使用HTML5版本解析-->
<!DOCTYPE html>
<html>
<!--網頁頭部-->
<head>
<!--頁面的字符編碼-->
<meta charset="utf-8"/>
<!--頁面的標題-->
<title>我的頁面</title>
</head>
<body>
展示的內容
</body>
</html>
1.HTML頁面包含了頭部head和主體body
2.HTML標籤通常是成對出現的,有開始標籤,有結束標籤,稱爲對標籤,沒有結束標籤的爲空標籤
3.HTML標籤通常都有屬性,格式:屬性名=“屬性值” 多個屬性用空格間隔
4.HTML標籤不區分大小寫,建議小寫
5.HTML文件後綴名爲html或htm
二、HTML基本標籤
2.1 結構標籤
<html></html>:根標籤
<head>:頭標籤
<titile></titile>:頁面標題
</head>
<body>:主題標籤,顯示網頁內容
</body>
屬性:
color:文本的顏色
bgColor:背景色
background:背景圖片
顏色的表達方式:
第一種:顏色名稱:red blue
第二種:RGB模式
2.2 排版標籤
1.註釋標籤:
2.換行標籤:
3.段落標籤:
文本文字
特點:段落與段落之間有行高(行間距)自帶換行
屬性:文本對齊方式align(left、center、right)
4.水平線標籤:
屬性:
width:水平線的長度(兩種:像素表示。百分比表示)
size:水平線的粗細
color:
align:水平線的對齊方式
2.3 標題標籤
<h1></h1>
標籤下值數字越大,字號越大
<h6></h6>
2.4 容器標籤
<div></div> 塊級標籤 獨佔一行,自帶換行
<span></span> 行級標籤,所有內容都在同一行
作用:<div>主要結合css做頁面分塊 佈局
<span>進行友好提示信息的顯示
2.5 列表標籤
2.5.1無序列表
ul(unorder list) //默認標識爲實心圓disc type="" circle 空心圓 square 黑色方塊
2.5.2 有序列表
ol(order list)//有序列表,默認標識爲阿拉伯數字 1 type="" A a字母字典順序 i I 羅馬數字
2.5.3 定義列表
dl(defination list)定義列表
dt(defination title)定義標籤 定義標題
dd(defination description)定義描述
<dl>
<dt>標題1</dt>
<dd>描述1</dd>
<dt>標題2</dt>
<dd>描述2</dd>
</dl>
2.5.4 列表的嵌套
<ul>
<li>最新娛樂新聞</li>
<dl>
<dt>青春有你2</dt>
<dd>導師團隊陣容強大</dd>
</dl>
<li>最強緋聞之聲</li>
<li>熱門影視劇情</li>
</ul>
2.6 圖片標籤
<img/>獨立標籤
屬性:
src 圖片地址
width 圖片的寬度
height 圖片的高度
border邊框
alt 圖片的文字說明,當圖片未能正確加載時,才顯示
title 鼠標懸停時,顯示的文字
2.7 鏈接標籤
超鏈接可以是文本,也可以是圖片,可以點擊連接標籤,進入新的文檔,或者是當前文檔的某個部分
<a></a> //href="跳轉的地址"
target:_self(當前文檔)
target:_blank(新頁面)
target:_search(之前打開的頁面存在則不打開新的頁面直接複用)
#name充當錨點(頂部、底部)
需要爲標籤提供name屬性,進行賦值
需要點擊跳轉的標籤href屬性給#name
2.8 表格標籤
表格由
標籤來定義,每個表格均有若干行(由tr標籤定義行),每行由若干個單元格組成(由td標籤來定義)。每一個數據單元可以包含文本、圖片、列表
2.8.1 普通表格
table tr td
<!--創建表格table 行tr 列td
默認沒有邊框體現
border:邊框的寬度
bordercolor:邊框的顏色
cellspacing: 單元格邊框
cellpadding:單元格與內容的間距
width:寬度
height:高度
align:控制表格的對齊方式left center right
td的屬性:
align:控制單元格內容的對齊方式left center right
valign:控制單元格內容的垂直對齊方式 top middle bottom
-->
<table border="1" bordercolor="red" cellspacing="0" cellpadding="0" align="center">
<tr>
<td>姓名</td>
<td>性別</td>
<td>年齡</td>
</tr>
<tr>
<td align="center" valign="center">kunyan</td>
<td>女</td>
<td>未知</td>
</tr>
</table>
2.8.2 表格的表頭
th
<!--th作爲表頭,默認居中,加粗-->
<table border="1">
<tr>
<th>姓名</th>
<th>性別</th>
<th>年齡</th>
</tr>
<tr>
<td align="center" valign="center">kunyan</td>
<td>女</td>
<td>未知</td>
</tr>
</table>
2.8.3 表格的列合併
colspan
<table border="1">
<tr>
<td align="center" colspan="4">學生信息表</td>
</tr>
<tr>
<th>姓名</th>
<th>性別</th>
<th colspan="2">成績</th>
</tr>
<tr>
<td align="center" valign="center">kunyan</td>
<td>女</td>
<td>133</td>
<td>122</td>
</tr>
</table>
2.8.4 表格的行合併
rowspan
<table border="1">
<tr>
<td align="center" colspan="4">學生信息表</td>
</tr>
<tr>
<th>姓名</th>
<th>性別</th>
<th colspan="2">成績</th>
</tr>
<tr>
<td align="center" valign="center" rowspan="2">kunyan</td>
<td rowspan="2">女</td>
<td>133</td>
<td>122</td>
</tr>
<tr>
<td>133</td>
<td>122</td>
</tr>
</table>
2.9 文本格式化標籤
<!--粗體文本-->
<b>今天天氣好</b><br/>
<!--大號字-->
<big>今天天氣好</big><br/>
<!--着重文字-->
<em>今天天氣好</em><br/>
<!--斜體字-->
<i>今天天氣好</i><br/>
<small>今天天氣好</small><br/>
<!--定義加重語氣-->
<strong>今天天氣好</strong><br/>
<!--下標字-->
co<sub>2</sub><br/>
<!--上標字-->
10<sup>2</sup><br/>
<!--插入字-->
<ins>sad</ins><br/>
<!--刪除字-->
<del>天氣好</del>
三、基本標籤的綜合案例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<!--頭部-->
<div>
<table width="100%" align="center">
<tr>
<td align="left">
千鋒教育-稀有的堅持全程面授品質的大型IT教育機構
</td>
<td align="right">
<a>好程序員特訓營 </a>
<a>JavaEE分佈式開發 </a>
<a>JavaSE核心基礎 </a>
<a>加入我們</a>
</td>
</tr>
<tr>
<td>
<img src="img/new_logo.png" />
</td>
<td align="right">
<img src="img/nav_r_ico.png"/>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<hr />
<span>首頁 </span>
<span>課堂培訓 </span>
<span>教學保障 </span>
<span>免費視頻 </span>
<span>公開課 </span>
<span>企業合作 </span>
<span>就業喜報 </span>
<span>學員天地 </span>
<span>關於千鋒 </span>
<span>學員論壇</span>
<hr />
</td>
</tr>
<tr>
<td colspan="2" align="right">
首頁>課程培訓>JavaEE列表
</td>
</tr>
</table>
</div>
<!--中間部分-->
<div>
<table align="center" width="100%">
<tr>
<td>
<h3>課程培訓</h3>
<h4>共108種課程內容</h4>
</td>
</tr>
<tr align="center">
<td colspan="2">
<hr />
<img src="img/001.png" width="100%"/>
</td>
</tr>
</table>
<table align="center" width="100%">
<tr align="center">
<td>
<img src="img/002.png" /><br />
<div align="center">書名:XXX</div>
<div align="center">售價:180</div>
</td>
<td>
<img src="img/003.png" /><br />
<div align="center">書名:XXX</div>
<div align="center">售價:180</div>
</td>
<td>
<img src="img/004.png" /><br />
<div align="center">書名:XXX</div>
<div align="center">售價:180</div>
</td>
<td>
<img src="img/005.png" /><br />
<div align="center">書名:XXX</div>
<div align="center">售價:180</div>
</td>
<td>
<img src="img/006.png" /><br />
<div align="center">書名:XXX</div>
<div align="center">售價:180</div>
</td>
</tr>
<tr align="center">
<td>
<img src="img/007.png" /><br />
<div align="center">書名:XXX</div>
<div align="center">售價:180</div>
</td>
<td>
<img src="img/008.png" /><br />
<div align="center">書名:XXX</div>
<div align="center">售價:180</div>
</td>
<td>
<img src="img/009.png" /><br />
<div align="center">書名:XXX</div>
<div align="center">售價:180</div>
</td>
<td>
<img src="img/010.png" /><br />
<div align="center">書名:XXX</div>
<div align="center">售價:180</div>
</td>
<td>
<img src="img/011.png" /><br />
<div align="center">書名:XXX</div>
<div align="center">售價:180</div>
</td>
</tr>
</table>
</div>
<!--底部-->
<div>
<table width="100%">
<tr>
<td><img src="img/012.png" width="100%"/></td>
</tr>
</table>
</div>
</body>
</html>
四、表單
<!--外部必須嵌套一個form標籤,只有嵌套這個標籤,瀏覽器才能將內容提交到服務器-->
<form>
賬戶:<input type="text" name="username"/><br />
密碼:<input type="password" name="password"/><br />
性別:
<input type="radio" name="sex" value="male" checked="checked"/>男
<input type="radio" name="sex" value="female"/>女<br />
地址:<select name="city">
<option value="wuhan">武漢</option>
<option value="xiaogan" selected="selected">孝感</option>
</select><br />
愛好:
<input type="checkbox" name="hobbys" value="basketball"/>籃球
<input type="checkbox" name="hobbys" value="pingpangball"/>乒乓球
<input type="checkbox" name="hobbys" value="badminton"/>羽毛球
<br />
照片:<input type="file" /><br />
介紹:<textarea name="introduce" placeholder="200字以內"></textarea><br />
<!--<input type="submit" value="註冊" />-->
<button type="submit">註冊</button>
<input type="reset" value="重置" />
</form>
五、CSS介紹
六、CSS和HTML樣式
6.1 css和html結合內聯樣式
內聯結合:
缺點:不能複用
優點:獨特,簡單 對少數特定元素進行單獨設置
<font style=" font-size: 200px;color: darkgreen;">字體</font>
6.2 內部結合
內部結合:
1.需要在head標籤中,使用style標籤
2.使用選擇器選中元素
3.編寫css代碼
格式:
選擇器{
屬性名1:屬性值1;
屬性名2:屬性值2;
}
缺點:複用性不高!CSS代碼和html代碼並沒有徹底分離
優點:簡單
<style>
font{
font-size:200px;
color:darkgreen;
}
</style>
6.3 外部結合方式
1.新建一個css樣式文件
2.編寫css代碼
3.在html文件中引入css外部文件,使用link標籤引入
<link rel="stylesheet" href="css/css01.css"/>
6.4 選擇器
#屬性值{
屬性名:屬性值;
}
.class屬性值{
屬性名:屬性值;
}
處理多個元素有相同的樣式
標籤名{
屬性名:屬性值;
}
分組選擇器:如果多個選擇器中的css代碼相同,那麼就可以將這多個選擇劃爲一組
用逗號組合
.class屬性值,標籤名,#屬性值{
屬性名:屬性值;
}
父選擇器 子選擇器{
屬性名:屬性值;
}
6.5 優先級
內聯樣式>id選擇器>類選擇器>標籤選擇器
規律:作用範圍越小,優先級越大!
七、CSS僞類
a:link{} //未訪問的鏈接
a:visited{} //已訪問的鏈接
a:hover{} //鼠標移動到鏈接上
a:active{} //選定的鏈接
注意:hover必須置於link和visited後纔有效
active必須置於hover後纔有效
八、CSS中的屬性
8.1 CSS中的字體屬性
font-family:微軟雅黑、楷體、宋體、仿宋。默認字體微軟雅黑
font-size:字體大小
font-style:設置字體風格 italic obique
font-weight: 字體的粗細lighter;500px;
direction 文本方向 ltr:left to right rtl: right to left
line-height 行高
text-align 文本水平對齊方式
text-indent: 2em 首行縮進
text-decoration 文本修飾 underline;overline;line-through;blink;
letter-spacing 字符間距(每個字符與字符間的間距)
word-spacing 單詞間距 (單詞與單詞之間的間距)
8.2 CSS背景屬性
background-color:將顏色作爲背景
background-imag:將圖片作爲背景
background-size:cover
8.3 CSS尺寸屬性
min-width:
max-width:
min-height;
max-height;
8.4 CSS列表屬性
list-style-image 將圖片設置爲列表項標誌
list-style-position 設置列表中列表項標誌的位置 inside
list-style-type 設置列表項標誌的類型。
8.5 CSS邊框屬性
border-left-style:dotted點 dashed虛線 設置元素的左邊框的樣式。
border-left:style color width;左上右下
border:style color width;
border-radius:20px;圓角
8.6 CSS盒子模型
element 元素內容 width heigth
padding 內邊距
margin 外邊距:外框到其他元素(父元素、兄弟元素)的距離
瀏覽器:元素進行渲染的時候,是從左往右進行渲染
float:left
8.7 CSS定位
position屬性 static relative absolute fixed 把元素放置到一個靜態的、相對的、絕對的、或固定的位置上
相對定位:原有元素所佔的空間不會消失偏移,根據原來位置進行偏移
絕對定位:元素原先在正常文檔流中所佔空間會關閉,偏移是根據父類容器進行偏移
left
top
right
bottom
body{//一般瀏覽器都對body標籤默認的margin設置爲8px;不同瀏覽器會設置不同的值,它是由瀏覽器的user-agent-stylesheet提供
padding:0px;
margin:0px;
}
九、塊級元素和行內元素
1.行內元素:元素僅僅包裹內容,常見:span
爲行內元素加padding margin無效。display:inline-block;行內塊
2.塊級元素:佔滿整一行,常見:div
十、伸縮佈局flex
main axis:主軸
規定元素排列的方向,默認是row,水平方向
cross axis:側軸
輔助軸,默認是colunm,垂直方向
flex item:伸縮元素
會按照主軸方向進行排列
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<!--左邊菜單欄40%,右邊是內容60%,高度充斥整個屏幕-->
<style>
html{
height: 100%;
}
body{
height: 100%;
}
#container{
display: flex;
height: 100%;
}
#left{
background-color: #006400;
width: 40%;
height: 100%;
}
#right{
background-color:red;
width: 60%;
height: 100%;
}
</style>
</head>
<body>
<div id="container">
<div id="left">left</div>
<div id="right">right</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<!--左邊菜單欄40%,右邊是內容60%,高度充斥整個屏幕-->
<style>
html{
height: 100%;
}
body{
height: 100%;
}
#container{
display: flex;
flex-direction: column;
height: 100%;
}
#left{
background-color: #006400;
height: 40%;
width: 100%;
}
#right{
background-color:red;
height: 60%;
width: 100%;
}
</style>
</head>
<body>
<div id="container">
<div id="left">left</div>
<div id="right">right</div>
</div>
</body>
</html>
十一、Web中的路徑
訪問路徑:
絕對路徑:不帶協議的絕對路徑/不帶協議的絕對路徑(http://127.0.0.1:8020/day47/a.html)
相對路徑:相對於一個資源去訪問另一個資源(http://127.0.0.1:8020/day47/css/css01.css)//在a.html的同一目錄(day47)下訪問css文件夾–>css01.css
./ 表示當前目錄一般可以省略 href="css/css01.css
…/上一級目錄
十二、註冊界面案例
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-gTaqJyaq-1586942565862)(G:\Java\第二階段\筆記\案例效果.png)]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>css伸縮佈局之註冊案例</title>
<style>
html{
height: 100%;
}
body{
height: 100%;
margin: 0px;
background-image: url(img/register_bg.png);
background-size: cover;
display: flex;
/*垂直居中*/
align-items: center;
/*水平居中*/
justify-content: center;
}
#container{
display: flex;
background-color: white;
width: 800PX;
height: 500px;
}
#left{
width: 30%;
padding-top: 15px;
padding-left: 20px;
}
#left font{
font-size: 25px;
color: gray;
}
#left #f1{
color: orange;
}
#center{
width: 50%;
display: flex;
align-items: center;
justify-content: center;
}
#center input{
margin-top: 5px;
width: 290px;
height: 28px;
border: 1px solid gainsboro ;
border-radius: 5px;
}
#center #codes{
display: flex;
align-items: center;
}
#center #code{
width: 150px;
}
#center #img{
padding-left: 10px;
}
#center button{
width: 130px;
height: 35px;
margin-top: 20px;
background-color: mediumseagreen;
}
#center button:hover{
background-color: green;
}
#right{
width: 20%;
margin-top: 15px;
}
#right a{
color: indianred;
text-decoration: none;
}
#right a:hover{
color: red;
}
</style>
</head>
<body>
<div id="container">
<div id="left">
<font id="f1">新用戶註冊</font><br />
<font id="f2">USER REGISTER</font>
</div>
<div id="center">
<form>
<table>
<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="text" name="email" placeholder="請輸入郵箱"/></td>
</tr>
<tr>
<td>姓名</td>
<td><input type="text" name="realname" placeholder="請輸入賬戶"/></td>
</tr>
<tr>
<td>手機號</td>
<td><input type="number" name="phone" placeholder="請輸入手機號"/></td>
</tr>
<tr>
<td>性別</td>
<td><input type="text" name="sex" placeholder="請輸入性別"/></td>
</tr>
<tr>
<td>出生日期</td>
<td><input type="text" name="borndate" placeholder="yyyy年MM月dd日"/></td>
</tr>
<tr>
<td >驗證碼</td>
<td id="codes">
<input id="code" name="security" placeholder="請輸入驗證碼"/>
<img src="img/verify_code.jpg" id="img"/>
</td>
</tr>
<tr>
<td colspan="3"><button type="submit">註冊</button></td>
</tr>
</table>
</form>
</div>
<div id="right">
<font>已有賬戶?</font>
<a href="index.html">立即登錄</a>
</div>
</div>
</body>
</html>
十三、服務器
13.1 服務器相關概念
網絡協議–>http協議–>tcp協議
將電腦設置爲服務器,需要將電腦中安裝服務器軟件,如tomcat,可以使服務器針對本局域網。
若想不同局域網訪問一個服務器則需要:
1.內網穿透:讓外部網絡中的設備可以訪問局域網中的內容
2.雲服務器:在物聯網中假設的服務器電腦
13.2 BS/CS結構
- BS結構 瀏覽器服務器 brower/server
- 特點:不需要下載安裝客戶端,通過地址去訪問不同的服務器內容
1.只要連網就能隨時隨地的使用
2.開發人員只需要對服務器程序進行開發、維護、降低開發維護難度和開發維護成本
3.瀏覽器主要負責用戶界面的動態展示,只處理一些簡單邏輯
4.服務器的負載大
5.加服務器,使負載均衡
- CS結構 客戶端服務器 client/server
- 特點:1.需要下載安裝客戶端
客戶端:顯示數據,具備一定的業務能力
服務器:處理數據、業務處理
服務器的負載相對較低
BS優缺點:
優點:實時地更新數據
缺點:將負載給 了服務器
CS優缺點:
優點:客戶端也分擔了一部分負載
缺點:如果有新的功能要增加,則需要更新
13.3 常見的java服務器
ngix:靜態資源服務器
weblogic
jboss
websphere
tomact
13.4 Web相關概念
靜態web資源、動態web資源
13.4.1 爲什麼web程序不需要main方法
1.一般的Java程序都有main,作爲程序的主入口,通常用來啓動程序。
2。web程序中的tomact就是Java開發的一個程序。裏面有main方法
3.tomcat的啓動就是啓動了main方法,將tomcat以一個已經啓動的程序等待讀取用戶的輸入
4.由於tomcat是一個應用程序服務器,所以必然不可能只做一件事,啓動一個服務。
5.用戶按照固定格式在瀏覽器輸入地址。(包含:ip、端口、工程名稱、請求路徑)
1.ip地址區分不同服務器
2.端口:在同一個服務器上可以安裝很多個tomcat
3.工程名稱:在同一個tomcat中可以部署多個不同的服務
4. 請求路徑:調用不同的Serlet來執行相應的業務方法
6.請求路徑是爲了調用不同的業務方法
1.通常來說方法調用應該是創建一個對象,然後調用對象的方法。
2.Servlet是由server+let組合而成,表示服務器上的小程序,作用是用來接收用戶的請求(路徑),並返回相應的數據。
3.tomcat容器在開啓的時候幫Servlet創建 了對象,並且通過用戶配置指定的路徑來映射裏面的doGet和doPost方法,因此用戶可以通過一個路徑來調用Servlet裏面的doGet和doPost方法,就是先一個請求路徑調用一個方法。
13.5 Tomcat安裝與配置
http://ip:端口號/資源名稱
ip: tomcat軟件所在設備的ip
ipconfig 192.168.0.105
端口號:tomcat對應的端口號
13.5.1 JAVA_HOME配置
tomcat依賴java的環境變量JAVA_HOME
13.5.2 端口的配置
tomcat安裝目錄 -> conf文件夾 -> server.xml中
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
13.5.3 目錄結構
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-rEgbyUGt-1586942565875)(G:\Java\第二階段\筆記\08-tomcat安裝目錄介紹.png)]
13.6 Web項目
A_Web項目分類
Web靜態項目
包含都是靜態資源:html、js、css、圖片、音頻等等
Web動態項目: 不是必須包含動態資源
包含都是靜態資源:html、js、css、圖片、音頻等等
那麼和靜態項目的區別在哪裏?可以有動態資源及WEB-INF文件夾
通過http://localhost:8080/ 訪問的資源是來自於tomcat服務器的動態web項目(內置),
而在tomcat的一個安裝目錄中,是由一個webapps的文件夾專門用來部署web項目
B_總結
一個靜態web項目,肯定都是靜態資源
一個動態web項目,可以有靜態資源,可以有動態資源, 必須有WEB-INF文件夾及web.xml
工作中使用動態web項目
13.7 tomcat部署項目
A_直接將項目放到webapps下
B_虛擬目錄初級版
將tomcat目錄以外的資源部署到容器中
在tomcat的目錄 -> conf文件夾 -> server.xml中 , 加一個
<Context docBase="項目路徑" path="項目訪問名稱"/>
從tomcat6.0開始,以上的配置方案,並不推薦使用!!!
改動了tomcat的server.xml文件,一旦出錯,tomcat容器裂開了!!!
C_虛擬目錄優化版
基於虛擬目錄初級版!!
1_tomcat安裝目錄 -> conf文件夾 -> catalina -> localhost
2_新建一個任意名稱的xml文件
3_需要到xml文件中編寫如下代碼:
<?xml version="1.0" encoding="utf-8" ?> <Context docBase="C:\Users\qiuzhiwei\Desktop\dynamicproject"/>
D_如何訪問部署成功之後的項目中的資源?
1_訪問到tomcat容器
http://localhost:8080/
2_訪問到項目
http://localhost:8080/dynamicproject/
3_訪問到資源
http://localhost:8080/dynamicproject/a.jpg
4_注意事項
如果訪問路徑只寫到http://localhost:8080/dynamicproject/,默認訪問index開頭的html文件或jsp文件…
E_總結
tomcat的部署總共是有三種方式,推薦使用第一種和第三種方式!!!
而且,idea部署項目使用和第三種方式差不多,要更復雜點!!!
13.8 web動態項目的相關設置
A_訪問網址
http://localhost:8080/dynamicproject
http://localhost:8080/dynamicproject/index.html
http://localhost:8080/dynamicproject/index.jsp
默認會訪問index.hhtml / index.jsp
爲什麼?
tomcat安裝目錄 -> conf文件夾 -> web.xml
<welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list>
上述配置代碼,是設置tomcat容器中的每個項目的默認頁面是index.html、index.htm、index.jsp
所以,自定義的web項目也部署到tomcat容器中,那麼就會遵守上述規定!!
如果,不想遵守以上約定,怎麼處理?
方式一:直接修改tomcat中的web.xml,
<welcome-file-list> <welcome-file>demo01.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list>
但是這樣處理存在問題,所有的項目的歡迎頁面都會跟隨改變!!!
方式二:直接修改項目自帶的web.xml
每一個web動態項目都會包含web.xml
加入以下代碼:
<welcome-file-list> <welcome-file>demo01.html</welcome-file> <welcome-file>demo01.htm</welcome-file> <welcome-file>demo01.jsp</welcome-file> </welcome-file-list>
以上配置僅針對當前項目有效!!!
B_項目中的wb.xml和tomcat中的web.xml,有什麼關係?
類似於java中的繼承關係(父子關係),
如果tomcat中的web.xml的配置無法滿足當前的項目的需求,那麼就可以更改項目中的web.xml,覆蓋tomcat中的web.xml配置
回顧:子父類中的方法重寫!!!
父類的方法中的功能無法滿足子類的需求,就需要進行方法重寫!!
13.9 在IDEA下開發部署
13.9.1 idea部署web應用程序
> 創建一個javaweb工程,JavaEnterprise、Web_Application
>
> JavaWeb目錄介紹:
>
> src:存放java代碼
>
> web:存放web資源,比如:html、js、css、圖片、jsp等等
>
> WEB-IN 存放Java文件轉譯之後的class文件
>
> IDEA配置:
>
> 選擇Edit Configurations 點擊+號-->tomcat-->server-->local
>
> 點擊Configure-->點擊加號-->選擇tomcat
>
> On Update action:Redeploy
>
> On frame deactivation:Update classes and resources
13.9.2 idea部署項目的方式
IDEA部署WEB項目的方式,本質就是虛擬目錄優化版,但有一些區別。
tomcat會Using CATALINA_BASE: "C:\Users\gone.IntelliJIdea2019.2\system\tomcat\Tomcat_7_0_103_day50Web"新的tomcat容器,tomcat鏡像。
在鏡像文件中使用了虛擬目錄優化版方式部署web項目:C:\Users\gone.IntelliJIdea2019.2\system\tomcat\Tomcat_7_0_103_day50Web\conf\Catalina\localhost,定義了一個day50.xml文件
訪問名稱:"/day50"
資源部署路徑:F:\IdeaFiles\day50Web\out\artifacts\day50Web_war_exploded
即所有資源都應在資源部署路徑中。
Java項目下的src文件夾中的內容會部署到tomcat服務器項目的中的WEB-INF\classes下
Java項目下的WebContent文件夾會部署到tomcat服務器項目根目錄下。
十九、http協議介紹
19.1 什麼是協議
協議就是規定雙方如何通信
19.2 http協議
超文本傳輸協議HyperText transfer protocol是互聯網上應用最爲廣泛的一種網絡協議,所有www都必須遵守這個標準
超文本:字符、音頻、視頻、圖片等
19.3 總結
在做javaweb開發時,瀏覽器與服務器要通信,它們之間遵守就是http協議。
http協議是建立在TCP協議基礎上,http協議也是基於請求與響應的模型。http協議默認的端口是80
二十、演示抓包來查看http協議信息
20.1 步驟
創建一個web工程,在工程中創建一個hello。html頁面
將工程部署到tomcat中,打開瀏覽器查看hello.html頁面(F10檢查,Network,在網址輸入欄處enter鍵)
啓用抓包功能
Headers
Preview
Redponse
20.2 通過抓包可以看到如下信息:
General:請求行,響應行
Request Headers:請求頭
Response Headers:響應頭
響應正文:將顯示內容攜帶到瀏覽器
請求正文:用來接收請求的參數
20.3 總結:
請求:請求行、請求頭、請求正文
響應:響應行、響應頭、響應正文
二十一、請求的執行流程
瀏覽器:
1.發起請求
2.域名解析 C:\Windows\System32\drivers\etc\host
本地域名解析器 ,如果本地域名解析器無法解析,就給互聯網上的DNS服務器解析出ip
3.三次握手:底層是由tcp協議支持:請求訪問、應答、開始連接
4.執行請求 :服務器開始解析請求行、請求頭、請求正文。
根據ip和端口,可以得到一個Socket對象,執行請求
5.服務器響應瀏覽器
21.1 http請求
請求組成:請求行、請求頭、請求正文
請求行:
Request URL:請求路徑,告訴服務器要請求的資源路徑
Request Method:請求方式,get/post
protocol:http協議
GET請求和POST請求:
get請求只能攜帶小數據、get請求下的請求參數會直接拼接到Request URL
post請求可以攜帶大數據,post請求下的請求參數會存放到請求正文
請求正文:只有當請求方式爲post,且有請求參數纔會有FORM DATA
請求頭:
Content-Type:瀏覽器告訴服務器,請求正文的數據類型
User-Agent:瀏覽器告訴服務器,瀏覽器類型
應用到form中,action:表單提交的路徑,往往是服務器資源路徑
method:設置請求方式,GET/POST
21.2 http響應
21.2.1 Http響應組成
響應行 響應頭 響應正文
21.2.2 響應行
在響應行中最重要的是響應狀態碼
最常見的狀態碼status:服務器告訴瀏覽器,服務器的狀態
200響應成功
302 可以與一個響應頭location組合完成重定向
304代表服務器端資源沒有改變
404資源訪問不到
500服務端錯誤
21.2.3 響應頭
Location:它與302狀態碼組全可以完成重定向功能
Content-type:服務器響應回的數據mineType類型:將音頻,圖片,文本,視頻等等
refresh:可以實現定時跳轉
content-disposition:可以完成文件下載,點擊的整個文件是否彈出下載框
21.2.4 響應正文
對於http響應正文,它是真正被瀏覽器解析並顯示在瀏覽器上的。
Servlet
一、Servlet的概述及入門
1.1概念
servlet就是一個java程序,可以和瀏覽器進行交互,servlet的使用需要有服務器的運行環境
1.2 web工程
1.2.1 idea部署web項目鏡像是什麼意思
鏡像是指將tomcat啓動,並不會將當前工程真正的部署到tomcat中,而是在內存中以鏡像的方式部署,這種方式好處是不影響tomcat,而且能夠實現一些熱部署(修改代碼不需要重啓tomcat)功能
1.3 Servlet的入門案例
a_自定義Servlet繼承HttpServlet
b_重寫doGet方法和doPost方法
c_在web.xml配置servlet
聲明自定義Servlet
給自定義Servlet配置訪問名稱
1.4 Servlet的執行流程
瀏覽器發起請求: http://localhost:8080/day50/demo01
就會在服務器中找訪問名稱爲demo01的Servlet -> Demo01Servlet
請求的處理就交給了Demo01Servlet的實例,根據請求方式get/post,決定是給doGet還是doPost方法處理!!!
1.5 注意事項
不管是get請求還是post請求,對於服務器來說,沒差別的!!!
get請求將請求參數放到請求網址
post請求將請求參數放到請求正文
服務器最終無非就要獲取請求參數。getParameter()方法!
1.6 Servlet的概念及基本使用
1.6.1 Servlet概念
可以在服務器中運行的java程序,java程序中可以使用和tomcat容器相關的api,比如:servlet-api,jsp-api
1.6.2 基本使用
自定義類繼承HttpServlet
重寫doGet、doPost
在web.xml中配置自定義Servlet
1.7 實現Servlet的三種方式
HttpServlet繼承於GenericServlet、GenericServlet實現於Servlet,也就是說Servlet是頂層接口!!!
如果要實現Servlet功能,有幾種方式?
方式一:實現Servlet接口
在servlet接口中,沒有doGet和doPost方法,處理請求是service方法(抽象的)
如果要針對Http協議,需要手動強轉。
方式二:繼承GenericServlet類
在GenericServlet類中,沒有doGet和doPost方法,處理請求是service方法(抽象的)
如果要針對Http協議,需要手動強轉。
方式三:繼承HttpServlet類
猜想,HttpServlet類中重寫GenericServlet類中service方法。會由GenericServlet給service方法提供請求對象
ServletRequest,ServletResponse。
根據源碼,發現重寫service方法中,
有將ServletRequest強轉爲HttpServletRequest,
將ServletResponse強轉爲HttpServletResponse
以上強轉是因爲,ServletRequest和ServletResponse並沒有針對Http協議做優化!!!無法專門針對http協議調用方法!!
HttpServletRequest和HttpServletResponse有針對http協議做優化!!!
二、Servlet
1.1 Servlrt源碼
public interface Servlet {
void init(ServletConfig var1) throws ServletException;//監聽Servlet的初始化
ServletConfig getServletConfig();
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException; //處理請求
String getServletInfo();
void destroy();
} //監聽Servlet的銷燬
1.2 生命週期
一個事物,從開始、存活、結束。
1.3 Servlet生命週期特點
Servlet什麼時候初始化?
Servlet默認不是隨着服務器的啓動而初始化,當第一次訪問Servlet時初始化,再訪問則直接處理請求
Servlet是單例!!不佔用過多的內存
Servlet什麼時候銷燬?
服務器關閉時,會銷燬Servlet
1.4 load on startup配置
1.4.1 概念
根據Servlet生命週期,可知,servlet默認不會隨着服務器的啓動而初始化
如果,就想讓指定的servlet跟隨服務器啓動而初始化,需要用到load on startup
1.4.2 load on startup
有10個優先級:1~10;數字越小,優先級越高!
比如:Demo01Servlet,load-on-startup:1 ;Demo02Servlet , load-on-startup :2;
當服務器啓動時,Demo01Servlet先初始化,然後,Demo02Servlet再初始化!
<servlet>
<servlet-name>DemoServlet</servlet-name>
<servlet-class>com.qf.servlet.DemoServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
1.5 Servlet配置
1.5.1 概念
自定義Servlet,第一步,聲明該Servlet;第二步,給該Servlet配置訪問路徑
一個Servlet是否可以有多個訪問名稱?
可以有多個訪問名稱,只需要給對應的Servlet多個標籤即可!
書寫規則
完全匹配:
要求網址上的訪問名稱完全和一致
必須以"/"開頭,否則會報錯:IllegalArgumentException : Invalid
目錄匹配:
要求網址上的訪問名稱中的目錄和一致
必須以"/“開頭,以”*"結尾
比如:/a/b/* , 目錄必須是/a/b,後面隨便寫
後綴名匹配:
要求網址上的訪問名稱中的後綴和一致
不能以"/“開頭,以”*"開頭,後綴名根據業務寫
比如:*.xyz。後綴名必須是xyz,其他隨意寫!!!
1.6 缺省Servlet
1.6.1 概念
url-parttern的值爲"/"就是缺省Servlet
1.6.2 作用
- 凡是在web.xml文件總找不到匹配的元素的URL,它們的請求都將求交給缺省Servlet處理,也就是說,缺省的servlet用於處理其他Servlet處理不了的請求。
- 當訪問tomcat服務中的靜態資源(html、圖片等等)時,實際上是在訪問這個缺省的
tomcat容器自帶缺省Servlet,在web.xml中,如果url-parttern的值爲“/”,這樣的Servlet就是一個缺省Servlet;
默認就有一個缺省Servlet:DefaultServlet
處理匹配不到的資源,返回404頁面
處理靜態資源,io流讀寫
1.6.3 自定義缺省Servlet
在當前工程中自定義Servlet,將url-parttern設置爲"/",就覆蓋了tomcat容器中的缺省Servlet
1.6.4 應用
SpringMVC框架中,用於放行靜態資源!
1.7 服務器中路徑問題
帶協議的絕對路徑:http://localhost:8080/day51/girls.jpg
不帶協議的絕對路徑:/day51/girl01.jpg
相對路徑:./girl01.jpg(./可省略)
1.8 ServletConfig對象
1.8.1 概述
ServletConfig是由tomcat容器創建,通過init方法傳入給Servlet
1.8.2 作用
獲取Servlet的名稱標籤內容
獲取Servlet的初始化參數
- 隨着Servlet的初始化而初始化
<servlet> <servlet-name>Demo11Servlet</servlet-name> <servlet-class>com.qfedu.servlet.Demo11Servlet</servlet-class> <!--Servlet的初始化參數--> <init-param> <param-name>username</param-name> <param-value>root</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>root123</param-value> </init-param> </servlet>
getInitParameter(String parameterName):根據參數名稱獲取指定的參數值
getInitParameterNames():獲取所有的參數名稱
- 獲取域對象:ServletContext
1.9 ServletContext對象
1.9.1 概念
相當於是整個應用程序對象
1.9.2 作用
ServletContext是一個域對象,可以用來存儲數據
- 在應用程序中的任何位置都能夠訪問
- getAttribute(String parameterName) : 獲取ServletContext域中指定名稱的參數值
- setAttribute(String paramterName,Object parameterValue):存儲參數到ServletContext域中
- removeAttribute(String parameterNam):將ServletContext域中指定名稱的參數移除!
獲取全局初始化參數
會隨着服務器的啓動而初始化
<context-param> <param-name>username</param-name> <param-value>root456</param-value> </context-param>
獲取服務器真實磁盤路徑
getRealPath:依據當前項目去生成真實磁盤路徑,
比如:servletContext.getRealPath(“upload”)
“當前項目的服務器磁盤路徑/upload”
比如:servletContext.getRealPath(“upload/img”):
“當前項目的服務器磁盤路徑/upload/img”
1.9.3 站點訪問次數案例
-
使用ServletContext域對象
-
步驟
-
判斷是否是第一次請求
Integer count = servletContext.getAttribute("count"); if(count == null){ ...... } else { ...... }
-
如果是第一次請求
int count = 1; System.out.println("訪問次數 : " + count); servlet.setAttribute("count",count);
-
如果不是第一次請求
count++; System.out.println("訪問次數 : " + count); servlet.setAttribute("count",count);
-
1.10 Servlet3.0
1.10.1 概念
Servlet2.5,不支持註解開發。
Servlet3.0,支持註解開發。
1.10.2 用法
-
常用註解
@Test:單元測試
@Override:方法重寫
-
@WebServlet:
-
聲明配置Servlet,取代了web.xml配置。
@WebServlet(name = "Demo18Servlet",urlPatterns ={“/demo01”,"/mydemo01"},loadOnStartup=1, initParams={@WebInitParam(name="username",value="root"),@WebInitParam(name="password",value="root123")})
-
@WebServlet(name = “Demo18Servlet”,urlPatterns = “/demo18”)
public class Demo18Servlet extends HttpServlet {
}
```
以上配置代碼,相當於web.xml配置如下:
```xml
<servlet>
<servlet-name>Demo18Servlet</servlet-name>
<servlet-class>com.qfedu.servlet.Demo18Servlet</servlet-class>
</servlet>
Demo18Servlet
/demo18
```
1.10.3 常用屬性
常用屬性:
name:String //設置servlet名稱
urlPatterns:String[] //設置Servlet的訪問路徑
loadOnStartup:int //設置Servlet的load-on-startup屬性
- getRealPath:依據當前項目去生成真實磁盤路徑,
比如:servletContext.getRealPath("upload") "當前項目的服務器磁盤路徑/upload" 比如:servletContext.getRealPath("upload/img"): "當前項目的服務器磁盤路徑/upload/img"
1.9.3 站點訪問次數案例
-
使用ServletContext域對象
-
步驟
-
判斷是否是第一次請求
Integer count = servletContext.getAttribute("count"); if(count == null){ ...... } else { ...... }
-
如果是第一次請求
int count = 1; System.out.println("訪問次數 : " + count); servlet.setAttribute("count",count);
-
如果不是第一次請求
count++; System.out.println("訪問次數 : " + count); servlet.setAttribute("count",count);
-
1.10 Servlet3.0
1.10.1 概念
Servlet2.5,不支持註解開發。
Servlet3.0,支持註解開發。
1.10.2 用法
-
常用註解
@Test:單元測試
@Override:方法重寫
-
@WebServlet:
-
聲明配置Servlet,取代了web.xml配置。
@WebServlet(name = "Demo18Servlet",urlPatterns ={“/demo01”,"/mydemo01"},loadOnStartup=1, initParams={@WebInitParam(name="username",value="root"),@WebInitParam(name="password",value="root123")})
-
@WebServlet(name = “Demo18Servlet”,urlPatterns = “/demo18”)
public class Demo18Servlet extends HttpServlet {
}
```
以上配置代碼,相當於web.xml配置如下:
```xml
<servlet>
<servlet-name>Demo18Servlet</servlet-name>
<servlet-class>com.qfedu.servlet.Demo18Servlet</servlet-class>
</servlet>
Demo18Servlet
/demo18
```
1.10.3 常用屬性
常用屬性:
name:String //設置servlet名稱
urlPatterns:String[] //設置Servlet的訪問路徑
loadOnStartup:int //設置Servlet的load-on-startup屬性
initParams:WebInitParam[] //設置Servlet的初始化參數