Mysql數(shù)據(jù)庫

<meta charset="utf-8">

JavaWeb:

使用Java語言開發(fā)基于互聯(lián)網(wǎng)的項目

軟件架構:

1. C/S: Client/Server 客戶端/服務器端

在用戶本地有一個客戶端程序俏竞,在遠程有一個服務器端程序

如:QQ,迅雷...

優(yōu)點:

1. 用戶體驗好

缺點:
[圖片上傳中...(image.png-409ca4-1570967855977-0)]

1. 開發(fā)熔萧、安裝必峰,部署洪唐,維護 麻煩

2. B/S: Browser/Server 瀏覽器/服務器端

只需要一個瀏覽器,用戶通過不同的網(wǎng)址(URL)自点,客戶訪問不同的服務器端程序

優(yōu)點:

1. 開發(fā)桐罕、安裝,部署桂敛,維護 簡單

缺點:

1. 如果應用過大功炮,用戶的體驗可能會受到影響

2. 對硬件要求過高

B/S架構詳解

資源分類:

1. 靜態(tài)資源:

使用靜態(tài)網(wǎng)頁開發(fā)技術發(fā)布的資源。

特點:

所有用戶訪問术唬,得到的結果是一樣的薪伏。

如:文本,圖片粗仓,音頻嫁怀、視頻, HTML,CSS,JavaScript

如果用戶請求的是靜態(tài)資源,那么服務器會直接將靜態(tài)資源發(fā)送給瀏覽器借浊。瀏覽器中內(nèi)置了靜態(tài) 資源 的解析引擎塘淑,可以展示靜態(tài)資源

2. 動態(tài)資源:

使用動態(tài)網(wǎng)頁及時發(fā)布的資源。

特點:

所有用戶訪問蚂斤,得到的結果可能不一樣存捺。

如:jsp/servlet,php,asp...

如果用戶請求的是動態(tài)資源,那么服務器會執(zhí)行動態(tài)資源曙蒸,轉(zhuǎn)換為靜態(tài)資源捌治,再發(fā)送給瀏覽器


HTML

代碼格式:

<html>

<head>

<title>title</title>

內(nèi)容....

</head>

<body>

內(nèi)容...

</body>

</html>

HTML基礎標簽:

1. 文件標簽:構成html最基本的標簽

html:html文檔的根標簽

head:頭標簽。用于指定html文檔的一些屬性纽窟。引入外部的資源

title:標題標簽肖油。

body:體標簽

<!DOCTYPE html>:html5中定義該文檔是html文檔

2. 文本標簽:和文本有關的標簽

<h1> to <h6>:標題標簽

h1~h6:字體大小逐漸遞減

<p>:段落標簽


:換行標簽


:展示一條水平線

屬性:

color:顏色

width:寬度

size:高度

align:對齊方式

center:居中

left:左對齊

right:右對齊

<b>:字體加粗

<i>:字體斜體

<font>:字體標簽

屬性:

color:顏色

size:大小

face:字體

<center>:文本居中

屬性定義:

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. 數(shù)值:width='20' ,數(shù)值的單位视搏,默認是 px(像素)

2. 數(shù)值%:占比相對于父元素的比例

3. 圖片標簽:

img:展示圖片

屬性:

src:指定圖片的位置

代碼:

<img src="image/jingxuan_2.jpg" align="right" alt="古鎮(zhèn)" width="500" height="500"/>

相對路徑

以.開頭的路徑

./:代表當前目錄 ./image/1.jpg

../:代表上一級目錄

當前目錄

<img src="./image/jiangwai_1.jpg">

上一級目錄

<img src="../image/jiangwai_1.jpg">

4. 列表標簽:

有序列表:

ol:

li:

格式

<0l type = ".." start = "..">

<li> ... </li>

<0l>

無序列表:(disc ,square疲恢,circle)

ul:

li:

格式

<ul type = ".." >

<li> ... </li>

<ul>

5. 鏈接標簽:<a>

:定義一個超鏈接

屬性:

href:指定訪問資源的URL(統(tǒng)一資源定位符)

target:指定打開資源的方式

_self:默認值凶朗,在當前頁面打開

_blank:在空白頁面打開

格式:

<a target="_self 或者 _blank">點我</a>

鏈接地址可以為發(fā)送郵箱

<a href="mailto:itcast@itcast.cn">聯(lián)系我們</a>

可以為本地中的html文件

<a href="./5_列表標簽.html">列表標簽</a>

圖片鏈接:

<a ><img src="image/jiangwai_1.jpg"></a>

6. div和span:

div:每一個div占滿一整行。塊級標簽

span:文本信息在一行展示显拳,行內(nèi)標簽 內(nèi)聯(lián)標簽

7. 語義化標簽:html5中為了提高程序的可讀性棚愤,提供了一些標簽。

1. <header>:頁眉

2. <footer>:頁腳

8. 表格標簽:

table:定義表格

屬性

width:寬度

border:邊框

cellpadding:定義內(nèi)容和單元格的距離

cellspacing:定義單元格之間的距離杂数。如果指定為0宛畦,則單元格的線會合為一條、

bgcolor:背景色

align:對齊方式

子標簽

tr:定義行

屬性

bgcolor:背景色

align:對齊方式

td:定義單元格

屬性

colspan:合并列

rowspan:合并行

th:定義表頭單元格

<caption>:表格標題

<thead>:表示表格的頭部分

<tbody>:表示表格的體部分

<tfoot>:表示表格的腳部分

注:頭體腳 將表分為三個部分揍移,互不影響次和,比如無法合并兩個不同部位的表單元格

HTML表單標簽:

概念:用于采集用戶輸入的數(shù)據(jù)的。用于和服務器進行交互那伐。

form:用于定義表單的踏施。可以定義一個范圍罕邀,范圍代表采集用戶數(shù)據(jù)的范圍

