日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

JavaWeb随手笔记

發(fā)布時(shí)間:2024/3/13 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaWeb随手笔记 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

HTML


規(guī)范:

①<html> ————html標(biāo)簽,整個(gè)頁(yè)面的開(kāi)始

? ②<head> ————頭標(biāo)簽(title標(biāo)題,css樣式,js代碼)

? <title>標(biāo)題</title> ————標(biāo)題

? ②</head>

? ③<body> ————內(nèi)容標(biāo)簽

? 主體內(nèi)容

? ③</body>

①</html> ————整個(gè)頁(yè)面的結(jié)束

  • <html lang="zh_CN">:表示頁(yè)面顯示中文
  • ②內(nèi):<meta charset="UTF-8">:當(dāng)前頁(yè)面的字符編碼格式

標(biāo)簽特性

  • 標(biāo)簽大小寫(xiě)不敏感

  • 標(biāo)簽擁有兩種屬性

    ①基本屬性:如bgcolor="name":設(shè)置頁(yè)面顏色

    ②事件屬性:如onclick="alect('內(nèi)容')":單擊顯示alect警告框函數(shù)內(nèi)的信息

  • 標(biāo)簽兩種分類

    ①單標(biāo)簽:如<br/>:換行、<hr/>:水平線

    ②雙標(biāo)簽:如<button>文本</button>:按鈕、<b>文本</b>:加粗

  • 標(biāo)簽語(yǔ)法

  • 標(biāo)簽之間不能交叉嵌套
  • 標(biāo)簽必須正確關(guān)閉
  • 標(biāo)簽屬性必須有值,值用" "括起來(lái)
  • 注釋不能嵌套
  • 常用標(biāo)簽


    字體標(biāo)簽


    <font>文本</font>

    • 屬性:

      color:顏色

      face:字體

      size:大小

    • 大小范圍為1~7,超出的話以7顯示

    特殊字符


    • <:&lt;

    • >:&gt;

    • (空格):&nbsp;

    標(biāo)題


    <h1>文本</h1>

    • 屬性:

      align:標(biāo)題的對(duì)其方式

      • left:左對(duì)齊,默認(rèn)
      • right:右對(duì)齊
      • center:居中
    • h1表示標(biāo)題大小為1(最大),其范圍為1~6,超出的話以文本顯示

    超鏈接


    <a>文本</a>

    • 屬性:

      href:表示鏈接的地址(http://localhost:8080/工程名/可省略)

      target:打開(kāi)鏈接的方式

      • _self:當(dāng)前頁(yè)面打開(kāi),默認(rèn)
      • _blank:新頁(yè)面打開(kāi)
      • name:根據(jù)窗口的名字,用窗口打開(kāi)

    列表標(biāo)簽


    <ul>

    ? <li>文本1</li>

    ? <li>文本2</li>

    </ul>

    • 屬性:

      type:修改列表項(xiàng)前面的符號(hào)

      • none:無(wú)符號(hào)
    • ul是無(wú)序列表,ol是有序列表,li是列表項(xiàng)

    圖片


    <img/>

    • 屬性:

      src:圖片的路徑

      • 相對(duì)路徑:相對(duì)路徑是根據(jù)當(dāng)前頁(yè)面地址欄中的地址來(lái)跳轉(zhuǎn)的

        .:當(dāng)前文件所在目錄

        ..:當(dāng)前文件的上一級(jí)目錄

        文件名:當(dāng)前文件所在目錄下的文件,相當(dāng)于./

      • 絕對(duì)路徑:

        http://ip:port/文件目錄/文件名

      width:圖片的寬度

      height:圖片的高度

      border:圖片的邊框大小

      alt:找不到圖片的文本提示

    表格


    <table>

    ? <tr>

    ? <td>文本</td>

    ? </tr>

    </table>

    • 屬性:

      ①table屬性

      ? align:表格相對(duì)于頁(yè)面的對(duì)其方式

      ? border:表格的邊框

      ? width:表格的寬度

      ? height:表格的高度

      ? cellspacing:單元格與單元格間的間距

      ②td屬性

      ? align:內(nèi)容相當(dāng)于單元格的對(duì)其方式

      ? clospan:跨列數(shù)

      ? rowspan:跨行數(shù)

    • th相當(dāng)于<td align="center"><b>文本</b></td>,即文本加粗且居中

    • tr是行,td是單元格

    窗口


    <iframe></iframe>

    • 屬性:

      src:圖片路徑

      width:窗口寬度

      height:窗口高度

      name:窗口名稱

    表單


    <form>

    ? <input/>

    ? <select>

    ? <option>文本</option>

    ? </select>

    ? <textarea>默認(rèn)值</textarea>

    </form>

    • 屬性:

      ①form屬性

      ? action:表單數(shù)據(jù)提交的地址

      ? method:表單數(shù)據(jù)提交的方式

      • get(默認(rèn)):

      • 地址格式:action屬性值+?+請(qǐng)求參數(shù)
      • 請(qǐng)求參數(shù)格式:name=value&…
      • 不安全,有數(shù)據(jù)長(zhǎng)度限制

        表單提交的form連接中,get不能帶參數(shù),只能使用隱藏域

      • post:

      • 地址格式:action屬性值
      • 較安全,無(wú)長(zhǎng)度限制

      ? enctype:POST請(qǐng)求時(shí),請(qǐng)求體的編碼方式

      • application/x-www-form-urlencoded(默認(rèn)):
      • 表示用&分隔參數(shù),用=分隔鍵值對(duì),字符要用URL編碼方式進(jìn)行編碼
      • multipart/form-data
      • 文件上傳必須使用的編碼方式

      ②input屬性

      ? type:類型

      ? value:初始值、修改值、提交數(shù)據(jù)

      ? name:分類、提交數(shù)據(jù)

      ? checked="checked":默認(rèn)值

      • text:文本輸入框,可用value設(shè)置初始內(nèi)容
      • password:密碼輸入框,可用value設(shè)置初始內(nèi)容
      • radio:單選框,可用name將多個(gè)單選框分為一類,可用checked選定某一組分類下的單選框?yàn)槟J(rèn)值,提交數(shù)據(jù)時(shí)需要額外用value來(lái)傳值
      • checkbox:復(fù)選框,可用checked選定一個(gè)或多個(gè)復(fù)選框?yàn)槟J(rèn)值,被選中的復(fù)選框的值為true,提交數(shù)據(jù)時(shí)需要額外用value來(lái)傳值
      • reset:重置按鈕,可用value修改按鈕名稱
      • submit:提交按鈕,可用value修改按鈕名稱
      • button:按鈕,可用value修改按鈕名稱
      • file:文件上傳
      • hidden:隱藏域

      ③select屬性

      ? name:用于提交數(shù)據(jù)

      ? multiple="multiple":可多選

      ④option屬性

      ? selected="selected":設(shè)置下拉列表框的某個(gè)選項(xiàng)為默認(rèn)值

      ? value:用于提交數(shù)據(jù)

      ⑤textarea屬性

      ? rows:多行文本輸入框的行數(shù)

      ? cols:多行文本輸入框每行顯示的字符數(shù)量

      ? name:用于提交數(shù)據(jù)

    • form是向服務(wù)器提交數(shù)據(jù),input type設(shè)置各種表單類型,select設(shè)置下拉框,textarea設(shè)置多行文本輸入框

    • 表單提交時(shí),數(shù)據(jù)發(fā)送給服務(wù)器的三個(gè)要求:

    • 表單內(nèi)需要提交的數(shù)據(jù),要擁有name屬性
    • 單選框、復(fù)選框、下拉框中的option屬性,需要額外添加value屬性
    • 表單要在form內(nèi)

    其他


    <div>文本</div>:文本獨(dú)占一行

    <span>文本</span>:所占長(zhǎng)度與文本長(zhǎng)度相等

    <p>文本</p>:在上方或下方空出一行,空行則不操作

    <button>文本</button>:設(shè)置一個(gè)按鈕,在表單提交中在不指明其屬性type的值時(shí),默認(rèn)為submit

    • onclick="函數(shù)":可用此來(lái)綁定單擊事件

    CSS


    標(biāo)簽名選擇器


    選擇器調(diào)用的方式:

    1)在標(biāo)簽內(nèi)使用style屬性:

    <標(biāo)簽名 style="樣式1;樣式2...">文本</標(biāo)簽名>

    • 只對(duì)該標(biāo)簽有用

    2)在<head>中使用style type="text/css":

    <style type="text/css">

    ? 選擇器{

    ? 樣式1;樣式2...

    }</style>

    • 對(duì)當(dāng)前頁(yè)面有效

    3)引用.css文件:

    <link type="text/css" rel="stylesheet" href="文件名.css"/>

    • 只對(duì)調(diào)用了該文件的頁(yè)面有效
    • 修改的樣式由文件內(nèi)容中的選擇器定義樣式?jīng)Q定

    標(biāo)簽選擇器


    <style type="text/css">

    ? 標(biāo)簽名{

    }</style>

    • 對(duì)當(dāng)前頁(yè)面所有的標(biāo)簽有效

    id選擇器


    <style type="text/css">

    ? #idxxx{

    }</style>

    • xxx為id編號(hào)
    • 調(diào)用的標(biāo)簽通過(guò)id="idxxx"即可調(diào)用該樣式

    class選擇器


    <style type="text/css">

    ? .classxxx{

    }</style>

    • xxx是class編號(hào)
    • 調(diào)用的標(biāo)簽通過(guò)class="classxxx"即可調(diào)用

    組合選擇器


    <style type="text/css">

    ? 選擇器1,選擇器2,...{

    }</style>

    • 標(biāo)簽可以通過(guò)任意一個(gè)選擇器調(diào)用該代碼

    常用樣式


    • 各樣式間用,隔開(kāi),樣式有多個(gè)值的用 (空格)隔開(kāi)

    color:設(shè)置字體顏色

    border:設(shè)置邊框像素、顏色、線條(solid)

    border-collapse:collapse:表格邊框合并

    width:設(shè)置邊框?qū)挾?#xff08;px)

    height:設(shè)置邊框高度(px)

    background-color:設(shè)置背景顏色

    font-size:設(shè)置字體大小(px)

    margin-left:auto、margin-right:auto:設(shè)置整體頁(yè)面居中

    text-align:設(shè)置字體位置

    text-decoration:去超鏈接下劃線(none)

    list-style:設(shè)置列表符號(hào)為空(none)

    display:設(shè)置顯示(none)

    left:x軸

    top:y軸

    樣式操作


    addClass():添加樣式

    removeClass():刪除樣式,且會(huì)刪除對(duì)應(yīng)的class屬性值

    toggleClass():有就刪除,沒(méi)有就添加樣式

    offset():獲取或設(shè)置元素坐標(biāo)

    JavaScript


    1)

    <script type="text/javascript">

    ? 內(nèi)容;

    </script>

    2)調(diào)用文件

    <script type="text/javascript" src="文件名.js"></script>

    • 兩種方法不能在同一個(gè)定義中同時(shí)調(diào)用

    語(yǔ)法


    變量

    1)類型:

    ? ①數(shù)值類型:number

    ? ②字符串類型:string

    ? ③對(duì)象類型:object

    ? ④布爾類型:boolean

    ? ⑤函數(shù)類型:function

    2)值:

    ? ①u(mài)ndefined:未定義,所有未賦初始值的變量,默認(rèn)都是undefined

    ? ②null:空值

    ? ③NAN:非數(shù)字,非數(shù)值(有undefined參與運(yùn)算的值為NAN)

    3)定義變量格式:

    ? ①var 變量名

    ? ②var 變量名=值

    運(yùn)算符

    1)關(guān)系運(yùn)算:

    ? ①==:比較兩者的字面值

    ? ②===:比較兩者的字面值以及兩者的數(shù)據(jù)類型

    2)邏輯運(yùn)算:

    • 0、null、undefined、""(空串)為false,其他都為true
    • &&與||都有短路效果

    ? ①&&且:

  • 當(dāng)表達(dá)式全為真時(shí),返回最后一個(gè)表達(dá)式的值
  • 當(dāng)表達(dá)式中有一個(gè)為假時(shí),后面的表達(dá)式不再執(zhí)行,返回為假的表達(dá)式的值
  • ? ②||或:

  • 當(dāng)表達(dá)式全為假時(shí),返回最后一個(gè)表達(dá)式的值
  • 當(dāng)表達(dá)式中有一個(gè)為真時(shí),后面的表達(dá)式不再執(zhí)行,返回為真的表達(dá)式的值
  • 數(shù)組

    ? ①var 變量名=[]:空數(shù)組

    ? ②var 變量名=[值1,值2,...]:定義時(shí)賦值

    • 通過(guò)數(shù)組下標(biāo)給數(shù)組元素賦值時(shí),最大的下標(biāo)就是數(shù)組的長(zhǎng)度(下標(biāo)從0開(kāi)始),數(shù)組的長(zhǎng)度與讀取時(shí)的最大下標(biāo)無(wú)關(guān),超出時(shí)為undefined
    • 未被賦值的數(shù)組元素值為undefined
    函數(shù)

    • 函數(shù)不允許重載
    • 當(dāng)調(diào)用的函數(shù)與聲明的函數(shù)參數(shù)列表不一致時(shí),會(huì)調(diào)用隱形函數(shù),參數(shù)列表為arguments的數(shù)組,數(shù)組長(zhǎng)度與最大賦值下標(biāo)有關(guān)

    1)

    ? ①無(wú)參:

    ? function 函數(shù)名(){ 函數(shù)體 }

    ? ②有參:

    ? function 函數(shù)名(num1,num2,...){ 函數(shù)體 }

    ? ③有返回值:

    ? function 函數(shù)名(){ return 返回值 }

    2)

    ? ①無(wú)參:

    ? var 函數(shù)名=function(){ 函數(shù)體 }

    ? ②有參:

    ? var 函數(shù)名=function(num1,num2,...){ 函數(shù)體 }

    ? ③有返回值:

    ? var 函數(shù)名=function(){ return 返回值 }

    對(duì)象

    1)

    ? ①定義:

    ? var 變量名=new Object():空對(duì)象(對(duì)象實(shí)例)

    ? 變量名.屬性名=值:定義屬性

    ? 變量名.函數(shù)名=function(){}:定義函數(shù)

    ? ②調(diào)用:

    ? 變量名.屬性名、變量名.函數(shù)名()

    2)

    ? ①定義:

    ? var 變量名={

    ? 屬性名:值,

    ? 函數(shù)名:function(){}

    ? }

    ? ②調(diào)用:

    ? 變量名.屬性名、變量名.函數(shù)名()

    事件

    靜態(tài)綁定:在作用的標(biāo)簽內(nèi)作為屬性出現(xiàn)

    動(dòng)態(tài)綁定:

    ? ①window.onload=function(){

    ? ②var 對(duì)象名=document.getElementById("id屬性值");

    ? ③對(duì)象名.事件名=function(){}

    ? }

    ? ①保證代碼在頁(yè)面加載完成后才會(huì)執(zhí)行

    ? ②通過(guò)id屬性獲取標(biāo)簽的對(duì)象,document為當(dāng)前這個(gè)頁(yè)面信息的對(duì)象

    ? ③通過(guò)標(biāo)簽的對(duì)象名.事件名=function(){}注冊(cè)事件

    1)onload:加載完成事件,瀏覽器解析完頁(yè)面后就會(huì)自動(dòng)觸發(fā)的事件

    2)onclick:單擊事件,常用于按鈕點(diǎn)擊后做出響應(yīng)

    3)onblur:失去焦點(diǎn)事件,常用于輸入框失去焦點(diǎn)后進(jìn)行校驗(yàn)

    4)onchange:內(nèi)容發(fā)生改變事件,常用于下拉列表或輸入框發(fā)生改變時(shí)

    5)onsubmit:表單提交事件,常用于提交表單前驗(yàn)證其合法性

    • 當(dāng)返回return false時(shí),則取消提交
    • return 方法名()
    正則表達(dá)式

    正則表達(dá)式兩種創(chuàng)建方式:

    ①var 變量名=new RegExp("規(guī)則")

    ②var 變量名=/規(guī)則/

    /x/:字符串中是否包含字符x

    /[xyz]/:字符串中是否包含字符x或字符y或字符z

    /[a-z]/:字符串中是否包含任意小寫(xiě)字母

    /[A-Z]/:字符串中是否包含任意大寫(xiě)字母

    /[0-9]/:字符串中是否包含任意數(shù)字

    /\w/:字符串中是否包含任意字母、數(shù)字或下劃線

    /x+/:字符串中是否包含至少1個(gè)字符x

    /x*/:字符串中是否包含0個(gè)或多個(gè)字符x

    /x?/:字符串中是否包含0個(gè)或1個(gè)字符x

    /x{m}/:字符串中是否包含連續(xù)m個(gè)字符x

    /x{m,n}/:字符串中是否包含至少m個(gè)、至多n個(gè)的連續(xù)的字符x

    /x{m,}/:字符串中是否包含至少m個(gè)連續(xù)的字符x

    /x$/:字符串是否以字符x結(jié)尾

    /^x/:字符串是否以字符x開(kāi)頭

    DOM


    獲取節(jié)點(diǎn)的方式

    document.getElementById("id屬性值"):返回當(dāng)前頁(yè)面中指定id的標(biāo)簽的對(duì)象

    document.getElementsByName("name屬性值"):返回當(dāng)前頁(yè)面中所有指定name的標(biāo)簽的對(duì)象集合,該集合操作方式與數(shù)組相似

    document.getElementsByTagName("標(biāo)簽名"):返回當(dāng)前頁(yè)面中所有指定的標(biāo)簽的對(duì)象集合,該集合操作方式與數(shù)組相似

    document.createElement("標(biāo)簽名"):根據(jù)標(biāo)簽名創(chuàng)建了一個(gè)節(jié)點(diǎn),并返回標(biāo)簽名節(jié)點(diǎn)的對(duì)象

    document.createTextNode("文本"):根據(jù)文本創(chuàng)建并返回一個(gè)文本節(jié)點(diǎn)對(duì)象

    document.body:獲取body節(jié)點(diǎn)對(duì)象

    • window.onload=function(){}該代碼在頁(yè)面加載完成時(shí)才執(zhí)行
    方法

    getElementsByTagName("標(biāo)簽名"):獲取當(dāng)前節(jié)點(diǎn)的指定標(biāo)簽的子節(jié)點(diǎn)

    appendChild(子節(jié)點(diǎn)名):為當(dāng)前節(jié)點(diǎn)添加一個(gè)子節(jié)點(diǎn)

    attr:獲取對(duì)象的屬性值

    1)增刪改

    ①內(nèi)部增:

    ? x.appendTo(y):將x元素添加成為所有y的子元素中的最后一個(gè)元素

    ? x.prependTo(y):將x元素添加稱為所有y的子元素中的第一個(gè)元素

    ②外部增:

    ? x.insertAfter(y):將x元素添加到所有y元素的后面

    ? x.insertBefore(y):將x元素添加到所有y元素的前面

    ③替換:

    ? x.replaceWith(y):用y將所有的x替換掉

    ? x.replaceAll(y):用x將所有的y替換掉,兩者都要存在

    ④刪除:

    ? a.remove():刪除a標(biāo)簽

    ? a.empty():清空a標(biāo)簽的內(nèi)容

    屬性

    childNodes:獲取當(dāng)前節(jié)點(diǎn)的所有子節(jié)點(diǎn)

    firstChild:獲取當(dāng)前節(jié)點(diǎn)的第一個(gè)子節(jié)點(diǎn)

    lastChild:獲取當(dāng)前節(jié)點(diǎn)的最后一個(gè)子節(jié)點(diǎn)

    parentNode:獲取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)

    nextSibling:獲取當(dāng)前節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)

    previousSibling:獲取當(dāng)前節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn)

    className:獲取或設(shè)置當(dāng)前節(jié)點(diǎn)的標(biāo)簽的class屬性值

    innerHTML:查看或修改當(dāng)前節(jié)點(diǎn)的標(biāo)簽的起始標(biāo)簽和結(jié)束標(biāo)簽間的內(nèi)容

    innerText:查看或修改當(dāng)前節(jié)點(diǎn)的標(biāo)簽的起始標(biāo)簽和結(jié)束標(biāo)簽間的文本內(nèi)容

    defaultValue:默認(rèn)的value值

    其他對(duì)象

    location:地址欄對(duì)象(常用來(lái)調(diào)用Servlet程序)

    • href:可獲取瀏覽器地址欄中的地址,該屬性可讀可寫(xiě)

    jQuery


    • 使用前必須導(dǎo)入js文件
    • 或者直接調(diào)用官方鏈接:https://code.jquery.com/jquery-1.7.2.js

    $( )


    1)傳入?yún)?shù)為函數(shù)時(shí),會(huì)在頁(yè)面加載完成之后才執(zhí)行函數(shù)

    2)傳入?yún)?shù)為標(biāo)簽字符串時(shí),會(huì)自動(dòng)創(chuàng)建返回一個(gè)該標(biāo)簽的jQuery對(duì)象

    • 每個(gè)標(biāo)簽間要用""隔開(kāi)表示,并用+連接為一個(gè)完整的標(biāo)簽

    3)傳入?yún)?shù)為選擇器字符串時(shí),查詢并返回選擇器屬性值所對(duì)應(yīng)的標(biāo)簽的對(duì)象或?qū)ο蠹?/p>

    4)傳入為dom對(duì)象時(shí),會(huì)將dom對(duì)象轉(zhuǎn)換為jQuery對(duì)象并返回

    • 若要取出jQuery數(shù)組中的dom對(duì)象,只需要通過(guò)根據(jù)對(duì)應(yīng)的下標(biāo)即可取出

    選擇器


    基本選擇器

    $("#id屬性值"):查詢指定id屬性值的標(biāo)簽

    $(".class屬性值"):查詢指定class屬性值的標(biāo)簽

    $("標(biāo)簽名"):查詢指定標(biāo)簽名的標(biāo)簽

    $("*"):查詢所有的標(biāo)簽

    $("選擇器1,選擇器2"):獲查詢含有選擇器1或選擇器2的標(biāo)簽

    層級(jí)選擇器

    $("x y"):查詢父標(biāo)簽x內(nèi)的所有的后代標(biāo)簽y

    $("x>y"):查詢父標(biāo)簽x內(nèi)的所有的子代標(biāo)簽y

    $("m+n"):查詢m標(biāo)簽后面的一個(gè)n標(biāo)簽

    $("m~n"):查詢與m標(biāo)簽同級(jí)的所有n標(biāo)簽

    基本過(guò)濾選擇器

    :first:查詢第一個(gè)標(biāo)簽

    :last:查詢最后一個(gè)標(biāo)簽

    :not(標(biāo)簽名):查詢非該標(biāo)簽的標(biāo)簽

    :even:查詢索引為偶數(shù)的標(biāo)簽,索引從0開(kāi)始

    :odd:查詢索引為奇數(shù)的標(biāo)簽,索引從0開(kāi)始

    :eq(索引):查詢指定索引的標(biāo)簽

    :gt(索引):查詢大于該索引的標(biāo)簽

    :lt(索引):查詢小于該索引的標(biāo)簽

    :header:查詢標(biāo)題標(biāo)簽

    :animated:查詢正在執(zhí)行動(dòng)畫(huà)的標(biāo)簽

    內(nèi)容過(guò)濾選擇器

    :contains("文本"):查詢包含指定文本的標(biāo)簽

    :empty:查詢不包含子元素或文本的空標(biāo)簽

    :parent:查詢包含子元素或文本的標(biāo)簽

    :has(標(biāo)簽x):查詢含有標(biāo)簽x的標(biāo)簽

    屬性過(guò)濾選擇器

    [屬性名]:查詢包含指定屬性的標(biāo)簽

    [屬性名=值]:查詢包含指定屬性名和屬性值的標(biāo)簽

    [屬性名!=值]:查詢不含指定屬性或指定屬性的值不等于特定的值的標(biāo)簽

    [屬性值^=值]:查詢包含指定屬性的以指定屬性值開(kāi)頭的標(biāo)簽

    [屬性值$=值]:查詢包含指定屬性的以指定屬性值結(jié)尾的標(biāo)簽

    [屬性值*=值]:查詢包含指定屬性的包含指定屬性值的標(biāo)簽

    [...][...]...:同時(shí)滿足多個(gè)過(guò)濾器的標(biāo)簽

    表單過(guò)濾選擇器

    :text:查找所有的文本輸入框

    :password:查找所有的密碼輸入框

    :radio:查找所有的單選框

    :checkbox:查找所有的復(fù)選框

    :submit:查找所有的提交按鈕

    :reset:查詢所有的重置按鈕

    :button:查詢所有的按鈕

    :hidden:查找所有的隱藏元素(type為hidden或display為none)

    表單屬性過(guò)濾選擇器

    :enabled:查詢可選的元素

    :disabled:查詢不可選的元素

    :checked:查詢選中的元素(單選框、多選框等,不包含下拉框)

    :selected:查詢option中選中的元素

    方法


    • 在function(){}函數(shù)中,有一個(gè)this對(duì)象,該this對(duì)象是正在響應(yīng)的事件的dom對(duì)象

    eq(索引):獲取指定索引的元素

    first():獲取第一個(gè)元素

    last():獲取最后一個(gè)元素

    filter(值):獲取與值匹配的元素

    is(值):只有要一個(gè)值與其匹配,返回true

    has(值):獲取含有該值的元素

    not(值):獲取非該值的元素

    children(值):獲取指定值的子元素

    find(值):獲取指定值的后代元素

    next():獲取當(dāng)前元素的下一個(gè)元素

    nextAll():獲取當(dāng)前元素后的所有元素

    nextUntil(值):獲取從當(dāng)前位置到指定值間的所有元素

    parent():獲取父元素

    prev():獲取當(dāng)前元素的上一個(gè)元素

    prevAll():獲取當(dāng)前元素前面所有的元素,按逆序存入數(shù)組

    prevUntil(值):獲取當(dāng)前元素至指定值間的所有元素

    siblings():獲取當(dāng)前元素前后的所有元素

    add(值):將指定值添加進(jìn)當(dāng)前元素中

    trim():去除首尾空格

    confirm():確認(rèn)提示框函數(shù),參數(shù)為提示內(nèi)容,返回值為boolean類型。

    • 有兩個(gè)按鈕,“確定”按鈕返回值為true,“取消”按鈕返回false

    屬性操作


    html():設(shè)置和獲取起始標(biāo)簽和結(jié)束標(biāo)簽中的內(nèi)容

    text():設(shè)置和獲取起始標(biāo)簽和結(jié)束標(biāo)簽中的文本內(nèi)容

    val():設(shè)置和獲取表單項(xiàng)的value屬性值

    val(["值1","值2",...]):根據(jù)標(biāo)簽的value可批量默認(rèn)選擇單選框、多選框等

    attr("屬性名","值"):2個(gè)參數(shù)時(shí),設(shè)置指定屬性的值,1個(gè)參數(shù)時(shí),獲取屬性值

    • 對(duì)于checked、readOnly、selected、disabled,推薦使用prop()
    • 能自定義屬性和屬性值

    動(dòng)畫(huà)操作


    • 參數(shù)1:動(dòng)畫(huà)執(zhí)行時(shí)長(zhǎng),以毫秒為單位
    • 參數(shù)2:擁有回調(diào)函數(shù)(動(dòng)畫(huà)執(zhí)行完自動(dòng)調(diào)用的函數(shù))

    1)基本動(dòng)畫(huà):

    show():將隱藏的元素顯示

    hide():將可見(jiàn)的元素隱藏

    toggle():可見(jiàn)就隱藏,不可見(jiàn)就顯示

    2)淡入淡出動(dòng)畫(huà):

    fadeln():淡入

    fadeOut():淡出

    fadeToggle():淡入淡出間切換

    fadeTo(t,x):指定時(shí)長(zhǎng)t內(nèi),修改透明度至x,0為透明,1為完全顯示

    事件


    • 在綁定事件的function(){}中,若使用參數(shù)event,此刻的event即為事件的對(duì)象,可由此獲取到事件的類型type、x坐標(biāo)pageX、y坐標(biāo)pageY

    click():單擊事件,可綁定事件,也可觸發(fā)事件

    mouseover():鼠標(biāo)移入對(duì)象時(shí)觸發(fā)事件

    mouseout():鼠標(biāo)移出對(duì)象時(shí)觸發(fā)事件

    mousemove:鼠標(biāo)在對(duì)象內(nèi)移動(dòng)時(shí)觸發(fā)事件

    bind("事件1 事件2 ...",function(){}):可以給一個(gè)元素同時(shí)綁定多個(gè)事件

    unbind():效果與bind相反,解除事件的綁定,不傳參時(shí)解除所有綁定事件

    one():效果與bind類似,但所有事件只會(huì)響應(yīng)一次

    live():效果與bind類似,但用live綁定的一個(gè)或多個(gè)事件,由同樣選擇器創(chuàng)建的新的元素,也會(huì)具有綁定效果

    change():內(nèi)容發(fā)生修改時(shí)觸發(fā)事件

    blur():失去焦點(diǎn)時(shí)觸發(fā)事件

    XML


    元素(標(biāo)簽):

  • 名稱可以包含字母、數(shù)字、其他字符,不能以數(shù)字、標(biāo)點(diǎn)符號(hào)、xml開(kāi)始,不能包含空格
  • 也分為單標(biāo)簽和雙標(biāo)簽
  • 標(biāo)簽必須閉合,且大小寫(xiě)敏感,不能交叉嵌套
  • 必須有根元素(不含父元素的元素)
  • 若有多個(gè)轉(zhuǎn)義字符,可以使用<![CDATA[文本]]>來(lái)轉(zhuǎn)義
  • 解析XML


  • 導(dǎo)入dom4j.jar
  • 創(chuàng)建一個(gè)SAXReader對(duì)象,調(diào)用其read("path")讀取xml文件,返回一個(gè)Document類對(duì)象
  • 調(diào)用Document對(duì)象的getRootElement()獲取Document對(duì)象的根元素
  • 通過(guò)根元素獲取標(biāo)簽對(duì)象
    • element("子類標(biāo)簽名"):通過(guò)標(biāo)簽名查找指定的標(biāo)簽,返回一個(gè)Element類的標(biāo)簽對(duì)象
    • elements("子類標(biāo)簽名"):通過(guò)標(biāo)簽名查找指定的標(biāo)簽,返回一個(gè)list<Element>類的標(biāo)簽集合對(duì)象
  • 調(diào)用標(biāo)簽對(duì)象的getText()可以獲取標(biāo)簽標(biāo)簽對(duì)象中的文本內(nèi)容,返回一個(gè)String類型
  • 將獲取到的值封裝進(jìn)對(duì)應(yīng)的類中
  • elementText("標(biāo)簽名"):獲取指定標(biāo)簽名的文本內(nèi)容,返回一個(gè)String類型

    attributeValue("屬性名"):獲取指定屬性名的屬性值,返回一個(gè)String類型

    asXML():將標(biāo)簽對(duì)象轉(zhuǎn)換為標(biāo)簽字符串

    思路:

    ①加載配置文件,獲取document對(duì)象

    ②獲取根元素

    ③獲取根元素下的每個(gè)標(biāo)簽中的子標(biāo)簽或?qū)傩曰蛭谋?/p>

    TomCat


    1)啟動(dòng):

    ? ①:bin目錄下的startup.bat文件

    ? ②:命令行輸入cd bin文件目錄—>轉(zhuǎn)盤(pán)符—>輸入catalina run

    2)測(cè)試:http://localhost:8080、http://127.0.0.1:8080

    3)關(guān)閉:

    ? ①:直接關(guān)閉窗口

    ? ②:在窗口界面按ctrl+c

    ? ③:bin目錄下的shutdown.bat文件

    4)修改端口號(hào):conf目錄下的server.xml配置文件中的Connector標(biāo)簽,修改port屬性值(端口號(hào)范圍:1~65535),改完需重啟TomCat服務(wù)器

    • http協(xié)議默認(rèn)端口號(hào):80

    5)部署Web工程:

    ? ①將工程目錄拷貝進(jìn)webapps目錄下即可

    • 訪問(wèn):http://ip地址:服務(wù)器端口號(hào)/工程名/訪問(wèn)的文件名

    ? ②conf/Catalina/localhost目錄下,創(chuàng)建一個(gè)xml文件

    • 文件格式:<Context path="xml文件名" docBase="工程目錄" />
    • 訪問(wèn):http://ip地址:服務(wù)器端口號(hào)/xml文件名/訪問(wèn)的文件名

    6)注意點(diǎn):

  • http://ip地址:服務(wù)器端口號(hào)/:沒(méi)有工程名,默認(rèn)訪問(wèn)ROOT工程
  • http://ip地址:服務(wù)器端口號(hào)/工程名/:沒(méi)有資源名,默認(rèn)訪問(wèn)index.html頁(yè)面
  • Servlet


    Servlet程序?qū)崿F(xiàn)


    方式一:

  • 編寫(xiě)一個(gè)類實(shí)現(xiàn)Servlet接口,實(shí)現(xiàn)所有方法

  • 實(shí)現(xiàn)Service方法,用于處理請(qǐng)求,并響應(yīng)數(shù)據(jù)

  • 配置web.xml文件

  • <servlet>:配置Servlet程序

    • <servlet-name>:為Servlet程序起別名(常為類名)
    • <servlet-class>:Servlet程序的全類名
    • (可選)<init-param>:初始化參數(shù)
      • <param-name>:初始化參數(shù)的名字
      • <param-value>:初始化參數(shù)的值
  • <servlet-mapping>:配置訪問(wèn)Servlet程序的地址

    • <servlet-name>:明確配置的地址給指定的哪個(gè)Servlet程序使用

    • <url-pattern>:/自定義地址

      /解析時(shí)代表:http://ip地址:服務(wù)器端口號(hào)/工程名

      /自定義地址:即訪問(wèn)到Servlet程序的地址

  • (可選)<context-param>:

    • <param-name>:key
    • <param-value>:value
  • 方式二:

  • 編寫(xiě)一個(gè)類繼承HttpServlet類
  • 重寫(xiě)HttpServlet類中的doGet()、doPost()
  • 配置web.xml文件
  • 生命周期:

    ①執(zhí)行Servlet構(gòu)造方法

    ②執(zhí)行init方法進(jìn)行初始化

    ③執(zhí)行service方法

    ④執(zhí)行destroy進(jìn)行銷(xiāo)毀

    • ①②在創(chuàng)建Servlet程序時(shí)會(huì)調(diào)用,③是每次訪問(wèn)網(wǎng)址時(shí)調(diào)用,④在停止web工程服務(wù)時(shí)調(diào)用

    Servlet中的類


    1)Selvice類:將service方法中ServletRequest類型的形參向下轉(zhuǎn)型為HttpServletRequest類型,調(diào)用其對(duì)象的getMethod(),可以獲取發(fā)送數(shù)據(jù)請(qǐng)求的為get還是post類型

    2)ServletConfig類:Selvlet程序的配置信息類,可獲取程序別名、初始化參數(shù)、ServletContext對(duì)象

    ? ①調(diào)用init方法中ServletConfig類型的形參的方法:

  • getServletName():獲取Servlet程序的別名servlet-name的值
  • getInitParameter("初始化參數(shù)的名字"):獲取初始化參數(shù)init-param的值
  • getServletContext():獲取ServletContext對(duì)象
  • ? ②繼承HttpServlet的類中重寫(xiě)的doGet或doPost方法后:

  • 直接調(diào)用getServletConfig()可以直接獲取到一個(gè)新的ServletConfig類型的變量
    • 每個(gè)ServletConfig只對(duì)唯一的Servlet程序有效
    • 若該類重寫(xiě)了init方法,需要顯示調(diào)用super.init(config),否則會(huì)報(bào)空指針異常
  • 3)ServletContext類:表示Selvlet上下文,是一個(gè)接口,一個(gè)工程中只會(huì)有一個(gè)ServletContext對(duì)象的實(shí)例,且該對(duì)象是一個(gè)域?qū)ο?/p>

    • 先調(diào)用getServletContext()獲取一個(gè)ServletContext類型的變量
  • getInitParameter("上下文參數(shù)的名字"):獲取上下文參數(shù)context-param的值
  • getContextPart():獲取當(dāng)前工程的路徑(/工程名)
  • getRealPath(" "):獲取工程("/")或資源("/資源名")在硬盤(pán)上的絕對(duì)路徑
  • setAttribute("key","value"):設(shè)置域數(shù)據(jù)(同一個(gè)Servlet程序中獲取的數(shù)據(jù)相同)
  • getAttribute("key"):獲取對(duì)應(yīng)域數(shù)據(jù)的值
  • removeAttribute():刪除數(shù)據(jù)
  • 4)HttpServletRequest類:Tomcat服務(wù)器將每次發(fā)送請(qǐng)求的Http協(xié)議信息封裝到此類的對(duì)象中并作為doGet和doPost方法中的參數(shù)供我們調(diào)用,可獲取所有的請(qǐng)求信息

  • getRequestURI():獲取請(qǐng)求的資源的路徑
  • getRequestURL():獲取請(qǐng)求的資源的絕對(duì)路徑
  • getRemoteHost():獲取客戶端的ip地址
  • getHeader("請(qǐng)求頭"):獲取請(qǐng)求頭相關(guān)信息
  • getParameter("name"):獲取請(qǐng)求參數(shù)(name=value&name=value)
  • getParameterValues("name"):獲取請(qǐng)求參數(shù)(有多個(gè)參數(shù)時(shí)使用)
  • getMethod():獲取請(qǐng)求的方式(GET或POST)
  • setAttribute("key","value"):設(shè)置域數(shù)據(jù)(同一個(gè)請(qǐng)求中獲取的數(shù)據(jù)相同)
  • getAttribute("key"):獲取對(duì)應(yīng)域數(shù)據(jù)的值
  • getInputStream():獲取輸入流
  • getRequestDispatcher("/地址"):根據(jù)地址,獲取到一個(gè)RequestDispatcher類的對(duì)象,調(diào)用該對(duì)象的forward(HttpServletRequest,HttpServletResponse)可直接訪問(wèn)該地址,從而實(shí)現(xiàn)請(qǐng)求的轉(zhuǎn)發(fā)(在瀏覽器中訪問(wèn)了servlet程序的地址,而在servlet程序中訪問(wèn)了其他資源的地址)
    • 地址要以/開(kāi)頭,即訪問(wèn)的是必須是http://ip:port/工程名/下的(webapp目錄下)的資源,地址欄地址不變
    • 請(qǐng)求的轉(zhuǎn)發(fā) 的地址 可以訪問(wèn)到WEB-INF目錄下
  • setCharacterEncoding("字符編碼"):解決post請(qǐng)求中的亂碼問(wèn)題(必須在獲取任意一個(gè)請(qǐng)求參數(shù)之前就使用,否則還會(huì)出現(xiàn)亂碼問(wèn)題)
  • 5)HttpServletResponse類:同樣是Tomcat服務(wù)器創(chuàng)建的對(duì)象,表示的是發(fā)送請(qǐng)求后所有的響應(yīng)信息,可以用來(lái)設(shè)置返回給客戶端的信息(流的方式)

    • 兩個(gè)流不能同時(shí)使用
  • 字節(jié)流:getOutputStream():常用于下載(傳遞二進(jìn)制數(shù)據(jù))
  • 字符流:getWriter():常用于回傳字符串
    • 調(diào)用getWriter()后返回PrintWriter類的對(duì)象,調(diào)用該對(duì)象的write("str")直接返回給客戶端指定字符串
    • 返回中文字符串時(shí),可能出現(xiàn)中文亂碼,需要將服務(wù)器編碼集和瀏覽器編碼集設(shè)為一致(要在獲取流對(duì)象前設(shè)置)
  • getCharacterEncoding():獲取服務(wù)器的編碼集(默認(rèn)ISO-8859-1)
  • setCharacterEncoding("字符編碼集"):設(shè)置服務(wù)器編碼集
  • setHeader("響應(yīng)頭","響應(yīng)頭參數(shù)"):設(shè)置響應(yīng)頭
    • Content-Type,text/html;charset=UTF-8:設(shè)置瀏覽器編碼集為UTF-8
  • setContentType("text/html;charset=UTF-8"):設(shè)置服務(wù)器和客戶端(響應(yīng)頭)的字符集為UTF-8
  • setStatus(響應(yīng)碼):設(shè)置響應(yīng)碼
  • setHeader("location","新地址的絕對(duì)路徑"):設(shè)置響應(yīng)頭,與響應(yīng)碼一起使用,重定向新的訪問(wèn)地址,實(shí)際上會(huì)有兩次請(qǐng)求,地址欄地址發(fā)生變化,且兩次請(qǐng)求為兩個(gè)對(duì)象,不可訪問(wèn)WEB–INF下的資源,可訪問(wèn)外部連接
  • sendRedirect("新地址的絕對(duì)路徑"):直接設(shè)置重定向地址
    • 絕對(duì)路徑:/工程名/資源名
  • HTTP


    請(qǐng)求


    1)客戶端–>服務(wù)器:請(qǐng)求

    • 請(qǐng)求:GET、POST

    GET請(qǐng)求:

    form標(biāo)簽中使用method=get、a標(biāo)簽、link標(biāo)簽引入css、Script標(biāo)簽引入js文件、img標(biāo)簽引入圖片、iframe標(biāo)簽引入html頁(yè)面、瀏覽器輸入地址后回車(chē)

    ? ①請(qǐng)求行

  • 請(qǐng)求方式:GET
  • 請(qǐng)求資源路徑(+?+請(qǐng)求參數(shù))
  • 請(qǐng)求的協(xié)議和版本號(hào):HTTP/1.1
  • ? ②請(qǐng)求頭:key:value(不同的鍵值對(duì)表示不同含義)

  • Accept:告訴服務(wù)器客戶端能接收的數(shù)據(jù)類型
  • Accept-Language:告訴服務(wù)器客戶端能接收的語(yǔ)言類型
    • en-US(英語(yǔ))、zh-CN(漢語(yǔ))
  • User-Agent:瀏覽器的信息
  • Accept-Encoding:告訴服務(wù)器,客戶端能接收的數(shù)據(jù)編碼格式
  • Host:表示請(qǐng)求的主機(jī)ip和端口號(hào)
  • Connection:告訴服務(wù)器當(dāng)前的連接如何處理
    • Keep-Alive:回傳數(shù)據(jù)后不要馬上關(guān)閉連接,維持一段時(shí)間
    • Closed:馬上斷開(kāi)連接
  • POST請(qǐng)求:

    form標(biāo)簽中使用method=post

    ? ①請(qǐng)求行:請(qǐng)求方式(POST)、請(qǐng)求的資源路徑、請(qǐng)求的協(xié)議和版本號(hào)

    ? ②請(qǐng)求頭

  • Accept、Accept-Language、User-Agent、Host
  • Referer:記錄發(fā)起請(qǐng)求時(shí)的地址
  • Content-Type:表示發(fā)送數(shù)據(jù)的類型
    • application/x-www-form-urlencoded:表示提交的數(shù)據(jù)格式是name=value&name=value,然后對(duì)其進(jìn)行url編碼
    • multipart/form-data:表示以多段的形式提交數(shù)據(jù)給服務(wù)器(以流的形式提交,用于上傳)
  • Content-Length:表示發(fā)送的數(shù)據(jù)的長(zhǎng)度
  • Cache-Control:表示如何控制緩存
    • no-cache:不緩存
  • (空格一行)

    ? ③請(qǐng)求體:發(fā)送給服務(wù)器的數(shù)據(jù)

    響應(yīng)


    2)服務(wù)器–>客戶端:響應(yīng)

    ? ①響應(yīng)行

  • 響應(yīng)的協(xié)議和版本號(hào):HTTP/1.1
  • 響應(yīng)狀態(tài)碼:
  • 200(請(qǐng)求成功)
  • 302(請(qǐng)求重定向)
  • 404(服務(wù)器收到請(qǐng)求但數(shù)據(jù)不存在或地址錯(cuò)誤)
  • 500(服務(wù)器收到請(qǐng)求但服務(wù)器內(nèi)部錯(cuò)誤)
  • 響應(yīng)狀態(tài)描述符:OK
  • ? ②響應(yīng)頭

  • Server:表示服務(wù)器信息
  • Content-Type:響應(yīng)體的數(shù)據(jù)類型
    • MIME:大類型/小類型
  • Content-Length:響應(yīng)體的長(zhǎng)度
  • Date:請(qǐng)求響應(yīng)的時(shí)間(格林時(shí)間)
  • (空格一行)

    ? ③響應(yīng)體:回傳給客戶端的數(shù)據(jù)

    JSP


    jsp頭部的page指令


    language:表示jsp翻譯后為什么語(yǔ)言的文件(目前只支持Java)

    contentType:表示返回的數(shù)據(jù)類型

    pageEncoding:表示當(dāng)前jsp頁(yè)面的字符集

    import:導(dǎo)包、導(dǎo)類

    autoFlush:(out輸出流專用)設(shè)置輸出流緩沖區(qū)滿了之后是否自動(dòng)刷新緩沖區(qū)(默認(rèn)為true)

    buffer:(out輸出流專用)設(shè)置輸出流緩沖區(qū)的大小,默認(rèn)為8kb

    errorPage:設(shè)置jsp頁(yè)面出錯(cuò)時(shí)自動(dòng)跳轉(zhuǎn)去的錯(cuò)誤頁(yè)面路徑

    isErrorPage:設(shè)置當(dāng)前jsp頁(yè)面是否為錯(cuò)誤信息頁(yè)面(默認(rèn)是false,true的話會(huì)生成異常類捕獲異常信息)

    session:設(shè)置訪問(wèn)當(dāng)前jsp頁(yè)面是否會(huì)創(chuàng)建HttpSession對(duì)象(默認(rèn)是true)

    extends:設(shè)置jsp文件被Java翻譯出來(lái)后默認(rèn)繼承的類

    腳本


    1)聲明腳本:

    <%! java代碼 %>

  • 可聲明屬性、方法、靜態(tài)代碼塊、內(nèi)部類等
  • 2)表達(dá)式腳本:用于在頁(yè)面上輸出數(shù)據(jù)

    <% =表達(dá)式 %>

  • 可輸出基本數(shù)據(jù)類型、對(duì)象等
  • 所有表達(dá)式腳本會(huì)翻譯到_jspService()中
  • 表達(dá)式腳本會(huì)被翻譯為out.print()輸出到頁(yè)面上
  • 表達(dá)式腳本可以調(diào)用_jspService()中的對(duì)象(腳本被翻譯后存在于該方法中)
  • 3)代碼腳本:

    <% java代碼 %>

  • 可寫(xiě)入條件語(yǔ)句、循環(huán)語(yǔ)句
  • 代碼腳本可以調(diào)用_jspService()中的對(duì)象(腳本被翻譯后存在于該方法中)
  • 可由多個(gè)代碼腳本共同組合成完整的代碼語(yǔ)句,還可嵌套表達(dá)式腳本
  • EL表達(dá)式


    使用

    • 用于替換表達(dá)式腳本,主要用于輸出jsp頁(yè)面中的數(shù)據(jù)(特別時(shí)域?qū)ο笾斜4娴臄?shù)據(jù))

    ${ 表達(dá)式 }

    • 當(dāng)域?qū)ο笾卸加邢嗤膋ey時(shí),會(huì)按照域的從小到大范圍進(jìn)行輸出

    • 在輸出null值時(shí),輸出的為空串

    • 在輸出自定義類的對(duì)象時(shí),直接調(diào)用對(duì)象的toString()

      在輸出自定義類對(duì)象的屬性值(對(duì)象.屬性名)時(shí),實(shí)質(zhì)上調(diào)用的是對(duì)應(yīng)屬性名的get()(獲取屬性值)

      不同類型屬性輸出值不同:

      • 變量:值
      • 數(shù)組:數(shù)組地址,根據(jù)數(shù)組[下標(biāo)]找對(duì)應(yīng)值
      • 集合List:集合全部元素,根據(jù)集合[下標(biāo)]找對(duì)應(yīng)值
      • 集合Map:集合全部元素,根據(jù)集合.key值找對(duì)應(yīng)value值
    運(yùn)算符

    ①關(guān)系運(yùn)算符:== / eq(等于)、!= / ne(不等于)、< / lt(小于)、> / gt(大于)、<= / le(小于等于)、>= / ge(大于等于)

    ②邏輯運(yùn)算符:&& / and(與)、|| / or(或)、| / not(非)

    ③算術(shù)運(yùn)算:+(加)、-(減)、*(乘)、/ / div(除)、% / mod(取余)

    ④empty運(yùn)算${empty 表達(dá)式}:判斷數(shù)據(jù)是否為空,如果為空,返回true

  • 值為null
  • 值為空串
  • 引用數(shù)據(jù)類型(Object)數(shù)組,長(zhǎng)度為0
  • List集合,元素個(gè)數(shù)為0
  • Map集合,元素個(gè)數(shù)為0
  • ⑤三元運(yùn)算:條件 ? 表達(dá)式1 : 表達(dá)式2

    ⑥[]運(yùn)算符:Map['帶有特殊符號(hào)的key的值']

    • 輸出指定下標(biāo)的數(shù)組或List集合中的值
    • 輸出Map集合中含有特殊字符的key所對(duì)應(yīng)的value值

    ⑦.運(yùn)算:調(diào)用get方法

    隱含對(duì)象

    ①PageContextImpl pageContext:獲取jsp頁(yè)面中的九大內(nèi)置對(duì)象

    • ${pageContext.九大內(nèi)置對(duì)象}即可獲取九大內(nèi)置對(duì)象,也可以.方法名直接調(diào)用對(duì)象所擁有的方法(.調(diào)用的是方法名所對(duì)應(yīng)的get方法,與調(diào)用get方法輸出屬性值類似)

    ②Map<String,Object> pageScope:獲取pageContext域中的數(shù)據(jù)

    ③Map<String,Object> requestScope:獲取request域中的數(shù)據(jù)

    ④Map<String,Object> sessionScope:獲取session域中的數(shù)據(jù)

    ⑤Map<String,Object> applicationScope:獲取servletContext域中的數(shù)據(jù)

    ⑥ Map<String,String> param:獲取jsp請(qǐng)求頁(yè)面中請(qǐng)求參數(shù)的值

    ⑦M(jìn)ap<String,String[]> paramValues:獲取jsp頁(yè)面中請(qǐng)求參數(shù)的值(?name=value & name=value),在有多個(gè)值時(shí)使用

    ⑧Map<String,String> header:獲取請(qǐng)求頭的信息

    ⑨Map<String,String[]> headerValues:獲取請(qǐng)求頭的信息,多個(gè)值時(shí)使用

    ⑩Map<String,Cookie> cookie:獲取當(dāng)前請(qǐng)求的Cookie的信息,可通過(guò)該Cookie獲取到指定的Key或其對(duì)應(yīng)的Value值

    ?Map<String,String> initParam:獲取在web.xml中配置的<context-param>上下文參數(shù)

    九大內(nèi)置對(duì)象


    HttpServletRequest類:request:請(qǐng)求對(duì)象(域?qū)ο?#xff0c;一次請(qǐng)求內(nèi)有效)

    • getScheme():獲取請(qǐng)求的協(xié)議
    • getServerName():獲取請(qǐng)求的服務(wù)器的IP地址或域名
    • getServerPort():獲取請(qǐng)求的服務(wù)器的端口號(hào)
    • getContextPath():獲取當(dāng)前工程路徑(相對(duì))
    • getMethod():獲取請(qǐng)求的方式(GET或POST)
    • getRemoteHost():獲取客戶端的IP地址

    response:響應(yīng)對(duì)象

    PageContextImpl類:pageContext:jsp的上下文對(duì)象(域?qū)ο?#xff0c;當(dāng)前jsp頁(yè)面范圍內(nèi)有效)

    HttpSession類:session:會(huì)話對(duì)象(域?qū)ο?#xff0c;一個(gè)會(huì)話范圍內(nèi)有效(打開(kāi)瀏覽器訪問(wèn)服務(wù)器,直到關(guān)閉瀏覽器))

    • getID():獲取會(huì)話的唯一標(biāo)識(shí)

    ServletContext類:application:ServletContext對(duì)象(域?qū)ο?#xff0c;整個(gè)web工程內(nèi)有效(web不停止,數(shù)據(jù)就在))

    config:ServletConfig對(duì)象

    out:jsp輸出流對(duì)象

    page:指向當(dāng)前jsp的對(duì)象

    exception:異常對(duì)象

    • out.wirte()、out.print()和response.getWriter().write()都可以用來(lái)輸出數(shù)據(jù)給客戶端
    • jsp頁(yè)面中的所有代碼執(zhí)行完后,會(huì)執(zhí)行一下兩個(gè)操作:
    • 執(zhí)行out.flush(),將out緩沖區(qū)的數(shù)據(jù)追加寫(xiě)入到response緩沖區(qū)中
    • response執(zhí)行刷新操作,將數(shù)據(jù)寫(xiě)給客戶端
    • out.print():可用于輸出任意類型數(shù)據(jù)(會(huì)先將任意類型數(shù)據(jù)先轉(zhuǎn)化為字符串后再調(diào)用write())
    • out.write():可輸出字符串(會(huì)將任意類型數(shù)據(jù)先轉(zhuǎn)化為char類型再輸出)

    常用標(biāo)簽


    1)靜態(tài)包含:

    <%@ include file="/jsp頁(yè)面路徑" %>

    • 實(shí)質(zhì)上是將被包含的jsp文件的代碼拷貝到包含的位置處 調(diào)用out.write()輸出

    2)動(dòng)態(tài)包含:

    <jsp:include page="/jsp文件路徑" >

    ? (可選)<jsp:param name="參數(shù)名" value="參數(shù)值">

    </jsp:include>

    • 實(shí)質(zhì)上是執(zhí)行了JspRuntimeLibrary(requesst,response,"/剪視頻文件路徑",out,false)代碼去調(diào)用jsp頁(yè)面
    • 該方法共用了九大內(nèi)置對(duì)象
    • 可選部分為傳遞參數(shù),可用request.getParameter("name")獲取值

    3)請(qǐng)求轉(zhuǎn)發(fā):

    <jsp:forward page="/跳轉(zhuǎn)路徑"></jsp:forward>

    • 與調(diào)用request.getRequestDispatcher("/跳轉(zhuǎn)路徑").forward(request,response)效果完全一樣

    監(jiān)聽(tīng)器


    • 三大組件:Servlet程序、Filter過(guò)濾器、Listener監(jiān)聽(tīng)器
    • 接口,監(jiān)聽(tīng)某事物的變化,通過(guò)回調(diào)函數(shù),反饋給客戶(程序)去做對(duì)應(yīng)的處理

    ServletContextListener監(jiān)聽(tīng)器:監(jiān)聽(tīng)ServletContext對(duì)象的創(chuàng)建(web工程創(chuàng)建時(shí))和銷(xiāo)毀(web工程停止時(shí))

    • contextInialized(ServletContextEvent sce):在ServletContext對(duì)象創(chuàng)建后調(diào)用,做初始化
    • contextDestroyed(ServletContextEvent sce):在ServletContext對(duì)象銷(xiāo)毀后調(diào)用

    使用步驟:

  • 編寫(xiě)一個(gè)類實(shí)現(xiàn)ServletContextListener接口

  • 調(diào)用其兩個(gè)回調(diào)方法

  • web.xml中配置監(jiān)聽(tīng)器

    • <listener>

      ? <listener-class> </listener-class>

      </listener>

  • JSTL標(biāo)簽庫(kù)


    • 替換代碼腳本

    1)導(dǎo)入標(biāo)簽庫(kù)的jar包:taglibs-standard-impl.jar、taglibs-standard-spec.jar

    2)使用taglib指令引入標(biāo)簽庫(kù):

  • CORE標(biāo)簽庫(kù):<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

  • XML標(biāo)簽庫(kù):<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>

  • FMT標(biāo)簽庫(kù):<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fml" %>

  • SQL標(biāo)簽庫(kù):<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

  • FUNCTIONS標(biāo)簽庫(kù):<%@ taglib="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

  • 3)常用標(biāo)簽:

    ? ①<c:set />:往域中保存數(shù)據(jù)

    • scope:設(shè)置保存的域
      • page:PageContext域(默認(rèn))
      • request:Request域
      • session:Session域
      • application:ServletContext域
    • var:設(shè)置key值
    • value:設(shè)置value值

    ②<c:if></c:if>:判斷

    • test:test內(nèi)的El表達(dá)式成立,則輸出標(biāo)簽間的內(nèi)容

    ③<c:choose>:多情況判斷

    ? <c:when test="表達(dá)式"></c:when>:當(dāng)test表達(dá)式的值為true,執(zhí)行when標(biāo)簽

    ? <c:otherwise></c:otherwise>:相當(dāng)于switch-case的default

    </c:choose>

    • 標(biāo)簽內(nèi)只能使用jsp注釋
    • when的父標(biāo)簽一定是choose
    • otherwise標(biāo)簽內(nèi)可以嵌套choose-when

    ④<c:forEach></c:forEach>:遍歷

    • begin:遍歷開(kāi)始索引
    • end:遍歷結(jié)束索引
    • var:當(dāng)前正在遍歷的數(shù)據(jù)
    • items:遍歷的數(shù)據(jù)(集合(Map為鍵值對(duì))、數(shù)組等)
    • step:遍歷時(shí)的步長(zhǎng)(迭代時(shí)的步長(zhǎng))
    • varStatus:當(dāng)前遍歷到的數(shù)據(jù)的狀態(tài)
      • current:獲取當(dāng)前所遍歷的數(shù)據(jù)
      • index:獲取遍歷的索引
      • count:當(dāng)前是遍歷的第幾個(gè)
      • first:當(dāng)前遍歷的數(shù)據(jù)是否位于第一條
      • last:當(dāng)前遍歷的數(shù)據(jù)是否位于最后一條
      • begin:獲取begin屬性值
      • end:獲取end屬性值
      • step:獲取step屬性值

    使用begin-end,var則代表從索引開(kāi)始到結(jié)束

    使用items,var則代表items所要遍歷的數(shù)據(jù)

    使用EL表達(dá)式${}獲取域中的數(shù)據(jù)作為items所要遍歷的數(shù)據(jù)

    使用EL表達(dá)式${}獲取var的值

    獲取到Map的鍵值對(duì)后可通過(guò).key或.value獲取對(duì)應(yīng)的key或value

    文件上傳與下載


    1)上傳文件:(post)

  • 要有form標(biāo)簽,屬性值method=post,enctype=multipart/form-data

    • get有數(shù)據(jù)大小限制,所以選用post
    • enctype=multipart/form-data表示提交的數(shù)據(jù)以多段(每個(gè)表單項(xiàng)為一個(gè)數(shù)據(jù)段)的形式進(jìn)行拼接,然后以二進(jìn)制流的形式發(fā)送給服務(wù)器
      • 請(qǐng)求頭中Content-Type表示提交的數(shù)據(jù)類型
      • boundary是系統(tǒng)每次隨機(jī)生成的數(shù)據(jù)段分隔符,分隔符末尾帶--是數(shù)據(jù)的結(jié)束標(biāo)記
    • 每段數(shù)據(jù)以分隔符開(kāi)始,最后以分隔符結(jié)束,數(shù)據(jù)段以分隔符開(kāi)始后,包含:①對(duì)數(shù)據(jù)的描述 ②空行 ③上傳的數(shù)據(jù)
  • 使用<input type="file" name=""/>提交需要上傳的文件

  • 在Servlet程序中對(duì)數(shù)據(jù)進(jìn)行解析和保存(先導(dǎo)包)

  • 先ServletFileUpload.isMultipartContent(req)判斷上傳的數(shù)據(jù)是否是多段

  • 通過(guò)new DiskFileItemFactory()創(chuàng)建一個(gè)FileItemFactory工廠的實(shí)現(xiàn)類對(duì)象,將其作為參數(shù)創(chuàng)建一個(gè)ServletFileUpload(FileItemFactory)工具類的對(duì)象

  • 調(diào)用工具類對(duì)象的parseRequest(req)來(lái)解析上傳的數(shù)據(jù),得到一個(gè)封裝了每一個(gè)表單項(xiàng)的List<FileItem>集合

  • 循環(huán)遍歷(增強(qiáng)for循環(huán))獲取每一個(gè)FileItem類型的表單項(xiàng),調(diào)用表單項(xiàng)對(duì)象的isFormField()判斷每一個(gè)表單項(xiàng)是普通數(shù)據(jù)類型,還是上傳的文件

    普通表單項(xiàng):

    • 調(diào)用表單項(xiàng)對(duì)象的getFiledName()來(lái)獲取表單項(xiàng)的name屬性值
    • 調(diào)用表單項(xiàng)對(duì)象的getString("UTF-8")來(lái)獲取表單項(xiàng)的value屬性值

    上傳的文件:

    • 調(diào)用表單項(xiàng)對(duì)象的getName()獲取上傳的文件名
    • 調(diào)用表單項(xiàng)對(duì)象的write(new File("path"+"name"))將指定名字的文件保存在指定路徑的位置處
  • 2)下載文件:(get)

  • 獲取要下載的文件名fileName

  • 在下載前需要先知道下載的文件類型(不同文件下載后的格式不一樣)

    • 調(diào)用getServletContext()獲取ServletContext對(duì)象

    • 調(diào)用ServletContext對(duì)象的getMimeType("path"+fileName)獲取要下載的文件的數(shù)據(jù)類型(返回String類型對(duì)象)

      • /映射到當(dāng)前工程目錄的web下
    • 調(diào)用resp.setContentType(數(shù)據(jù)類型),通過(guò)響應(yīng)頭告訴客戶端返回的數(shù)據(jù)類型

    • 調(diào)用resp.setHeader("Content-Disposition","attachment;filename="+fileName),設(shè)置并通過(guò)響應(yīng)頭告訴客戶端這個(gè)數(shù)據(jù)是用于下載的

      • Content-Disposition響應(yīng)頭,表示收到的數(shù)據(jù)的處理方式

        attachment:表示數(shù)據(jù)為附件,下載使用

        filename:表示所下載的文件的名

        • 若下載的文件名為中文,需要調(diào)用URLEncoder.encode("filename","UTF-8")轉(zhuǎn)換為UTF-8編碼集的樣式,否則會(huì)出現(xiàn)亂碼
  • 讀取要下載的文件內(nèi)容

    • 調(diào)用ServletContext對(duì)象的getResourceAsStream("path"+fileName)獲取要下載的文件的一個(gè)InputStream流
  • 將要下載的文件內(nèi)容回傳給客戶端

    • 調(diào)用resp.getOutputStream()獲取響應(yīng)給客戶端的輸出流
    • 若已導(dǎo)入commons-io.jar,直接調(diào)用IOUtils.copy(InputStream,OutputStream)將文件的輸入流內(nèi)容復(fù)制給客戶端的輸出流
  • 3)解析上傳的數(shù)據(jù):

    • 導(dǎo)入jar包:commons-io.jar、commons-fileupload.jar

    ServletFileUpload類:用于解析上傳的數(shù)據(jù)

    FileItem類:表示每個(gè)表單項(xiàng)

    • boolean ServletFileUpload.isMultipartContent(HttpServletRequest request):判斷上傳的數(shù)據(jù)是否為多段數(shù)據(jù)
    • public List<FileItem> parseRequest(HttpServletRequest request):解析上傳的數(shù)據(jù)
    • boolean FileItem.isFormField():判斷表單項(xiàng)是否為普通的表單項(xiàng)還是文件類型,true則是普通表單項(xiàng)
    • String FileItem.getFieldName():獲取表單項(xiàng)的name屬性值
    • String FileItem.getString():獲取表單項(xiàng)的值,可傳參數(shù)"UTF-8"來(lái)防止出現(xiàn)亂碼
    • String FileItem.getName():獲取上傳的文件名
    • void FileItem.write(file):將上傳的文件寫(xiě)入到file所指向的硬盤(pán)位置

    Cookie


    創(chuàng)建Cookie:

  • 創(chuàng)建Cookie對(duì)象:new Cookie("key","value")
  • 通知客戶端保存Cookie:response對(duì)象.addCookie(Cookie)
    • 通過(guò)響應(yīng)頭Set-Cookie通知客戶端保存Cookie(Set-Cookie:key=value)
    • 在收到Set-Cookie響應(yīng)頭時(shí),會(huì)先查看有無(wú)該Cookie,沒(méi)有則創(chuàng)建,有則修改
    • 可以一次性保存多個(gè)Cookie,一個(gè)Cookie的大小不能超過(guò)4kb
  • 獲取Cookie:

  • 調(diào)用request對(duì)象.getCookies(),返回一個(gè)Cookie[]數(shù)組

    • 客戶端通過(guò)請(qǐng)求頭Cookie:key=value把Cookie信息發(fā)送給服務(wù)器
  • 要獲取指定key的Cookie時(shí),只能循環(huán)遍歷,判斷Cookie的key與所要的是否相同

  • Cookie對(duì)象.getName():獲取Cookie的key

    Cookie對(duì)象.getValue():獲取Cookie的value

  • 修改Cookie:

    ①調(diào)用構(gòu)造器:

  • 創(chuàng)建同名的Cookie對(duì)象:new Cookie("sameKey","newValue")
  • 通知客戶端保存修改:response對(duì)象.addCookie(Cookie)
  • ②調(diào)用方法:

  • 找到所要修改的Cookie的對(duì)象(for循環(huán)遍歷獲取)
  • 調(diào)用cookie對(duì)象.setValue("newValue")修改value值
    • 中文等會(huì)亂碼,需要用Base64編碼
  • 通知客戶端保存修改:response對(duì)象.addCookie(Cookie)
  • 設(shè)置Cookie存活時(shí)間:

  • 調(diào)用cookie對(duì)象.setMaxAge(s)設(shè)置

    • s為存活的秒數(shù)

      s為負(fù)數(shù)時(shí)(默認(rèn)),為會(huì)話級(jí)別,退出瀏覽器時(shí)銷(xiāo)毀Cookie

      s為0時(shí),立即刪除Cookie

      s為正數(shù)時(shí),在s秒后刪除Cookie

  • 設(shè)置Cookie有效路徑:

  • 調(diào)用Cookie對(duì)象.setPath("絕對(duì)路徑")
    • 該路徑及該路徑下所有的子路徑在請(qǐng)求時(shí)都會(huì)發(fā)送該Cookie
  • Session


    創(chuàng)建Session:

  • 調(diào)用request對(duì)象.getSession()創(chuàng)建Session對(duì)象
    • 第一次調(diào)用時(shí)是創(chuàng)建Session,之后調(diào)用是調(diào)用創(chuàng)建好的Session
    • session對(duì)象.isNew()可以判斷是否為新創(chuàng)建的Session,返回boolean值
    • 每個(gè)Session會(huì)有一個(gè)唯一的ID
  • Session中存取數(shù)值:

  • 調(diào)用session對(duì)象.setAttribute("key","value")存放數(shù)據(jù)
  • 調(diào)用session對(duì)象.getAttribute("key")取數(shù)據(jù)
  • 設(shè)置和獲取Session的超時(shí)時(shí)長(zhǎng):

  • 調(diào)用session對(duì)象.setMaxInactiveInterval(s)設(shè)置Session的超時(shí)時(shí)長(zhǎng)

    • s為存活的秒數(shù)

    • 當(dāng)s為正數(shù)時(shí),設(shè)置s秒后銷(xiāo)毀Session,當(dāng)s為負(fù)數(shù)時(shí),設(shè)置為永不銷(xiāo)毀

    • s的默認(rèn)時(shí)長(zhǎng)為30(分鐘),在Tomcat服務(wù)器配置文件web.xml中有設(shè)定,可以在工程的web.xml中配置以下:

      <session-config>

      ? <session-timeout>存活分鐘</session-timeout>

      </session-config>

  • 調(diào)用session對(duì)象.getMaxInactiveInterval()獲取Session的超時(shí)時(shí)長(zhǎng)

    • Session超時(shí)時(shí)長(zhǎng)為:客戶端兩次請(qǐng)求間的間隔時(shí)長(zhǎng)
  • 調(diào)用session對(duì)象.invalidate()讓當(dāng)前Session立即失效

  • Filter過(guò)濾器


    ①請(qǐng)求攔截、響應(yīng)過(guò)濾

    ②權(quán)限配置(實(shí)現(xiàn)doFilter方法)

    ③使用Filter過(guò)濾器統(tǒng)一處理事務(wù)

    • web.xml中配置url為/*可以確保所有的請(qǐng)求都會(huì)經(jīng)過(guò)Filter過(guò)濾器處理,若在執(zhí)行的所有路徑中有可能有異常的進(jìn)行拋出,并由doFilter()進(jìn)行異常的捕獲,最后判斷是否提交或回滾,由此來(lái)實(shí)現(xiàn)事務(wù)的管理

    (一)web.xml文件配置:

    <filter>

    ? <filter-name>名稱</filter-name>

    ? <filter-class>實(shí)現(xiàn)的類的全類名</filter-class>

    ? <init-param>(可選、可多選)

    ? <param-name> name </param-name>

    ? <param-value> value </param-value>

    ? </init-param>

    </filter>

    <filter-mapping>

    ? <filter-name>對(duì)應(yīng)名稱</filter-name>

    ? <url-pattern> 攔截的目標(biāo) </url-pattern>(可多選)

    • 攔截的三種目標(biāo):

      / :http://localhost:8080/工程路徑/

    • /資源名:精確匹配,攔截所有想訪問(wèn)指定資源的程序
    • /目錄/*:目錄匹配,攔截所有想訪問(wèn)指定目錄下的資源的程序
    • *.文件類型:后綴名匹配,攔截所有想訪問(wèn)相關(guān)后綴名的文件的程序

    </filter-mapping>

    (二)實(shí)現(xiàn)步驟:

    ①實(shí)現(xiàn)javax.servlet.Filter下的Filter接口(需導(dǎo)包)

    ②根據(jù)實(shí)現(xiàn)Filter的類來(lái)配置web.xml文件,限制訪問(wèn)哪些資源需要經(jīng)過(guò)doFilter過(guò)濾

    ③將需要進(jìn)行請(qǐng)求攔截的內(nèi)容在doFilter()內(nèi)實(shí)現(xiàn)

    • ServletRequest類要強(qiáng)轉(zhuǎn)為HttpServletRequest類才能獲取session域

    ④調(diào)用參數(shù)的方法filterChain.doFilter(servletRequest,servletResponse)實(shí)現(xiàn)請(qǐng)求的放行

    • 缺少該步驟的話,即使檢查通過(guò),也不會(huì)訪問(wèn)到目標(biāo)資源

    (三)Filter過(guò)濾器的生命周期

    ①構(gòu)造器、init()初始化:在Filter過(guò)濾器創(chuàng)建時(shí)執(zhí)行

    ②doFilter():每次攔截時(shí)執(zhí)行

    ③destroy():web服務(wù)停止時(shí)執(zhí)行銷(xiāo)毀

    (四)Filter過(guò)濾器參數(shù)中的類

  • FilterConfig類:

    • getFilterName():獲取web.xml文件中所對(duì)應(yīng)的的文本值
    • getInitParameter("name"):獲取web.xml文件中下的下的name所對(duì)應(yīng)的value值
    • getServletContext():獲取ServletContext對(duì)象
  • FilterChain過(guò)濾器鏈:

    • doFilter():若有多個(gè)Fliter過(guò)濾器,執(zhí)行下一個(gè)過(guò)濾器,否則訪問(wèn)目標(biāo)資源

    • Filter過(guò)濾器的執(zhí)行順序是按Filter在web.xml中的配置順序執(zhí)行的

    • 默認(rèn)情況下所有Filter過(guò)濾器及目標(biāo)資源處在同一線程

    • 多個(gè)Filter過(guò)濾器及目標(biāo)資源共享一個(gè)request對(duì)象

    • 執(zhí)行順序:(假設(shè)兩個(gè)過(guò)濾器)

      filter1前——doFilter1——filter2前——doFilter2——目標(biāo)資源——filter后2——filter后1

      • 若其中任意過(guò)濾器執(zhí)行完后無(wú)doFilter,則會(huì)直接返回(不會(huì)訪問(wèn)目標(biāo)資源)
  • (五)ThreadLocal

    • 每個(gè)線程中可以為其關(guān)聯(lián)一個(gè)數(shù)據(jù),可以使用ThreadLocal來(lái)關(guān)聯(lián)數(shù)據(jù)
    • 其關(guān)聯(lián)方式類似于Map(其key值為String類型,存放當(dāng)前線程名,value值存放想要在該線程中所相關(guān)聯(lián)的數(shù)據(jù)的值)
    • 其作用是為了解決線程安全問(wèn)題(比如事務(wù)回滾問(wèn)題(保存同一個(gè)Connection對(duì)象)(用后記得將保存的ThreadLocal值remove()))
    • 創(chuàng)建的ThreadLocal對(duì)象一般為static修飾
    • 調(diào)用ThreadLocal對(duì)象的set(數(shù)值)來(lái)存儲(chǔ)關(guān)聯(lián)的值(每個(gè)ThreadLocal對(duì)象只能關(guān)聯(lián)一個(gè)數(shù)據(jù)值,本質(zhì)是根據(jù)線程名來(lái)存儲(chǔ))
    • 調(diào)用ThreadLocal對(duì)象的get()來(lái)獲取關(guān)聯(lián)的值(本質(zhì)是根據(jù)線程名來(lái)獲取)

    JSON


    • 本質(zhì)是一個(gè)對(duì)象

    • 有兩種存在形式:對(duì)象(常用于操作JSON中的數(shù)據(jù))、字符串(常用于獲取JSON中的數(shù)據(jù))

      • JSON.stringify(JSON對(duì)象):將JSON對(duì)象轉(zhuǎn)換為字符串形式

        JSON.parse(JSON對(duì)象):將JSON對(duì)象轉(zhuǎn)換為對(duì)象形式

    (一)客戶端:(javascript下)

    變量:

    var 變量名={

    ? "key1" : 值1 ,

    ? "key2" : 值2 ,

    ? …

    }

    取值:

    變量名.key

    • 數(shù)組的話可根據(jù)下標(biāo)獲取指定的值,否則打印數(shù)組內(nèi)全部數(shù)據(jù)
    • JSON內(nèi)可嵌套JSON

    (二)服務(wù)器:(導(dǎo)包:gson.jsp)

  • JavaBean中:

  • 創(chuàng)建Gson對(duì)象
  • 調(diào)用Gson對(duì)象.toJson(Java類對(duì)象)可將java對(duì)象轉(zhuǎn)換為JSON字符串類型對(duì)象(返回類型為String類型)
  • 調(diào)用Gson對(duì)象.fromJson(JSON對(duì)象,Java類.class)可將JSON對(duì)象轉(zhuǎn)化為指定的Java類的對(duì)象
  • List、Map中:(list與map方法類似)

  • 創(chuàng)建一個(gè)Gson對(duì)象

  • 調(diào)用Gson對(duì)象.toJson(list對(duì)象)可將list對(duì)象轉(zhuǎn)換為JSON字符串類型對(duì)象(返回類型為String類型)

  • 調(diào)用Gson對(duì)象.fromJson(JSON對(duì)象,TypeOfT)可將JSON對(duì)象轉(zhuǎn)換為list集合對(duì)象

    • TypeOfT是一個(gè)Type類型 ,獲取方法:

      創(chuàng)建一個(gè)(匿名)類,該類繼承了TypeToken<集合類型<泛型類型>>,最后調(diào)用該類的getType()即可獲取

    • 建議直接使用匿名子類(new TypeToken<集合類型<泛型類型>>(){}的方式調(diào)用getType())

  • AJAX


    特點(diǎn):局部更新、異步請(qǐng)求與響應(yīng)

    (一)請(qǐng)求與響應(yīng):(JavaScript下)

  • var 變量名 = new XMLHttpRequest()創(chuàng)建一個(gè)XMLHttpRequest類
  • 創(chuàng)建一個(gè)servlet程序,配置web.xml文件
  • 調(diào)用XMLHttpRequest變量名.open("請(qǐng)求方式",”servlet程序訪問(wèn)地址“,true)
    • true:異步
  • (響應(yīng)所需,無(wú)響應(yīng)時(shí)略過(guò))
  • 因?yàn)闉楫惒?#xff0c;因此servlet程序中數(shù)據(jù)的響應(yīng)格式需要為字符串類型對(duì)象(因此使用JSON字符串類型對(duì)象(調(diào)用toJson()))
  • 使用XMLHttpRequest變量名.onreadystatechange = function(){}綁定事件
  • 在事件中判斷XMLHttpRequest變量名.readyState==4&&XMLHttpRequest變量名.status==200,條件成立時(shí)才能調(diào)用XMLHttoRequest變量名.responseText獲取到一個(gè)JSON字符串類型對(duì)象(可調(diào)用JSON.parse(JSON對(duì)象)轉(zhuǎn)換為JSON對(duì)象以便美觀輸出)
  • 調(diào)用XMLHttpRequest變量名.send()發(fā)送請(qǐng)求
  • (二)Jquery中使用AJAX:

    ①$.ajax({ })

  • url:請(qǐng)求地址

  • data:請(qǐng)求參數(shù)(key=value)

  • type:請(qǐng)求方式

  • success:function(變量名){}:請(qǐng)求后的響應(yīng)事件

    • 變量名:響應(yīng) 的對(duì)象
  • dataType:決定響應(yīng)對(duì)象的類型

    • text:text純文本

      xml:xml文本的數(shù)據(jù)格式

      json:JSON對(duì)象類型的對(duì)象

  • ②$.get("url地址","請(qǐng)求參數(shù)","請(qǐng)求響應(yīng)后的響應(yīng)事件","響應(yīng)對(duì)象的類型")

    • 請(qǐng)求方式已確定為get請(qǐng)求

    ③$.post("url地址","請(qǐng)求參數(shù)","請(qǐng)求響應(yīng)后的響應(yīng)事件","響應(yīng)對(duì)象的類型")

    • 請(qǐng)求方式已確定為post請(qǐng)求

    ④$.getJSON("url地址","請(qǐng)求參數(shù)","請(qǐng)求響應(yīng)后的響應(yīng)事件")

    • 請(qǐng)求方式已確定為get請(qǐng)求,響應(yīng)對(duì)象的類型確定為JSON對(duì)象類型

    ⑤$("選擇器").serialize():獲取表單提交的全部數(shù)據(jù)

    • 數(shù)據(jù)的格式為key=value&key=value所拼接
    • 在請(qǐng)求轉(zhuǎn)發(fā)到servlet程序時(shí),確保在data(請(qǐng)求參數(shù))中添加&才能獲取到請(qǐng)求參數(shù)

    i18n


    思路:

  • 創(chuàng)建一個(gè)baseName_localeName.properties的配置文件
    • baseName:共有、通用的名字
    • localName:指定地區(qū)語(yǔ)言的名字
    • 配置文件內(nèi)以key=value的形式保存,key為英文,value為對(duì)應(yīng)的地區(qū)的語(yǔ)言
  • 獲取locale對(duì)象
    • Locale.getDefault():獲取當(dāng)前系統(tǒng)默認(rèn)的地區(qū)語(yǔ)言的locale對(duì)象
    • Locale.getAvailableLocales():獲取集合全部的地區(qū)語(yǔ)言的locale對(duì)象
    • Locale.CHINA():獲取zh_CN的locale對(duì)象
    • Locale.US():獲取en_US的locale對(duì)象
  • 調(diào)用ResourceBundle.getBundle("baseName",locale對(duì)象)獲取到一個(gè)ResourceBundle對(duì)象
  • 根據(jù)ResourceBundle對(duì)象調(diào)用其getString("properties文件的key")獲取到key所對(duì)應(yīng)的value值(根據(jù)locale對(duì)象所對(duì)應(yīng)的地區(qū)語(yǔ)言獲取)
  • (一)請(qǐng)求頭方式實(shí)現(xiàn)網(wǎng)頁(yè)語(yǔ)言的國(guó)際化

    <%

  • 配置properties文件(key=value形式來(lái)表示頁(yè)面上所有用到多種語(yǔ)言的文本,每種語(yǔ)言都要用properties文件)
  • Locale.getLocale()獲取到通過(guò)locale對(duì)象
  • 調(diào)用ResourceBundle.getBundle創(chuàng)建一個(gè)ResourceBundle對(duì)象
  • %>

    之后在所有用到多種語(yǔ)言的文本處,使用

    <%= ResourceBundle對(duì)象.getString("baseName",locale對(duì)象) %>

    來(lái)表示文本,當(dāng)瀏覽器默認(rèn)語(yǔ)言不同時(shí),就會(huì)自動(dòng)更改網(wǎng)頁(yè)的語(yǔ)言

    (二)根據(jù)用戶選擇實(shí)現(xiàn)網(wǎng)頁(yè)語(yǔ)言的國(guó)際化

  • 每種語(yǔ)言用鏈接標(biāo)簽<a></a>表示
  • 鏈接標(biāo)簽的屬性href鏈接到當(dāng)前網(wǎng)頁(yè),附帶一個(gè)參數(shù)用來(lái)區(qū)分不同地區(qū)的語(yǔ)言
  • 之后與上述方法一樣,但在獲取locale對(duì)象時(shí),要根據(jù)參數(shù)(request.getParameter("參數(shù)名"))來(lái)進(jìn)行判斷(根據(jù)不同地區(qū)語(yǔ)言獲取不同的locale對(duì)象,默認(rèn)情況再使用Locale.getDefault())
  • (三)使用JSTL標(biāo)簽庫(kù)實(shí)現(xiàn)網(wǎng)頁(yè)語(yǔ)言的國(guó)際化

  • 導(dǎo)包taglibs-standard-impl.jar、taglibs-standard-spec.jar
  • 引入頭標(biāo)簽<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
  • 根據(jù)用戶選擇的語(yǔ)言,使用鏈接標(biāo)簽傳遞對(duì)應(yīng)語(yǔ)言的參數(shù) = 對(duì)應(yīng)地區(qū)的locale值
  • 使用< fmt:setLocale value="${param.參數(shù)名}" />設(shè)置locale的值
  • 使用< fmt:setBundle basename=對(duì)應(yīng)properties文件的baseName />設(shè)置bundle對(duì)象
  • 在所有需要用到不同語(yǔ)言的文本處,使用< fmt:message key="properties文件內(nèi)對(duì)應(yīng)的key" />替換
  • 當(dāng)用戶選擇不同語(yǔ)言時(shí),根據(jù)參數(shù)傳遞不同語(yǔ)言的locale對(duì)象,根據(jù)locale對(duì)象和baseName獲取到bundle對(duì)象,再根據(jù)bundle對(duì)象中對(duì)應(yīng)的key獲取對(duì)應(yīng)的value
  • 零碎知識(shí)點(diǎn)


    JS和jQuery的頁(yè)面加載完成之后

    • JS:window.onload=function(){}

    • jQuery:$(function(){})、$(document).ready(function(){})

    1)觸發(fā)時(shí)間:

    JS:頁(yè)面加載好后,創(chuàng)建所有標(biāo)簽的DOM對(duì)象,并將標(biāo)簽顯示內(nèi)容加載完成

    jQuery:頁(yè)面加載好后,創(chuàng)建所有標(biāo)簽的DOM對(duì)象后就執(zhí)行

    2)執(zhí)行次數(shù):

    JS:只會(huì)執(zhí)行最后一次賦值的函數(shù)

    jQuery:執(zhí)行所有的function函數(shù),按順序執(zhí)行

    base標(biāo)簽

    相對(duì)路徑在跳轉(zhuǎn)時(shí)會(huì)根據(jù)當(dāng)前頁(yè)面地址欄中的地址進(jìn)行跳轉(zhuǎn),使用base標(biāo)簽可以設(shè)置跳轉(zhuǎn)時(shí)的相對(duì)路徑

    <base href="絕對(duì)路徑"/>

    • href的屬性值變成 相對(duì)路徑前的地址,當(dāng)頁(yè)面以相對(duì)路徑進(jìn)行跳轉(zhuǎn)時(shí),會(huì)在該地址的基礎(chǔ)上進(jìn)行跳轉(zhuǎn)
    • 絕對(duì)路徑下的資源名可以省略(跳轉(zhuǎn)是在目錄的基礎(chǔ)上跳轉(zhuǎn)(/、..),與資源名無(wú)關(guān))
    web中/的不同意義

    被瀏覽器解析:http://ip:port

    被服務(wù)器解析:http://ip:port/工程名

    response.sendRediect("/"):將/發(fā)送給瀏覽器解析,得到http://ip:port

    BeanUtils工具類

    • 將客戶端的表單信息快速封裝進(jìn)自定義類中

    導(dǎo)包:commons-logging.jar、commons-beanutils.jar

  • BeanUtils.populate(Object,Map)
    • Object為要將數(shù)據(jù)封裝進(jìn)去的類(先獲取name屬性值,再將值封裝進(jìn)Object類中)
    • 可調(diào)用req.getParameterMap(),獲取客戶端的表單信息并封裝進(jìn)一個(gè)Map集合中,作為populate的另一個(gè)參數(shù)
    • 本質(zhì)是獲取name與其值后,調(diào)用類中同名的set方法
  • 表單重復(fù)提交

    ①在用戶提交表單后,因?yàn)闉g覽器會(huì)記錄下最后一次請(qǐng)求的信息,服務(wù)器若使用請(qǐng)求轉(zhuǎn)發(fā)進(jìn)行頁(yè)面跳轉(zhuǎn),當(dāng)用戶按功能鍵(Ctrl+F5)刷新時(shí),會(huì)重新發(fā)起瀏覽器的最后一次請(qǐng)求。

    • 解決方法:改用請(qǐng)求轉(zhuǎn)發(fā)為重定向

    ②用戶提交表單,但可能出現(xiàn)網(wǎng)絡(luò)延遲,導(dǎo)致用戶多次提交表單

    • 解決辦法:使用驗(yàn)證碼

    ③用戶提交表單,服務(wù)器也正常跳轉(zhuǎn),但提交完成后,用戶在瀏覽器頁(yè)面下進(jìn)行回退,重新提交表單

    • 解決辦法:使用驗(yàn)證碼
    請(qǐng)求轉(zhuǎn)發(fā)與重定向

    1)請(qǐng)求轉(zhuǎn)發(fā):

    • 客戶端向服務(wù)器發(fā)送一個(gè)請(qǐng)求,(客戶端發(fā)送的)請(qǐng)求地址沒(méi)有變化,服務(wù)器調(diào)用內(nèi)部方法將請(qǐng)求轉(zhuǎn)發(fā)到新地址進(jìn)行處理,處理完后將結(jié)果返回給客戶端
    • 請(qǐng)求轉(zhuǎn)發(fā)的方式只會(huì)有一次客戶端對(duì)服務(wù)器的請(qǐng)求,服務(wù)器對(duì)客戶端的響應(yīng),因此瀏覽器地址欄顯示的依舊為第一次訪問(wèn)的原地址(request對(duì)象保持不變)
    • 請(qǐng)求轉(zhuǎn)發(fā)只能訪問(wèn)當(dāng)前工程web下的資源,但可以訪問(wèn)WEB-INF下的資源,且request.setAttribute()域內(nèi)保存的數(shù)據(jù),新頁(yè)面可以獲取

    2)重定向:

    • 客戶端向服務(wù)器發(fā)送一個(gè)請(qǐng)求,(客戶端發(fā)送的)請(qǐng)求地址已發(fā)生了變化,服務(wù)器向客戶端發(fā)送了一個(gè)全新的地址,此刻客戶端會(huì)自動(dòng)訪問(wèn)新的地址,服務(wù)器將新的地址內(nèi)容返回給客戶端
    • 客戶端發(fā)起了兩次請(qǐng)求,服務(wù)器進(jìn)行了兩次響應(yīng),且瀏覽器地址欄顯示的為第二次請(qǐng)求訪問(wèn)的新地址(request對(duì)象發(fā)生了改變)
    • 重定向可以訪問(wèn)其他工程下的資源,但不可訪問(wèn)WEB-INF下的資源,且request.setAttribute()域內(nèi)保存的數(shù)據(jù),新頁(yè)面獲取不到
    驗(yàn)證碼

  • 導(dǎo)入谷歌驗(yàn)證碼jar包kaptcha.jar

  • 配置web.xml文件用于生成驗(yàn)證碼的Servlet程序

    <servlet-class>

    ? com.google.code.kaptcha.servlet.KaptchaServlet

    </servlet-class>

  • 在表單中使用img標(biāo)簽引用到servlet地址處并獲取到驗(yàn)證碼圖片

  • 服務(wù)器中獲取谷歌生成的驗(yàn)證碼并和客戶端發(fā)送的驗(yàn)證碼進(jìn)行比較

    • 使用request對(duì)象.getSession().getAttribute(KAPTCHA_SESSION_KEY)獲取Session中的驗(yàn)證碼
    • 獲取到驗(yàn)證碼、保存到String中后應(yīng)立即調(diào)用request對(duì)象.getSession().removeAttribute(KAPTCHA_SESSION_KEY)銷(xiāo)毀驗(yàn)證碼
  • 綁定單擊事件,使用this.src="絕對(duì)路徑?time="+new Date()直接訪問(wèn)web.xml下kaptcha的servlet程序,可以起到單擊圖片切換驗(yàn)證碼的效果,且由于有參數(shù)Date的作用,因此不會(huì)因?yàn)榫彺娑袚Q不了驗(yàn)證碼

  • 異常處理

    步驟:配置web.xml文件,設(shè)計(jì)好跳轉(zhuǎn)的頁(yè)面,并將異常往外拋出,由Tomcat服務(wù)器捕獲

    <error-page>

    ? <error-code> 錯(cuò)誤碼 </error-code>

    ? <location> 跳轉(zhuǎn)的頁(yè)面地址 </location>

    • / :http://localhost:8080/工程名/

    </error-page>

    BindException

    netstat -ano|findstr 端口號(hào):查看占用端口的程序

    taskkill /F /PID 端口id:結(jié)束端口占用

    請(qǐng)求頭


    • req.getHeader():可以獲取對(duì)應(yīng)的請(qǐng)求頭

    Referer:獲取發(fā)起請(qǐng)求的絕對(duì)路徑(可用于購(gòu)物車(chē)添加后返回原頁(yè)面)

    總結(jié)

    以上是生活随笔為你收集整理的JavaWeb随手笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。