屬性:

action:指定提交數(shù)據(jù)的URL

method:指定提交方式

分類:一共7種畅形,2種比較常用

get:

1. 請求參數(shù)會在地址欄中顯示。會封裝到請求行中(HTTP協(xié)議后講解)诉探。

2. 請求參數(shù)大小是有限制的日熬。

3. 不太安全。

post:

2. 請求參數(shù)不會再地址欄中顯示肾胯。會封裝在請求體中(HTTP協(xié)議后講解)

2. 請求參數(shù)的大小沒有限制竖席。

3. 較為安全。

格式:

<form action="#" method="post/get">

用戶名:<input type="text" name="username">

密碼:<input name="password">

<input type="submit" value="登錄" >

</form>

注: name屬性必須聲明敬肚,否則無法提交

表單項中的數(shù)據(jù)要想被提交:必須指定其name屬性

表單項標簽:

input:可以通過type屬性值毕荐,改變元素展示的樣式

type屬性:

{

text:文本輸入框,默認值

placeholder:顯示 提示輸入信息

password:密碼輸入框

radio:單選框

注意:

要想讓多個單選框?qū)崿F(xiàn)單選的效果艳馒,則多個單選框的name屬性值必須一樣东跪。

一般會給每一個單選框提供value屬性,指定其被選中后提交的值

checked屬性鹰溜,可以指定默認值

checkbox:復選框

注意:

一般會給每一個單選框提供value屬性,指定其被選中后提交的值

checked屬性丁恭,可以指定默認值

file:文件選擇框

hidden:隱藏域曹动,用于提交一些信息。

按鈕:

submit:提交按鈕牲览∧钩拢可以提交表單

button:普通按鈕

image:圖片提交按鈕

屬性src:屬性指定圖片的路徑

}

label標簽:指定輸入項的文字描述信息

屬性

for

注意:

label的for屬性一般會和 input 的 id屬性值 對應。如果對應了,則點擊label區(qū)域贡必,會讓input輸入框獲取焦點兔港。

select標簽: 下拉列表

子標簽option:指定列表項

textarea標簽:文本域

屬性

cols:指定列數(shù),每一行有多少個字符

rows:默認多少行仔拟。


CSS

1. 內(nèi)聯(lián)樣式

在標簽內(nèi)使用style屬性指定css代碼

如:<div style="color:red;">hello css</div>

2. 內(nèi)部樣式

在head標簽內(nèi)衫樊,定義style標簽,style標簽的標簽體內(nèi)容就是css代碼

如:

<style>

div{

color:blue;

}

</style>

<div>hello css</div>

3. 外部樣式

①. 定義css資源文件利花。

②. 在head標簽內(nèi)科侈,定義link標簽,引入外部的資源文件

a.css文件:

div{

color:green;

}

<link rel="stylesheet" href="css/a.css">

<div>hello css</div>

<div>hello css</div>

  • 注意:

1,2,3種方式 css作用范圍越來越大

*1方式不常用炒事,后期常用2,3

第3種格式可以寫為:

<style>

@import "css/a.css";

</style>

4. css語法:

格式:

選擇器 {

屬性名1:屬性值1;

屬性名2:屬性值2;

...

}

選擇器:篩選具有相似特征的元素

注意:

每一對屬性需要使用臀栈;隔開,最后一對屬性可以不加挠乳;

5. 選擇器:篩選具有相似特征的元素

1. 基礎選擇器

①. id選擇器:選擇具體的id屬性值的元素.建議在一個html頁面中id值唯一

語法:#id屬性值{}

②. 元素選擇器:選擇具有相同標簽名稱的元素

語法: 標簽名稱{}

注意:id選擇器優(yōu)先級高于元素選擇器

③. 類選擇器:選擇具有相同的class屬性值的元素权薯。

語法:.class屬性值{}

注意:類選擇器選擇器優(yōu)先級高于元素選擇器

2. 擴展選擇器:

①. 選擇所有元素:

語法: *{}

②. 并集選擇器:

選擇器1,選擇器2{}

③. 子選擇器:篩選選擇器1元素下的選擇器2元素

語法: 選擇器1 選擇器2{}

④. 父選擇器:篩選選擇器2的父元素選擇器1

語法: 選擇器1 > 選擇器2{}

⑤. 屬性選擇器:選擇元素名稱,屬性名=屬性值的元素

語法: 元素名稱[屬性名="屬性值"]{}

⑥. 偽類選擇器:選擇一些元素具有的狀態(tài)

語法: 元素:狀態(tài){}

如: <a>

狀態(tài):

link:初始化的狀態(tài)

hover:鼠標懸浮狀態(tài)

active:正在訪問狀態(tài)

visited:被訪問過的狀態(tài)

css屬性

1. 字體睡扬、文本

font-size:字體大小

color:文本顏色

text-align:對其方式 right left 左右對齊

line-height:行高

vertical-align: middle;垂直居中

2. 背景

background:顏色 / url("圖片圖片位置") no-repeat(去重) center(擺放位置)

3. 邊框

border:設置邊框大小(1px) 符合屬性solid 顏色

border-radius: 3px; 設置邊角圓

4. 尺寸

width:寬度

height:高度

5. 盒子模型:控制布局

margin:外邊距 auto(居中) (僅僅適用于div盟蚣,d對于已經(jīng)使用了float的div也不管用)

padding:內(nèi)邊距

margin/padding-left :左邊距

margin/padding-right :右邊距

margin/paddingt-rop:上邊距

注:默認情況下內(nèi)邊距會影響整個盒子的大小

box-sizing: border-box : 設置盒子的屬性,讓width和height就是最終盒子的大小

float:浮動(left威蕉,right)


JavaScript

概念:一門客戶端腳本語言

運行在客戶端瀏覽器中的刁俭。每一個瀏覽器都有JavaScript的解析引擎

腳本語言:不需要編譯,直接就可以被瀏覽器解析執(zhí)行了

JavaScript = ECMAScript + JavaScript自己特有的東西(BOM+DOM)

ECMAScript:客戶端腳本語言的標準

1.基本語法: 與html結合方式

1. 內(nèi)部JS:

定義<script>標簽韧涨,標簽體內(nèi)容就是js代碼

2. 外部JS:

定義<script src="xxxx.js">牍戚,通過src屬性引入外部的js文件

2. 注釋

1. 單行注釋://注釋內(nèi)容

2. 多行注釋:/注釋內(nèi)容/

3. 數(shù)據(jù)類型:

原始數(shù)據(jù)類型(基本數(shù)據(jù)類型):

1. number:數(shù)字。 整數(shù)/小數(shù)/NaN(not a number 一個不是數(shù)字的數(shù)字類型)

2. string:字符串虑粥。 字符串 "abc" "a" 'abc'

3. boolean: true和false

4. null:一個對象為空的占位符

5. undefined:未定義如孝。如果一個變量沒有給初始化值,則會被默認賦值為undefined

引用數(shù)據(jù)類型:對象

4. 變量

變量:一小塊存儲數(shù)據(jù)的內(nèi)存空間

java語言是強類型語言娩贷,而JavaScript是弱類型語言第晰。

強類型:在開辟變量存儲空間時,定義了空間將來存儲的數(shù)據(jù)的數(shù)據(jù)類型彬祖。只能存儲固定類型的數(shù)據(jù).

弱類型:在開辟變量存儲空間時茁瘦,不定義空間將來的存儲數(shù)據(jù)類型,可以存放任意類型的數(shù)據(jù)储笑。

語法:

var 變量名 = 初始化值;

typeof()運算符:獲取變量的類型甜熔。

注:null值運算后得到的值是object類型,默認為undefined(類型為undefined值也為undefined)

5. 運算符

一元運算符:只有一個運算數(shù)的運算符

++(--) 在前突倍,先自增(自減)腔稀,再運算

++(--) 在后盆昙,先運算,再自增(自減)

+(-):正負號

注:使用醫(yī)院運算符焊虏,會使其他類型的變量轉(zhuǎn)化為number型

其他類型轉(zhuǎn)number:

string轉(zhuǎn)number:按照字面值轉(zhuǎn)換淡喜。如果字面值不是數(shù)字,則轉(zhuǎn)為NaN(不是數(shù)字的數(shù)字),null轉(zhuǎn)為0诵闭,undefined為NaN

boolean轉(zhuǎn)number:true轉(zhuǎn)為1馏鹤,false轉(zhuǎn)為0

算數(shù)運算符

      • / % ...

除String為連接(加一元運算符時也為相加)虏冻,其他類型運算以number類型為橋梁計算結果。

賦值運算符

= += -+....

比較運算符

< >= <= == ===(全等于)

*比較方式

1. 類型相同:直接比較

字符串:按照字典順序比較。按位逐一比較磅轻,直到得出大小為止赏壹。

2. 類型不同:先進行類型轉(zhuǎn)換以number型為橋梁璧眠,再比較渠鸽。NAN和任何比較都為false.null只和null相比才返回true

===:全等于。在比較之前踩衩,先判斷類型嚼鹉,如果類型不一樣,則直接返回false

邏輯運算符

&& || !

其他類型轉(zhuǎn)boolean:

1. number:0或NaN為假驱富,其他為真

2. string:除了空字符串("")锚赤,其他都是true

3. null&undefined:都是false

4. 對象:所有對象都為true

三元運算符

語法:

表達式? 值1:值2;

判斷表達式的值,如果是true則取值1褐鸥,如果是false則取值2线脚;

6. 流程控制語句:

1. if...else...

2. switch:

在java中,switch語句可以接受的數(shù)據(jù)類型: byte int shor char,枚舉(1.5) ,String(1.7)

  • switch(變量):

case 值:

在JS中,switch語句可以接受任意的原始數(shù)據(jù)類型

3. while

4. do...while

5. for

7. JS特殊語法:

1. 語句以;結尾叫榕,如果一行只有一條語句則 ;可以省略 (不建議)

2. 變量的定義使用var關鍵字浑侥,也可以不使用

用var: 定義的變量是局部變量

不用var:定義的變量是全局變量(不建議)

8. 對象

基本對象:

1. Function:函數(shù)(方法)對象

創(chuàng)建:

方式一

var fun = new Function(形式參數(shù)列表,方法體);

方式二

function 方法名稱(形式參數(shù)列表){

方法體

}

方式三

var 方法名 = function(形式參數(shù)列表){

方法體

}

屬性:

length:代表形參的個數(shù)

特點:

1. 方法是一個對象,如果定義名稱相同的方法晰绎,會覆蓋

2. 參數(shù)可以放任意個數(shù),未賦值的賦值為默認值寓落,多賦的值也會放入arguments數(shù)組中.

3. 在方法聲明中有一個隱藏的數(shù)組,arguments,封裝所有的實際參數(shù)

調(diào)用:

方法名稱(參數(shù)1,參數(shù)2....);

2. Array:數(shù)組對象

創(chuàng)建:

1. var arr = new Array(元素列表);

2. var arr = new Array(默認長度);

3. var arr = [元素列表];

方法

join(參數(shù)):將數(shù)組中的元素按照指定的分隔符拼接為字符串默認為逗號

push() 向數(shù)組的末尾添加一個或更多元素荞下,并返回新的長度伶选。

屬性

length:數(shù)組的長度

特點:

1. JS中,數(shù)組元素的類型可變的尖昏。

2. JS中仰税,數(shù)組長度可變的。

3. Boolean

4. Date:日期對象

創(chuàng)建:

var date = new Date();

方法:

toLocaleString():返回當前date對象對應的時間本地字符串格式

getTime():獲取毫秒值抽诉。返回當前如期對象描述的時間到1970年1月1日零點的毫秒值差

5. Math(工具對象不需要創(chuàng)建對象):數(shù)學對象

方法:

random():返回 0 ~ 1 之間的隨機數(shù)肖卧。 含0不含1

ceil(x):對數(shù)進行上舍入。

floor(x):對數(shù)進行下舍入掸鹅。

round(x):把數(shù)四舍五入為最接近的整數(shù)塞帐。

屬性:

PI

6. Number

7. String

8. RegExp:正則表達式對象

正則表達式:定義字符串的組成規(guī)則。

1. 單個字符:[]

如: [a] [ab] [a-zA-Z0-9_]

  • 特殊符號代表特殊含義的單個字符:

\d:代表單個數(shù)字字符 [0-9]

\w:代表單個單詞字符[a-zA-Z0-9_]

2. 量詞符號:

?:表示字符個數(shù)0個或1個

*:表示字符個數(shù)0個或多個

+:字符1個數(shù)個或多個

{m,n}:表示 m<= 字符數(shù)量 <= n

{,n}:最多n個

{m,} 最少m個

3. 開始結束符號

  • ^:開始

  • $:結束

[a-z]:字符只能是a-z中的字符

[a-z]{X,Y}:字符串中只能出現(xiàn)a-z中的字符巍沙,且總個數(shù)不能超出X-Y的范圍

2. 正則對象:

1. 創(chuàng)建

1. var reg = new RegExp("^\表達式$");

2. var reg = /^\正則表達式$/;

2. 方法

test(參數(shù)):驗證指定的字符串是否符合正則定義的規(guī)范

9. Global

特點:全局對象葵姥,這個Global中封裝的方法不需要對象就可以直接調(diào)用。 方法名();

方法:

encodeURI():url編碼

decodeURI():url解碼

encodeURIComponent():url編碼,編碼的字符更多

decodeURIComponent():url解碼

parseInt():將字符串轉(zhuǎn)為數(shù)字

isNaN():判斷一個值是否是NaN

eval():將 字符串解析句携,并把它作為腳本代碼來執(zhí)行榔幸。

9.BOM對象

概念:Browser Object Model 瀏覽器對象模型

  • 將瀏覽器的各個組成部分封裝成對象。

2. 組成:

  • Window:窗口對象

  • Navigator:瀏覽器對象

  • Screen:顯示器屏幕對象

  • History:歷史記錄對象

  • Location:地址欄對象

3. Window:窗口對象

方法

1. 與彈出框有關的方法:

alert() 顯示帶有一段消息和一個確認按鈕的警告框矮嫉。

confirm() 顯示帶有一段消息以及確認按鈕和取消按鈕的對話框削咆。

  • 如果用戶點擊確定按鈕,則方法返回true

  • 如果用戶點擊取消按鈕蠢笋,則方法返回false

prompt("顯示的文字") 顯示可提示用戶輸入的對話框拨齐。

  • 返回值:獲取用戶輸入的值

2. 與打開關閉有關的方法:

close() 關閉瀏覽器窗口。

open() 打開一個新的瀏覽器窗口

返回新的Window對象

3. 與定時器有關的方式

var i = setTimeout( 方法名 /"完整的執(zhí)行語句;" , 毫秒):按照指定的時間調(diào)用一次函數(shù)貨方法

  • 返回值:唯一標識昨寞,用于取消定時器

clearTimeout(i) 取消由 setTimeout() 方法設置的 timeout瞻惋。

setInterval() 按照指定的周期(以毫秒計)來循環(huán)調(diào)用函數(shù)或計算表達式。

兩種參數(shù)寫法 ("完整的執(zhí)行語句 fun(a);" , 毫秒數(shù))

(方法名援岩,毫秒數(shù))

clearInterval() 取消由 setInterval() 設置的 timeout歼狼。

屬性

1. 獲取其他BOM對象:(通過window窗口 . 屬性調(diào)用,本窗口可以省略window)

history

location

Navigator

Screen:

2. 獲取DOM對象

document

Location:地址欄對象

方法:

reload() 重新加載當前文檔享怀。刷新

屬性

href = "htttp://www.xxx.com" 本窗口跳轉(zhuǎn)或返回完整的 URL地址羽峰。

History:本窗口歷史記錄對象

1. 創(chuàng)建(獲取):

1. window.history

2. history

2. 方法:

back() 加載 history 列表中的前一個 URL。

forward() 加載 history 列表中的下一個 URL添瓷。

go(參數(shù)) 根據(jù)參數(shù)正負值前進或后退

參數(shù):

正數(shù):前進幾個歷史記錄

負數(shù):后退幾個歷史記錄

3. 屬性:

length 返回當前窗口歷史列表中的 URL 數(shù)量梅屉。

10.DOM對象

document.getElementById("id值"):通過元素的id獲取元素對象。

Document:文檔對象

1. 創(chuàng)建(獲取):在html dom模型中可以使用window對象來獲取

1. window.document

2. document

2. 方法:

獲取元素對象:

1. getElementById() : 根據(jù)id屬性值獲取元素對象仰坦。id屬性值一般唯一

2. getElementsByTagName():根據(jù)元素名稱獲取元素對象們履植。返回值是數(shù)組

3. getElementsByClassName():根據(jù)Class屬性值獲取元素對象們。返回值是數(shù)組

4. getElementsByName(): 根據(jù)name屬性值獲取元素對象們悄晃。返回值是數(shù)組

創(chuàng)建并獲取元素對象:

createAttribute(name) (節(jié)點元素)

createComment() (注釋元素)

createElement("內(nèi)容") (標簽元素)

createTextNode("標簽類型") (標簽內(nèi)容元素)

3. 屬性

Element:元素對象

1. 獲取/創(chuàng)建:

通過document來獲取和創(chuàng)建

2. 方法:

removeAttribute():刪除屬性

setAttribute():設置屬性

Node:節(jié)點對象玫霎,其他5個的父對象

特點:所有dom對象都可以被認為是一個節(jié)點

方法:

appendChild():向節(jié)點的子節(jié)點列表的結尾添加新的子節(jié)點。

removeChild() :刪除(并返回)當前節(jié)點的指定子節(jié)點妈橄。

replaceChild():用新節(jié)點替換一個子節(jié)點庶近。

屬性:

parentNode :返回節(jié)點的父元素對象。

innerHTML:設置標簽體內(nèi)容和返回標簽體內(nèi)容

元素對象的標簽屬性 style className id ......

HTML DOM

1. 標簽體的設置和獲染祢尽:innerHTML

3. 控制元素樣式

方式一:使用元素的style屬性來設置

div1.style.border = "1px solid red";

div1.style.width = "200px";

div1.style.fontSize = "20px";

方式二:提前定義好類選擇器的樣式鼻种,通過元素的className屬性來設置其class屬性值。

div1.className = "樣式類名"

11.事務

概念:

某些組件被執(zhí)行了某些操作后沙热,觸發(fā)某些代碼的執(zhí)行叉钥。

事件:某些操作罢缸。如: 單擊,雙擊投队,鍵盤按下了枫疆,鼠標移動了

事件源:組件。如: 按鈕 文本輸入框...

監(jiān)聽器:代碼敷鸦。

監(jiān)聽:將事件息楔,事件源,監(jiān)聽器結合在一起扒披。 當事件源上發(fā)生了某個事件值依,則觸發(fā)執(zhí)行某個監(jiān)聽器代碼。

onclick--- 單擊事件:(通過點擊元素觸發(fā) 事件(方法))

var fun = Function(){

.......

}

使用方法一:

<img src = "XXX" id= ""img onclick = "完整的執(zhí)行語句 fun(參數(shù));">

使用方法二:

var i = document.getElementById("img");

i.onclick = fun(方法名); (通過元素對象修改屬性使用)

注:方法二常用碟案,并且常規(guī)寫法為

i.onclick = function(){

.....

}

常見的事件:

1. 點擊事件:

1. onclick:單擊事件

2. ondblclick:雙擊事件

2. 焦點事件

1. onblur:失去焦點

2. onfocus:元素獲得焦點愿险。

3. 加載事件:

1. onload:一張頁面或一幅圖像完成加載。

4. 鼠標事件:

1. onmousedown 鼠標按鈕被按下蟆淀。

2. onmouseup 鼠標按鍵被松開拯啦。

3. onmousemove 鼠標被移動。

4. onmouseover 鼠標移到某元素之上熔任。

5. onmouseout 鼠標從某元素移開褒链。

[圖片上傳失敗...(image-beff2e-1570967628030)]

5. 鍵盤事件:

1. onkeydown 某個鍵盤按鍵被按下。

2. onkeyup 某個鍵盤按鍵被松開疑苔。

3. onkeypress 某個鍵盤按鍵被按下并松開甫匹。

[圖片上傳失敗...(image-f24077-1570967628030)]

6. 選擇和改變

1. onchange 域的內(nèi)容被改變。

2. onselect 文本被選中惦费。

7. 表單事件:

1. onsubmit 確認按鈕被點擊兵迅。

2. onreset 重置按鈕被點擊。

若需要觸發(fā)事件的元素對象較多薪贫,可配合for循環(huán)使用

for (var i =0;i<alltr.length;i++){

alltr[i].onmouseover = function () { //當鼠標位于元素時恍箭,所有tr元素class改為red

this.className = "red";

}

alltr[i].onmouseout = function () { //當鼠標移開元素時 所有tr元素class改為 nored

this.className = "nored";

}

}

————————————————————————————————————————————

BootStrap

概念: 一個前端開發(fā)的框架,Bootstrap瞧省,來自 Twitter扯夭。Bootstrap 是基于 HTML、CSS鞍匾、JavaScript 的交洗,它簡潔靈活,使得 Web 開發(fā)更加快捷橡淑。

功能:

使同一套頁面可以兼容不同分辨率的設備构拳。

快速入門

1. 下載Bootstrap

2. 將Bootstrap中三個文件夾復制項目中

3. 創(chuàng)建html頁面,引入必要的資源文件

基礎格式

①定義容器 將class值設為 container 兩邊留白 / container-fluid 每行格數(shù)占滿整行

②定義行 在設置一個容器將class值設為 row

③定義元素所占格數(shù)

定義標簽元素并設class值為 col - 適用像素 - 該元素所占格數(shù) class名

使用像素種類:

lg:大屏幕

md:中屏幕

sm:小屏幕

xs:手機屏幕

注:每行格數(shù)上限為12,占滿后自動換行

適用像素向大兼容置森,如col - xs - 1 將屏幕放大 此元素所占仍為一格

無法向小兼容斗埂,無論所占格數(shù)為多少,將屏幕縮小至適用像素以下后每個元素 都占一行

步驟:

<!DOCTYPE html>

<html lang="zh-CN">

<head>

<meta charset="utf-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge">

<meta name="viewport" content="width=device-width, initial-scale=1">

<title>Bootstrap 101 Template</title>

<link href="css/bootstrap.min.css" rel="stylesheet">

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

<script src="js/bootstrap.min.js"></script>

<style>

.gos{

border: 1px solid red;

}

</style>

</head>

<body>

<div class="container/container-fluid"> 定義容器

<div class="row"> 定義行(一行為12格)

<div class="col-sm-1 gos">1</div> 設置元素并設置其所占格數(shù)

<div class="col-lg-1 gos">1</div>

</div>

</div>

</body>

</html>

圖片整行樣式

<img class = img-responsive"">

邊框樣式

<div class="thumbnail">

具體各種Bootstrap樣式模板進入索引觀看

————————————————————————————————————————————

XML

概念:標簽都是自定義的暇藏。 <user> <student>

功能 存儲數(shù)據(jù)

配置文件

在網(wǎng)絡中傳輸

xml與html的區(qū)別

1. xml標簽都是自定義的蜜笤,html標簽是預定義。

2. xml的語法嚴格盐碱,html語法松散

3. xml是存儲數(shù)據(jù)的,html是展示數(shù)據(jù)

語法:

基本語法:

xml文檔的后綴名 .xml

xml第一行必須定義為文檔聲明

xml文檔中有且僅有一個根標簽

屬性值必須使用引號(單雙都可)引起來

標簽必須正確關閉

xml標簽名稱區(qū)分大小寫

快速入門:

<?xml version='1.0' ?>

<users>

<user id='1'>

<name>zhangsan</name>

<age>23</age>

<gender>male</gender>


</user>

<user id='2'>

<name>lisi</name>

<age>24</age>

<gender>female</gender>

</user>

</users>

組成部分:

1. 文檔聲明

1. 格式:<?xml 屬性列表 ?>

2. 屬性列表:

version:版本號沪伙,必須的屬性

encoding:編碼方式瓮顽。默認值:ISO-8859-1

standalone:是否獨立 yes/no

yes:不依賴其他文件

no:依賴其他文件

2. 指令(了解):結合css的

<?xml-stylesheet type="text/css" href="a.css" ?>

3. 標簽:標簽名稱自定義的

規(guī)則:

  • 名稱可以包含字母、數(shù)字以及其他的字符

  • 名稱不能以數(shù)字或者標點符號開始

  • 名稱不能以字母 xml(或者 XML围橡、Xml 等等)開始

  • 名稱不能包含空格

5. 文本:

CDATA區(qū):在該區(qū)域中的數(shù)據(jù)會被原樣展示

若要使用邏輯語句.則需要放入CDATA 區(qū)中

格式: <![CDATA[ 邏輯語句]]>

約束:規(guī)定xml文檔的書寫規(guī)則

分類:

DTD:一種簡單的約束技術

Schema:一種復雜的約束技術

DTD:(dtd文件)

引入dtd文檔到xml文檔中

內(nèi)部dtd:將約束規(guī)則定義在xml文檔中

<!DOCTYPE 根標簽名 SYSTEM [ DTD約束語句 ]>

外部dtd:將約束的規(guī)則定義在外部的dtd文件中

本地:<!DOCTYPE 根標簽名 SYSTEM "dtd文件的位置">

網(wǎng)絡:<!DOCTYPE 根標簽名 PUBLIC "dtd文件名字" "dtd文件的位置URL">

Schema: (xsd文件)

引入:

1.填寫xml文檔的根元素

2.引入xsi前綴. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

3.引入xsd文件命名空間. xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"

4.為每一個xsd約束聲明一個前綴,作為標識 xmlns="http://www.itcast.cn/xml"

<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns(此處可加便簽)="http://www.itcast.cn/xml"

xsi:schemaLocation="http://www.itcast.cn/xml student.xsd">

注明調(diào)用該標簽的元素被改標簽的schema約束

解析:操作xml文檔暖混,將文檔中的數(shù)據(jù)讀取到內(nèi)存中

解析xml的方式:

1. DOM:將標記語言文檔一次性加載進內(nèi)存,在內(nèi)存中形成一顆dom樹

優(yōu)點:操作方便翁授,可以對文檔進行CRUD的所有操作

缺點:占內(nèi)存

2. SAX:逐行讀取拣播,基于事件驅(qū)動的。

優(yōu)點:不占內(nèi)存收擦。

缺點:只能讀取贮配,不能增刪改

xml常見的解析器:

JAXP:sun公司提供的解析器,支持dom和sax兩種思想

DOM4J:一款非常優(yōu)秀的解析器

PULL:Android操作系統(tǒng)內(nèi)置的解析器塞赂,sax方式的泪勒。

Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址宴猾、HTML文本內(nèi)容圆存。它提供了一套非常省力的API,可通過DOM仇哆,CSS以及類似于jQuery的操作方法來取出和操作數(shù)據(jù)沦辙。

Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址讹剔、HTML文本內(nèi)容油讯。它提供了一套非常省力的API,可通過DOM辟拷,CSS以及類似于jQuery的操作方法來取出和操作數(shù)據(jù)撞羽。

快速入門:

步驟:

1. 導入jar包

2. 獲取Document對象

3. 獲取對應的標簽Element對象

4. 獲取數(shù)據(jù)

代碼:

獲取xml文件路徑

String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();

解析xml文檔,加載文檔進內(nèi)存衫冻,獲取dom樹--->Document

Document document = Jsoup.parse(new File(path), "utf-8");

獲取元素對象 Element

Elements elements = document.getElementsByTag("name");

對象的使用:

1. Jsoup:工具類诀紊,可以解析html或xml文檔,返回Document

解析方法 parse解析html或xml文檔隅俘,返回Document

parse?(File in, String charsetName):解析xml或html文件的邻奠。

parse?(String html):解析xml或html字符串

parse?(URL url, int timeoutMillis):通過網(wǎng)絡路徑獲取指定的html或xml的文檔對象

2. Document:文檔對象笤喳。代表內(nèi)存中的dom樹

獲取Element對象

getElementById?(String id):根據(jù)id屬性值獲取唯一的element對象

getElementsByTag?(String tagName):根據(jù)標簽名稱獲取元素對象集合

getElementsByAttribute?(String key):根據(jù)屬性名稱獲取元素對象集合

getElementsByAttributeValue?(String key, String value):根據(jù)對應的屬性名和屬性值獲取元素對象集合

3. Elements:元素Element對象的集合÷笛纾可以當做 ArrayList<Element>來使用

4. Element:元素對象

獲取子元素對象

getElementById?(String id):根據(jù)id屬性值獲取唯一的element對象

getElementsByTag?(String tagName):根據(jù)標簽名稱獲取元素對象集合

getElementsByAttribute?(String key):根據(jù)屬性名稱獲取元素對象集合

getElementsByAttributeValue?(String key, String value):根據(jù)對應的屬性名和屬性值獲取元素對象集合

獲取屬性值

String attr(String key):根據(jù)屬性名稱獲取屬性值

獲取文本內(nèi)容

String text():獲取文本內(nèi)容

String html():獲取標簽體的所有內(nèi)容(包括字標簽的字符串內(nèi)容)

5. Node:節(jié)點對象

是Document和Element的父類

快捷查詢方式

selector:選擇器

使用的方法:Elements select?(String cssQuery(選擇器語句))

選擇器語句:

div

id

.class

div p

div > p

div[class = ' cl ' ]

XPath:XPath即為XML路徑語言杀狡,它是一種用來確定XML(標準通用標記語言的子 集)文檔中某部分位置的語言

使用Jsoup的Xpath需要額外導入jar包。

查詢w3cshool參考手冊贰镣,使用xpath的語法完成查詢

———————————————————————————————————————————

web服務器軟件:Tomcat

服務器:安裝了服務器軟件的計算機

服務器軟件:接收用戶的請求呜象,處理請求,做出響應

web服務器軟件:接收用戶的請求碑隆,處理請求恭陡,做出響應。

在web服務器軟件中上煤,可以部署web項目休玩,讓用戶通過瀏覽器來訪問這些項目

web容器

常見的java相關的web服務器軟件:

webLogic:oracle公司,大型的JavaEE服務器劫狠,支持所有的JavaEE規(guī)范拴疤,收費的。

webSphere:IBM公司独泞,大型的JavaEE服務器呐矾,支持所有的JavaEE規(guī)范,收費的阐肤。

JBOSS:JBOSS公司的凫佛,大型的JavaEE服務器,支持所有的JavaEE規(guī)范孕惜,收費的愧薛。

Tomcat:Apache基金組織,中小型的JavaEE服務器衫画,僅僅支持少量的JavaEE規(guī)范servlet/jsp毫炉。開源的,免費的削罩。

JavaEE:Java語言在企業(yè)級開發(fā)中使用的技術規(guī)范的總和瞄勾,一共規(guī)定了13項大的規(guī)范

Tomcat:web服務器軟件

1. 下載:http://tomcat.apache.org/

2. 安裝:解壓壓縮包即可。

  • 注意:安裝目錄建議不要有中文和空格

3. 卸載:刪除目錄就行了

4. 啟動:

bin/startup.bat ,雙擊運行該文件即可

訪問:瀏覽器輸入:http://localhost:8080 回車訪問自己

http://別人的ip:8080 訪問別人

6. 配置:

部署項目的方式:

1. 直接將項目放到webapps目錄下即可弥激。

hello:項目的訪問路徑-->虛擬目錄

簡化部署:將項目打成一個war包进陡,再將war包放置到webapps目錄下。

  • war包會自動解壓縮

2. 配置conf/server.xml文件

在<Host>標簽體中配置

<Context docBase="D:\hello" path="/hehe" />

docBase:項目存放的路徑

path:虛擬目錄

3. 在conf\Catalina\localhost創(chuàng)建任意名稱的xml文件微服。在文件中編寫

<Context docBase="D:\hello" />

虛擬目錄:xml文件的名稱

靜態(tài)項目和動態(tài)項目:

目錄結構

java動態(tài)項目的目錄結構:

-- 項目的根目錄

-- WEB-INF目錄:

-- web.xml:web項目的核心配置文件

-- classes目錄:放置字節(jié)碼文件的目錄

-- lib目錄:放置依賴的jar包

————————————————————————————————————————————

Servlet: server applet

概念:運行在服務器端的小程序

Servlet就是一個接口趾疚,定義了Java類被瀏覽器訪問到(tomcat識別)的規(guī)則。

將來我們自定義一個類,實現(xiàn)Servlet接口糙麦,復寫方法辛孵。

若無法使用server相關結構則導入tomcat中l(wèi)ib目錄下server的jar包

快速入門:

1. 創(chuàng)建JavaEE項目

2. 定義一個類,實現(xiàn)Servlet接口

3. 實現(xiàn)接口中的抽象方法

4. 配置Servlet

在web.xml中配置:

<servlet>

<servlet-name>demo1</servlet-name>

<servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>demo1</servlet-name>

<url-pattern>/demo1</url-pattern>

</servlet-mapping>

執(zhí)行原理:

1. 當服務器接受到客戶端瀏覽器的請求后赡磅,會解析請求URL路徑魄缚,獲取訪問的Servlet的資源路徑

2. 查找web.xml文件,是否有對應的<url-pattern>標簽體內(nèi)容焚廊。

3. 如果有冶匹,則在找到對應的<servlet-class>全類名

4. tomcat會將字節(jié)碼文件加載進內(nèi)存,并且創(chuàng)建其對象

5. 調(diào)用其方法

Servlet中的生命周期方法:

1. 被創(chuàng)建:執(zhí)行init方法咆瘟,只執(zhí)行一次

Servlet什么時候被創(chuàng)建徙硅?

默認情況下,第一次被訪問時搞疗,Servlet被創(chuàng)建

可以配置執(zhí)行Servlet的創(chuàng)建時機。

在<servlet>標簽下配置

1. 第一次被訪問時须肆,創(chuàng)建

<load-on-startup>的值為負數(shù)

2. 在服務器啟動時匿乃,創(chuàng)建

<load-on-startup>的值為0或正整數(shù)

Servlet的init方法,只執(zhí)行一次豌汇,說明一個Servlet在內(nèi)存中只存在一個對象幢炸,Servlet是單例的

多個用戶同時訪問時,可能存在線程安全問題拒贱。

解決:盡量不要在Servlet中定義成員變量宛徊。即使定義了成員變量,也不要對修改值

2. 提供服務:執(zhí)行service方法逻澳,執(zhí)行多次

每次訪問Servlet時闸天,Service方法都會被調(diào)用一次。

3. 被銷毀:執(zhí)行destroy方法斜做,只執(zhí)行一次

Servlet被銷毀時執(zhí)行苞氮。服務器關閉時,Servlet被銷毀

只有服務器正常關閉時瓤逼,才會執(zhí)行destroy方法笼吟。

destroy方法在Servlet被銷毀之前執(zhí)行,一般用于釋放資源

Servlet3.0:

好處:

支持注解配置霸旗〈铮可以不需要web.xml了。

步驟:

1. 創(chuàng)建JavaEE項目诱告,選擇Servlet的版本3.0以上撵枢,可以不創(chuàng)建web.xml

2. 定義一個類,實現(xiàn)Servlet接口

3. 復寫方法

4. 在類上使用@WebServlet注解,進行配置

Servlet的體系結構

Servlet -- 接口

|

GenericServlet -- 抽象類

|

HttpServlet -- 抽象類

GenericServlet:將Servlet接口中其他的方法做了默認空實現(xiàn)诲侮,只將service()方法作為抽象

將來定義Servlet類時镀虐,可以繼承GenericServlet,實現(xiàn)service()方法即可

HttpServlet:對http協(xié)議的一種封裝沟绪,簡化操作

定義類繼承HttpServlet

復寫doGet/doPost方法

Servlet相關配置

1. urlpartten:Servlet訪問路徑

一個Servlet可以定義多個訪問路徑 : @WebServlet({"/d4","/dd4","/ddd4"})

路徑定義規(guī)則:

/xxx:路徑匹配

/xxx/xxx:多層路徑刮便,目錄結構

*.do:擴展名匹配,后綴名可任意選擇

————————————————————————————————————————————

HTTP

概念:Hyper Text Transfer Protocol 超文本傳輸協(xié)議

傳輸協(xié)議:定義了绽慈,客戶端和服務器端通信時恨旱,發(fā)送數(shù)據(jù)的格式

特點:

1. 基于TCP/IP的高級協(xié)議

2. 默認端口號:80

3. 基于請求/響應模型的:一次請求對應一次響應

4. 無狀態(tài)的:每次請求之間相互獨立,不能交互數(shù)據(jù)

歷史版本:

1.0:每一次請求響應都會建立新的連接

1.1:復用連接

請求消息數(shù)據(jù)格式

1. 請求行

請求方式 請求url 請求協(xié)議/版本

GET /login.html HTTP/1.1

請求方式:

HTTP協(xié)議有7中請求方式坝疼,常用的有2種

GET:

1. 請求參數(shù)在請求行中搜贤,在url后。

2. 請求的url長度有限制的

3. 不太安全

POST:

1. 請求參數(shù)在請求體中

2. 請求的url長度沒有限制的

3. 相對安全

2. 請求頭:客戶端瀏覽器告訴服務器一些信息

請求頭名稱: 請求頭值

常見的請求頭:

1. User-Agent:瀏覽器告訴服務器钝凶,我訪問你使用的瀏覽器版本信息

可以在服務器端獲取該頭的信息仪芒,解決瀏覽器的兼容性問題

2. Referer:http://localhost/login.html

告訴服務器,我(當前請求)從哪里來耕陷?

作用:

1. 防盜鏈:

2. 統(tǒng)計工作:

3. 請求空行

空行掂名,就是用于分割POST請求的請求頭,和請求體的哟沫。

4. 請求體(正文):

封裝POST請求消息的請求參數(shù)的

字符串格式:

POST /login.html HTTP/1.1

Host: localhost

User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

Accept-Encoding: gzip, deflate

Referer: http://localhost/login.html

Connection: keep-alive

Upgrade-Insecure-Requests: 1

username=zhangsan

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饺蔑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子嗜诀,更是在濱河造成了極大的恐慌猾警,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隆敢,死亡現(xiàn)場離奇詭異发皿,居然都是意外死亡,警方通過查閱死者的電腦和手機筑公,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門雳窟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人匣屡,你說我怎么就攤上這事封救。” “怎么了捣作?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵誉结,是天一觀的道長。 經(jīng)常有香客問我券躁,道長惩坑,這世上最難降的妖魔是什么掉盅? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮以舒,結果婚禮上趾痘,老公的妹妹穿的比我還像新娘。我一直安慰自己蔓钟,他們只是感情好永票,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著滥沫,像睡著了一般侣集。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上兰绣,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天世分,我揣著相機與錄音,去河邊找鬼缀辩。 笑死臭埋,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的臀玄。 我是一名探鬼主播斋泄,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼镐牺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起魁莉,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤睬涧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后旗唁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體畦浓,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年检疫,在試婚紗的時候發(fā)現(xiàn)自己被綠了讶请。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡屎媳,死狀恐怖夺溢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情烛谊,我是刑警寧澤风响,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站丹禀,受9級特大地震影響状勤,放射性物質(zhì)發(fā)生泄漏鞋怀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一持搜、第九天 我趴在偏房一處隱蔽的房頂上張望密似。 院中可真熱鬧,春花似錦葫盼、人聲如沸残腌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽废累。三九已至,卻和暖如春脱盲,著一層夾襖步出監(jiān)牢的瞬間邑滨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工钱反, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留掖看,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓面哥,卻偏偏與公主長得像哎壳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子尚卫,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容