JavaWeb随手笔记
HTML
規范:
①<html> ————html標簽,整個頁面的開始
? ②<head> ————頭標簽(title標題,css樣式,js代碼)
? <title>標題</title> ————標題
? ②</head>
? ③<body> ————內容標簽
? 主體內容
? ③</body>
①</html> ————整個頁面的結束
- <html lang="zh_CN">:表示頁面顯示中文
- ②內:<meta charset="UTF-8">:當前頁面的字符編碼格式
標簽特性
標簽大小寫不敏感
標簽擁有兩種屬性
①基本屬性:如bgcolor="name":設置頁面顏色
②事件屬性:如onclick="alect('內容')":單擊顯示alect警告框函數內的信息
標簽兩種分類
①單標簽:如<br/>:換行、<hr/>:水平線
②雙標簽:如<button>文本</button>:按鈕、<b>文本</b>:加粗
標簽語法
常用標簽
字體標簽
<font>文本</font>
-
屬性:
color:顏色
face:字體
size:大小
-
大小范圍為1~7,超出的話以7顯示
特殊字符
-
<:<
-
>:>
-
(空格):
標題
<h1>文本</h1>
-
屬性:
align:標題的對其方式
- left:左對齊,默認
- right:右對齊
- center:居中
-
h1表示標題大小為1(最大),其范圍為1~6,超出的話以文本顯示
超鏈接
<a>文本</a>
-
屬性:
href:表示鏈接的地址(http://localhost:8080/工程名/可省略)
target:打開鏈接的方式
- _self:當前頁面打開,默認
- _blank:新頁面打開
- name:根據窗口的名字,用窗口打開
列表標簽
<ul>
? <li>文本1</li>
? <li>文本2</li>
</ul>
-
屬性:
type:修改列表項前面的符號
- none:無符號
-
ul是無序列表,ol是有序列表,li是列表項
圖片
<img/>
-
屬性:
src:圖片的路徑
-
相對路徑:相對路徑是根據當前頁面地址欄中的地址來跳轉的
.:當前文件所在目錄
..:當前文件的上一級目錄
文件名:當前文件所在目錄下的文件,相當于./
-
絕對路徑:
http://ip:port/文件目錄/文件名
width:圖片的寬度
height:圖片的高度
border:圖片的邊框大小
alt:找不到圖片的文本提示
-
表格
<table>
? <tr>
? <td>文本</td>
? </tr>
</table>
-
屬性:
①table屬性
? align:表格相對于頁面的對其方式
? border:表格的邊框
? width:表格的寬度
? height:表格的高度
? cellspacing:單元格與單元格間的間距
②td屬性
? align:內容相當于單元格的對其方式
? clospan:跨列數
? rowspan:跨行數
-
th相當于<td align="center"><b>文本</b></td>,即文本加粗且居中
-
tr是行,td是單元格
窗口
<iframe></iframe>
-
屬性:
src:圖片路徑
width:窗口寬度
height:窗口高度
name:窗口名稱
表單
<form>
? <input/>
? <select>
? <option>文本</option>
? </select>
? <textarea>默認值</textarea>
</form>
-
屬性:
①form屬性
? action:表單數據提交的地址
? method:表單數據提交的方式
-
get(默認):
- 地址格式:action屬性值+?+請求參數
- 請求參數格式:name=value&…
不安全,有數據長度限制
表單提交的form連接中,get不能帶參數,只能使用隱藏域
-
-
post:
- 地址格式:action屬性值
較安全,無長度限制
? enctype:POST請求時,請求體的編碼方式
- application/x-www-form-urlencoded(默認):
- 表示用&分隔參數,用=分隔鍵值對,字符要用URL編碼方式進行編碼
- multipart/form-data
- 文件上傳必須使用的編碼方式
②input屬性
? type:類型
? value:初始值、修改值、提交數據
? name:分類、提交數據
? checked="checked":默認值
- text:文本輸入框,可用value設置初始內容
- password:密碼輸入框,可用value設置初始內容
- radio:單選框,可用name將多個單選框分為一類,可用checked選定某一組分類下的單選框為默認值,提交數據時需要額外用value來傳值
- checkbox:復選框,可用checked選定一個或多個復選框為默認值,被選中的復選框的值為true,提交數據時需要額外用value來傳值
- reset:重置按鈕,可用value修改按鈕名稱
- submit:提交按鈕,可用value修改按鈕名稱
- button:按鈕,可用value修改按鈕名稱
- file:文件上傳
- hidden:隱藏域
③select屬性
? name:用于提交數據
? multiple="multiple":可多選
④option屬性
? selected="selected":設置下拉列表框的某個選項為默認值
? value:用于提交數據
⑤textarea屬性
? rows:多行文本輸入框的行數
? cols:多行文本輸入框每行顯示的字符數量
? name:用于提交數據
form是向服務器提交數據,input type設置各種表單類型,select設置下拉框,textarea設置多行文本輸入框
表單提交時,數據發送給服務器的三個要求:
其他
<div>文本</div>:文本獨占一行
<span>文本</span>:所占長度與文本長度相等
<p>文本</p>:在上方或下方空出一行,空行則不操作
<button>文本</button>:設置一個按鈕,在表單提交中在不指明其屬性type的值時,默認為submit
- onclick="函數":可用此來綁定單擊事件
CSS
標簽名選擇器
選擇器調用的方式:
1)在標簽內使用style屬性:
<標簽名 style="樣式1;樣式2...">文本</標簽名>
- 只對該標簽有用
2)在<head>中使用style type="text/css":
<style type="text/css">
? 選擇器{
? 樣式1;樣式2...
}</style>
- 對當前頁面有效
3)引用.css文件:
<link type="text/css" rel="stylesheet" href="文件名.css"/>
- 只對調用了該文件的頁面有效
- 修改的樣式由文件內容中的選擇器定義樣式決定
標簽選擇器
<style type="text/css">
? 標簽名{
}</style>
- 對當前頁面所有的標簽有效
id選擇器
<style type="text/css">
? #idxxx{
}</style>
- xxx為id編號
- 調用的標簽通過id="idxxx"即可調用該樣式
class選擇器
<style type="text/css">
? .classxxx{
}</style>
- xxx是class編號
- 調用的標簽通過class="classxxx"即可調用
組合選擇器
<style type="text/css">
? 選擇器1,選擇器2,...{
}</style>
- 標簽可以通過任意一個選擇器調用該代碼
常用樣式
- 各樣式間用,隔開,樣式有多個值的用 (空格)隔開
color:設置字體顏色
border:設置邊框像素、顏色、線條(solid)
border-collapse:collapse:表格邊框合并
width:設置邊框寬度(px)
height:設置邊框高度(px)
background-color:設置背景顏色
font-size:設置字體大小(px)
margin-left:auto、margin-right:auto:設置整體頁面居中
text-align:設置字體位置
text-decoration:去超鏈接下劃線(none)
list-style:設置列表符號為空(none)
display:設置顯示(none)
left:x軸
top:y軸
樣式操作
addClass():添加樣式
removeClass():刪除樣式,且會刪除對應的class屬性值
toggleClass():有就刪除,沒有就添加樣式
offset():獲取或設置元素坐標
JavaScript
1)
<script type="text/javascript">
? 內容;
</script>
2)調用文件
<script type="text/javascript" src="文件名.js"></script>
- 兩種方法不能在同一個定義中同時調用
語法
變量
1)類型:
? ①數值類型:number
? ②字符串類型:string
? ③對象類型:object
? ④布爾類型:boolean
? ⑤函數類型:function
2)值:
? ①undefined:未定義,所有未賦初始值的變量,默認都是undefined
? ②null:空值
? ③NAN:非數字,非數值(有undefined參與運算的值為NAN)
3)定義變量格式:
? ①var 變量名
? ②var 變量名=值
運算符
1)關系運算:
? ①==:比較兩者的字面值
? ②===:比較兩者的字面值以及兩者的數據類型
2)邏輯運算:
- 0、null、undefined、""(空串)為false,其他都為true
- &&與||都有短路效果
? ①&&且:
? ②||或:
數組
? ①var 變量名=[]:空數組
? ②var 變量名=[值1,值2,...]:定義時賦值
- 通過數組下標給數組元素賦值時,最大的下標就是數組的長度(下標從0開始),數組的長度與讀取時的最大下標無關,超出時為undefined
- 未被賦值的數組元素值為undefined
函數
- 函數不允許重載
- 當調用的函數與聲明的函數參數列表不一致時,會調用隱形函數,參數列表為arguments的數組,數組長度與最大賦值下標有關
1)
? ①無參:
? function 函數名(){ 函數體 }
? ②有參:
? function 函數名(num1,num2,...){ 函數體 }
? ③有返回值:
? function 函數名(){ return 返回值 }
2)
? ①無參:
? var 函數名=function(){ 函數體 }
? ②有參:
? var 函數名=function(num1,num2,...){ 函數體 }
? ③有返回值:
? var 函數名=function(){ return 返回值 }
對象
1)
? ①定義:
? var 變量名=new Object():空對象(對象實例)
? 變量名.屬性名=值:定義屬性
? 變量名.函數名=function(){}:定義函數
? ②調用:
? 變量名.屬性名、變量名.函數名()
2)
? ①定義:
? var 變量名={
? 屬性名:值,
? 函數名:function(){}
? }
? ②調用:
? 變量名.屬性名、變量名.函數名()
事件
靜態綁定:在作用的標簽內作為屬性出現
動態綁定:
? ①window.onload=function(){
? ②var 對象名=document.getElementById("id屬性值");
? ③對象名.事件名=function(){}
? }
? ①保證代碼在頁面加載完成后才會執行
? ②通過id屬性獲取標簽的對象,document為當前這個頁面信息的對象
? ③通過標簽的對象名.事件名=function(){}注冊事件
1)onload:加載完成事件,瀏覽器解析完頁面后就會自動觸發的事件
2)onclick:單擊事件,常用于按鈕點擊后做出響應
3)onblur:失去焦點事件,常用于輸入框失去焦點后進行校驗
4)onchange:內容發生改變事件,常用于下拉列表或輸入框發生改變時
5)onsubmit:表單提交事件,常用于提交表單前驗證其合法性
- 當返回return false時,則取消提交
- return 方法名()
正則表達式
正則表達式兩種創建方式:
①var 變量名=new RegExp("規則")
②var 變量名=/規則/
/x/:字符串中是否包含字符x
/[xyz]/:字符串中是否包含字符x或字符y或字符z
/[a-z]/:字符串中是否包含任意小寫字母
/[A-Z]/:字符串中是否包含任意大寫字母
/[0-9]/:字符串中是否包含任意數字
/\w/:字符串中是否包含任意字母、數字或下劃線
/x+/:字符串中是否包含至少1個字符x
/x*/:字符串中是否包含0個或多個字符x
/x?/:字符串中是否包含0個或1個字符x
/x{m}/:字符串中是否包含連續m個字符x
/x{m,n}/:字符串中是否包含至少m個、至多n個的連續的字符x
/x{m,}/:字符串中是否包含至少m個連續的字符x
/x$/:字符串是否以字符x結尾
/^x/:字符串是否以字符x開頭
DOM
獲取節點的方式
document.getElementById("id屬性值"):返回當前頁面中指定id的標簽的對象
document.getElementsByName("name屬性值"):返回當前頁面中所有指定name的標簽的對象集合,該集合操作方式與數組相似
document.getElementsByTagName("標簽名"):返回當前頁面中所有指定的標簽的對象集合,該集合操作方式與數組相似
document.createElement("標簽名"):根據標簽名創建了一個節點,并返回標簽名節點的對象
document.createTextNode("文本"):根據文本創建并返回一個文本節點對象
document.body:獲取body節點對象
- window.onload=function(){}該代碼在頁面加載完成時才執行
方法
getElementsByTagName("標簽名"):獲取當前節點的指定標簽的子節點
appendChild(子節點名):為當前節點添加一個子節點
attr:獲取對象的屬性值
1)增刪改
①內部增:
? x.appendTo(y):將x元素添加成為所有y的子元素中的最后一個元素
? x.prependTo(y):將x元素添加稱為所有y的子元素中的第一個元素
②外部增:
? x.insertAfter(y):將x元素添加到所有y元素的后面
? x.insertBefore(y):將x元素添加到所有y元素的前面
③替換:
? x.replaceWith(y):用y將所有的x替換掉
? x.replaceAll(y):用x將所有的y替換掉,兩者都要存在
④刪除:
? a.remove():刪除a標簽
? a.empty():清空a標簽的內容
屬性
childNodes:獲取當前節點的所有子節點
firstChild:獲取當前節點的第一個子節點
lastChild:獲取當前節點的最后一個子節點
parentNode:獲取當前節點的父節點
nextSibling:獲取當前節點的下一個節點
previousSibling:獲取當前節點的上一個節點
className:獲取或設置當前節點的標簽的class屬性值
innerHTML:查看或修改當前節點的標簽的起始標簽和結束標簽間的內容
innerText:查看或修改當前節點的標簽的起始標簽和結束標簽間的文本內容
defaultValue:默認的value值
其他對象
location:地址欄對象(常用來調用Servlet程序)
- href:可獲取瀏覽器地址欄中的地址,該屬性可讀可寫
jQuery
- 使用前必須導入js文件
- 或者直接調用官方鏈接:https://code.jquery.com/jquery-1.7.2.js
$( )
1)傳入參數為函數時,會在頁面加載完成之后才執行函數
2)傳入參數為標簽字符串時,會自動創建返回一個該標簽的jQuery對象
- 每個標簽間要用""隔開表示,并用+連接為一個完整的標簽
3)傳入參數為選擇器字符串時,查詢并返回選擇器屬性值所對應的標簽的對象或對象集合
4)傳入為dom對象時,會將dom對象轉換為jQuery對象并返回
- 若要取出jQuery數組中的dom對象,只需要通過根據對應的下標即可取出
選擇器
基本選擇器
$("#id屬性值"):查詢指定id屬性值的標簽
$(".class屬性值"):查詢指定class屬性值的標簽
$("標簽名"):查詢指定標簽名的標簽
$("*"):查詢所有的標簽
$("選擇器1,選擇器2"):獲查詢含有選擇器1或選擇器2的標簽
層級選擇器
$("x y"):查詢父標簽x內的所有的后代標簽y
$("x>y"):查詢父標簽x內的所有的子代標簽y
$("m+n"):查詢m標簽后面的一個n標簽
$("m~n"):查詢與m標簽同級的所有n標簽
基本過濾選擇器
:first:查詢第一個標簽
:last:查詢最后一個標簽
:not(標簽名):查詢非該標簽的標簽
:even:查詢索引為偶數的標簽,索引從0開始
:odd:查詢索引為奇數的標簽,索引從0開始
:eq(索引):查詢指定索引的標簽
:gt(索引):查詢大于該索引的標簽
:lt(索引):查詢小于該索引的標簽
:header:查詢標題標簽
:animated:查詢正在執行動畫的標簽
內容過濾選擇器
:contains("文本"):查詢包含指定文本的標簽
:empty:查詢不包含子元素或文本的空標簽
:parent:查詢包含子元素或文本的標簽
:has(標簽x):查詢含有標簽x的標簽
屬性過濾選擇器
[屬性名]:查詢包含指定屬性的標簽
[屬性名=值]:查詢包含指定屬性名和屬性值的標簽
[屬性名!=值]:查詢不含指定屬性或指定屬性的值不等于特定的值的標簽
[屬性值^=值]:查詢包含指定屬性的以指定屬性值開頭的標簽
[屬性值$=值]:查詢包含指定屬性的以指定屬性值結尾的標簽
[屬性值*=值]:查詢包含指定屬性的包含指定屬性值的標簽
[...][...]...:同時滿足多個過濾器的標簽
表單過濾選擇器
:text:查找所有的文本輸入框
:password:查找所有的密碼輸入框
:radio:查找所有的單選框
:checkbox:查找所有的復選框
:submit:查找所有的提交按鈕
:reset:查詢所有的重置按鈕
:button:查詢所有的按鈕
:hidden:查找所有的隱藏元素(type為hidden或display為none)
表單屬性過濾選擇器
:enabled:查詢可選的元素
:disabled:查詢不可選的元素
:checked:查詢選中的元素(單選框、多選框等,不包含下拉框)
:selected:查詢option中選中的元素
方法
- 在function(){}函數中,有一個this對象,該this對象是正在響應的事件的dom對象
eq(索引):獲取指定索引的元素
first():獲取第一個元素
last():獲取最后一個元素
filter(值):獲取與值匹配的元素
is(值):只有要一個值與其匹配,返回true
has(值):獲取含有該值的元素
not(值):獲取非該值的元素
children(值):獲取指定值的子元素
find(值):獲取指定值的后代元素
next():獲取當前元素的下一個元素
nextAll():獲取當前元素后的所有元素
nextUntil(值):獲取從當前位置到指定值間的所有元素
parent():獲取父元素
prev():獲取當前元素的上一個元素
prevAll():獲取當前元素前面所有的元素,按逆序存入數組
prevUntil(值):獲取當前元素至指定值間的所有元素
siblings():獲取當前元素前后的所有元素
add(值):將指定值添加進當前元素中
trim():去除首尾空格
confirm():確認提示框函數,參數為提示內容,返回值為boolean類型。
- 有兩個按鈕,“確定”按鈕返回值為true,“取消”按鈕返回false
屬性操作
html():設置和獲取起始標簽和結束標簽中的內容
text():設置和獲取起始標簽和結束標簽中的文本內容
val():設置和獲取表單項的value屬性值
val(["值1","值2",...]):根據標簽的value可批量默認選擇單選框、多選框等
attr("屬性名","值"):2個參數時,設置指定屬性的值,1個參數時,獲取屬性值
- 對于checked、readOnly、selected、disabled,推薦使用prop()
- 能自定義屬性和屬性值
動畫操作
- 參數1:動畫執行時長,以毫秒為單位
- 參數2:擁有回調函數(動畫執行完自動調用的函數)
1)基本動畫:
show():將隱藏的元素顯示
hide():將可見的元素隱藏
toggle():可見就隱藏,不可見就顯示
2)淡入淡出動畫:
fadeln():淡入
fadeOut():淡出
fadeToggle():淡入淡出間切換
fadeTo(t,x):指定時長t內,修改透明度至x,0為透明,1為完全顯示
事件
- 在綁定事件的function(){}中,若使用參數event,此刻的event即為事件的對象,可由此獲取到事件的類型type、x坐標pageX、y坐標pageY
click():單擊事件,可綁定事件,也可觸發事件
mouseover():鼠標移入對象時觸發事件
mouseout():鼠標移出對象時觸發事件
mousemove:鼠標在對象內移動時觸發事件
bind("事件1 事件2 ...",function(){}):可以給一個元素同時綁定多個事件
unbind():效果與bind相反,解除事件的綁定,不傳參時解除所有綁定事件
one():效果與bind類似,但所有事件只會響應一次
live():效果與bind類似,但用live綁定的一個或多個事件,由同樣選擇器創建的新的元素,也會具有綁定效果
change():內容發生修改時觸發事件
blur():失去焦點時觸發事件
XML
元素(標簽):
解析XML
- element("子類標簽名"):通過標簽名查找指定的標簽,返回一個Element類的標簽對象
- elements("子類標簽名"):通過標簽名查找指定的標簽,返回一個list<Element>類的標簽集合對象
elementText("標簽名"):獲取指定標簽名的文本內容,返回一個String類型
attributeValue("屬性名"):獲取指定屬性名的屬性值,返回一個String類型
asXML():將標簽對象轉換為標簽字符串
思路:
①加載配置文件,獲取document對象
②獲取根元素
③獲取根元素下的每個標簽中的子標簽或屬性或文本
TomCat
1)啟動:
? ①:bin目錄下的startup.bat文件
? ②:命令行輸入cd bin文件目錄—>轉盤符—>輸入catalina run
2)測試:http://localhost:8080、http://127.0.0.1:8080
3)關閉:
? ①:直接關閉窗口
? ②:在窗口界面按ctrl+c
? ③:bin目錄下的shutdown.bat文件
4)修改端口號:conf目錄下的server.xml配置文件中的Connector標簽,修改port屬性值(端口號范圍:1~65535),改完需重啟TomCat服務器
- http協議默認端口號:80
5)部署Web工程:
? ①將工程目錄拷貝進webapps目錄下即可
- 訪問:http://ip地址:服務器端口號/工程名/訪問的文件名
? ②conf/Catalina/localhost目錄下,創建一個xml文件
- 文件格式:<Context path="xml文件名" docBase="工程目錄" />
- 訪問:http://ip地址:服務器端口號/xml文件名/訪問的文件名
6)注意點:
Servlet
Servlet程序實現
方式一:
編寫一個類實現Servlet接口,實現所有方法
實現Service方法,用于處理請求,并響應數據
配置web.xml文件
<servlet>:配置Servlet程序
- <servlet-name>:為Servlet程序起別名(常為類名)
- <servlet-class>:Servlet程序的全類名
- (可選)<init-param>:初始化參數
- <param-name>:初始化參數的名字
- <param-value>:初始化參數的值
<servlet-mapping>:配置訪問Servlet程序的地址
-
<servlet-name>:明確配置的地址給指定的哪個Servlet程序使用
-
<url-pattern>:/自定義地址
/解析時代表:http://ip地址:服務器端口號/工程名
/自定義地址:即訪問到Servlet程序的地址
(可選)<context-param>:
- <param-name>:key
- <param-value>:value
方式二:
生命周期:
①執行Servlet構造方法
②執行init方法進行初始化
③執行service方法
④執行destroy進行銷毀
- ①②在創建Servlet程序時會調用,③是每次訪問網址時調用,④在停止web工程服務時調用
Servlet中的類
1)Selvice類:將service方法中ServletRequest類型的形參向下轉型為HttpServletRequest類型,調用其對象的getMethod(),可以獲取發送數據請求的為get還是post類型
2)ServletConfig類:Selvlet程序的配置信息類,可獲取程序別名、初始化參數、ServletContext對象
? ①調用init方法中ServletConfig類型的形參的方法:
? ②繼承HttpServlet的類中重寫的doGet或doPost方法后:
- 每個ServletConfig只對唯一的Servlet程序有效
- 若該類重寫了init方法,需要顯示調用super.init(config),否則會報空指針異常
3)ServletContext類:表示Selvlet上下文,是一個接口,一個工程中只會有一個ServletContext對象的實例,且該對象是一個域對象
- 先調用getServletContext()獲取一個ServletContext類型的變量
4)HttpServletRequest類:Tomcat服務器將每次發送請求的Http協議信息封裝到此類的對象中并作為doGet和doPost方法中的參數供我們調用,可獲取所有的請求信息
- 地址要以/開頭,即訪問的是必須是http://ip:port/工程名/下的(webapp目錄下)的資源,地址欄地址不變
- 請求的轉發 的地址 可以訪問到WEB-INF目錄下
5)HttpServletResponse類:同樣是Tomcat服務器創建的對象,表示的是發送請求后所有的響應信息,可以用來設置返回給客戶端的信息(流的方式)
- 兩個流不能同時使用
- 調用getWriter()后返回PrintWriter類的對象,調用該對象的write("str")直接返回給客戶端指定字符串
- 返回中文字符串時,可能出現中文亂碼,需要將服務器編碼集和瀏覽器編碼集設為一致(要在獲取流對象前設置)
- Content-Type,text/html;charset=UTF-8:設置瀏覽器編碼集為UTF-8
- 絕對路徑:/工程名/資源名
HTTP
請求
1)客戶端–>服務器:請求
- 請求:GET、POST
GET請求:
form標簽中使用method=get、a標簽、link標簽引入css、Script標簽引入js文件、img標簽引入圖片、iframe標簽引入html頁面、瀏覽器輸入地址后回車
? ①請求行
? ②請求頭:key:value(不同的鍵值對表示不同含義)
- en-US(英語)、zh-CN(漢語)
- Keep-Alive:回傳數據后不要馬上關閉連接,維持一段時間
- Closed:馬上斷開連接
POST請求:
form標簽中使用method=post
? ①請求行:請求方式(POST)、請求的資源路徑、請求的協議和版本號
? ②請求頭
- application/x-www-form-urlencoded:表示提交的數據格式是name=value&name=value,然后對其進行url編碼
- multipart/form-data:表示以多段的形式提交數據給服務器(以流的形式提交,用于上傳)
- no-cache:不緩存
(空格一行)
? ③請求體:發送給服務器的數據
響應
2)服務器–>客戶端:響應
? ①響應行
? ②響應頭
- MIME:大類型/小類型
(空格一行)
? ③響應體:回傳給客戶端的數據
JSP
jsp頭部的page指令
language:表示jsp翻譯后為什么語言的文件(目前只支持Java)
contentType:表示返回的數據類型
pageEncoding:表示當前jsp頁面的字符集
import:導包、導類
autoFlush:(out輸出流專用)設置輸出流緩沖區滿了之后是否自動刷新緩沖區(默認為true)
buffer:(out輸出流專用)設置輸出流緩沖區的大小,默認為8kb
errorPage:設置jsp頁面出錯時自動跳轉去的錯誤頁面路徑
isErrorPage:設置當前jsp頁面是否為錯誤信息頁面(默認是false,true的話會生成異常類捕獲異常信息)
session:設置訪問當前jsp頁面是否會創建HttpSession對象(默認是true)
extends:設置jsp文件被Java翻譯出來后默認繼承的類
腳本
1)聲明腳本:
<%! java代碼 %>
2)表達式腳本:用于在頁面上輸出數據
<% =表達式 %>
3)代碼腳本:
<% java代碼 %>
EL表達式
使用
- 用于替換表達式腳本,主要用于輸出jsp頁面中的數據(特別時域對象中保存的數據)
${ 表達式 }
-
當域對象中都有相同的key時,會按照域的從小到大范圍進行輸出
-
在輸出null值時,輸出的為空串
-
在輸出自定義類的對象時,直接調用對象的toString()
在輸出自定義類對象的屬性值(對象.屬性名)時,實質上調用的是對應屬性名的get()(獲取屬性值)
不同類型屬性輸出值不同:
- 變量:值
- 數組:數組地址,根據數組[下標]找對應值
- 集合List:集合全部元素,根據集合[下標]找對應值
- 集合Map:集合全部元素,根據集合.key值找對應value值
運算符
①關系運算符:== / eq(等于)、!= / ne(不等于)、< / lt(小于)、> / gt(大于)、<= / le(小于等于)、>= / ge(大于等于)
②邏輯運算符:&& / and(與)、|| / or(或)、| / not(非)
③算術運算:+(加)、-(減)、*(乘)、/ / div(除)、% / mod(取余)
④empty運算${empty 表達式}:判斷數據是否為空,如果為空,返回true
⑤三元運算:條件 ? 表達式1 : 表達式2
⑥[]運算符:Map['帶有特殊符號的key的值']
- 輸出指定下標的數組或List集合中的值
- 輸出Map集合中含有特殊字符的key所對應的value值
⑦.運算:調用get方法
隱含對象
①PageContextImpl pageContext:獲取jsp頁面中的九大內置對象
- ${pageContext.九大內置對象}即可獲取九大內置對象,也可以.方法名直接調用對象所擁有的方法(.調用的是方法名所對應的get方法,與調用get方法輸出屬性值類似)
②Map<String,Object> pageScope:獲取pageContext域中的數據
③Map<String,Object> requestScope:獲取request域中的數據
④Map<String,Object> sessionScope:獲取session域中的數據
⑤Map<String,Object> applicationScope:獲取servletContext域中的數據
⑥ Map<String,String> param:獲取jsp請求頁面中請求參數的值
⑦Map<String,String[]> paramValues:獲取jsp頁面中請求參數的值(?name=value & name=value),在有多個值時使用
⑧Map<String,String> header:獲取請求頭的信息
⑨Map<String,String[]> headerValues:獲取請求頭的信息,多個值時使用
⑩Map<String,Cookie> cookie:獲取當前請求的Cookie的信息,可通過該Cookie獲取到指定的Key或其對應的Value值
?Map<String,String> initParam:獲取在web.xml中配置的<context-param>上下文參數
九大內置對象
HttpServletRequest類:request:請求對象(域對象,一次請求內有效)
- getScheme():獲取請求的協議
- getServerName():獲取請求的服務器的IP地址或域名
- getServerPort():獲取請求的服務器的端口號
- getContextPath():獲取當前工程路徑(相對)
- getMethod():獲取請求的方式(GET或POST)
- getRemoteHost():獲取客戶端的IP地址
response:響應對象
PageContextImpl類:pageContext:jsp的上下文對象(域對象,當前jsp頁面范圍內有效)
HttpSession類:session:會話對象(域對象,一個會話范圍內有效(打開瀏覽器訪問服務器,直到關閉瀏覽器))
- getID():獲取會話的唯一標識
ServletContext類:application:ServletContext對象(域對象,整個web工程內有效(web不停止,數據就在))
config:ServletConfig對象
out:jsp輸出流對象
page:指向當前jsp的對象
exception:異常對象
- out.wirte()、out.print()和response.getWriter().write()都可以用來輸出數據給客戶端
- jsp頁面中的所有代碼執行完后,會執行一下兩個操作:
- 執行out.flush(),將out緩沖區的數據追加寫入到response緩沖區中
- response執行刷新操作,將數據寫給客戶端
- out.print():可用于輸出任意類型數據(會先將任意類型數據先轉化為字符串后再調用write())
- out.write():可輸出字符串(會將任意類型數據先轉化為char類型再輸出)
常用標簽
1)靜態包含:
<%@ include file="/jsp頁面路徑" %>
- 實質上是將被包含的jsp文件的代碼拷貝到包含的位置處 調用out.write()輸出
2)動態包含:
<jsp:include page="/jsp文件路徑" >
? (可選)<jsp:param name="參數名" value="參數值">
</jsp:include>
- 實質上是執行了JspRuntimeLibrary(requesst,response,"/剪視頻文件路徑",out,false)代碼去調用jsp頁面
- 該方法共用了九大內置對象
- 可選部分為傳遞參數,可用request.getParameter("name")獲取值
3)請求轉發:
<jsp:forward page="/跳轉路徑"></jsp:forward>
- 與調用request.getRequestDispatcher("/跳轉路徑").forward(request,response)效果完全一樣
監聽器
- 三大組件:Servlet程序、Filter過濾器、Listener監聽器
- 接口,監聽某事物的變化,通過回調函數,反饋給客戶(程序)去做對應的處理
ServletContextListener監聽器:監聽ServletContext對象的創建(web工程創建時)和銷毀(web工程停止時)
- contextInialized(ServletContextEvent sce):在ServletContext對象創建后調用,做初始化
- contextDestroyed(ServletContextEvent sce):在ServletContext對象銷毀后調用
使用步驟:
編寫一個類實現ServletContextListener接口
調用其兩個回調方法
web.xml中配置監聽器
-
<listener>
? <listener-class> </listener-class>
</listener>
JSTL標簽庫
- 替換代碼腳本
1)導入標簽庫的jar包:taglibs-standard-impl.jar、taglibs-standard-spec.jar
2)使用taglib指令引入標簽庫:
CORE標簽庫:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
XML標簽庫:<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
FMT標簽庫:<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fml" %>
SQL標簽庫:<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
FUNCTIONS標簽庫:<%@ taglib="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
3)常用標簽:
? ①<c:set />:往域中保存數據
- scope:設置保存的域
- page:PageContext域(默認)
- request:Request域
- session:Session域
- application:ServletContext域
- var:設置key值
- value:設置value值
②<c:if></c:if>:判斷
- test:test內的El表達式成立,則輸出標簽間的內容
③<c:choose>:多情況判斷
? <c:when test="表達式"></c:when>:當test表達式的值為true,執行when標簽
? <c:otherwise></c:otherwise>:相當于switch-case的default
</c:choose>
- 標簽內只能使用jsp注釋
- when的父標簽一定是choose
- otherwise標簽內可以嵌套choose-when
④<c:forEach></c:forEach>:遍歷
- begin:遍歷開始索引
- end:遍歷結束索引
- var:當前正在遍歷的數據
- items:遍歷的數據(集合(Map為鍵值對)、數組等)
- step:遍歷時的步長(迭代時的步長)
- varStatus:當前遍歷到的數據的狀態
- current:獲取當前所遍歷的數據
- index:獲取遍歷的索引
- count:當前是遍歷的第幾個
- first:當前遍歷的數據是否位于第一條
- last:當前遍歷的數據是否位于最后一條
- begin:獲取begin屬性值
- end:獲取end屬性值
- step:獲取step屬性值
使用begin-end,var則代表從索引開始到結束
使用items,var則代表items所要遍歷的數據
使用EL表達式${}獲取域中的數據作為items所要遍歷的數據
使用EL表達式${}獲取var的值
獲取到Map的鍵值對后可通過.key或.value獲取對應的key或value
文件上傳與下載
1)上傳文件:(post)
要有form標簽,屬性值method=post,enctype=multipart/form-data
- get有數據大小限制,所以選用post
- enctype=multipart/form-data表示提交的數據以多段(每個表單項為一個數據段)的形式進行拼接,然后以二進制流的形式發送給服務器
- 請求頭中Content-Type表示提交的數據類型
- boundary是系統每次隨機生成的數據段分隔符,分隔符末尾帶--是數據的結束標記
- 每段數據以分隔符開始,最后以分隔符結束,數據段以分隔符開始后,包含:①對數據的描述 ②空行 ③上傳的數據
使用<input type="file" name=""/>提交需要上傳的文件
在Servlet程序中對數據進行解析和保存(先導包)
先ServletFileUpload.isMultipartContent(req)判斷上傳的數據是否是多段
通過new DiskFileItemFactory()創建一個FileItemFactory工廠的實現類對象,將其作為參數創建一個ServletFileUpload(FileItemFactory)工具類的對象
調用工具類對象的parseRequest(req)來解析上傳的數據,得到一個封裝了每一個表單項的List<FileItem>集合
循環遍歷(增強for循環)獲取每一個FileItem類型的表單項,調用表單項對象的isFormField()判斷每一個表單項是普通數據類型,還是上傳的文件
普通表單項:
- 調用表單項對象的getFiledName()來獲取表單項的name屬性值
- 調用表單項對象的getString("UTF-8")來獲取表單項的value屬性值
上傳的文件:
- 調用表單項對象的getName()獲取上傳的文件名
- 調用表單項對象的write(new File("path"+"name"))將指定名字的文件保存在指定路徑的位置處
2)下載文件:(get)
獲取要下載的文件名fileName
在下載前需要先知道下載的文件類型(不同文件下載后的格式不一樣)
-
調用getServletContext()獲取ServletContext對象
-
調用ServletContext對象的getMimeType("path"+fileName)獲取要下載的文件的數據類型(返回String類型對象)
- /映射到當前工程目錄的web下
-
調用resp.setContentType(數據類型),通過響應頭告訴客戶端返回的數據類型
-
調用resp.setHeader("Content-Disposition","attachment;filename="+fileName),設置并通過響應頭告訴客戶端這個數據是用于下載的
-
Content-Disposition響應頭,表示收到的數據的處理方式
attachment:表示數據為附件,下載使用
filename:表示所下載的文件的名
- 若下載的文件名為中文,需要調用URLEncoder.encode("filename","UTF-8")轉換為UTF-8編碼集的樣式,否則會出現亂碼
-
讀取要下載的文件內容
- 調用ServletContext對象的getResourceAsStream("path"+fileName)獲取要下載的文件的一個InputStream流
將要下載的文件內容回傳給客戶端
- 調用resp.getOutputStream()獲取響應給客戶端的輸出流
- 若已導入commons-io.jar,直接調用IOUtils.copy(InputStream,OutputStream)將文件的輸入流內容復制給客戶端的輸出流
3)解析上傳的數據:
- 導入jar包:commons-io.jar、commons-fileupload.jar
ServletFileUpload類:用于解析上傳的數據
FileItem類:表示每個表單項
- boolean ServletFileUpload.isMultipartContent(HttpServletRequest request):判斷上傳的數據是否為多段數據
- public List<FileItem> parseRequest(HttpServletRequest request):解析上傳的數據
- boolean FileItem.isFormField():判斷表單項是否為普通的表單項還是文件類型,true則是普通表單項
- String FileItem.getFieldName():獲取表單項的name屬性值
- String FileItem.getString():獲取表單項的值,可傳參數"UTF-8"來防止出現亂碼
- String FileItem.getName():獲取上傳的文件名
- void FileItem.write(file):將上傳的文件寫入到file所指向的硬盤位置
Cookie
創建Cookie:
- 通過響應頭Set-Cookie通知客戶端保存Cookie(Set-Cookie:key=value)
- 在收到Set-Cookie響應頭時,會先查看有無該Cookie,沒有則創建,有則修改
- 可以一次性保存多個Cookie,一個Cookie的大小不能超過4kb
獲取Cookie:
調用request對象.getCookies(),返回一個Cookie[]數組
- 客戶端通過請求頭Cookie:key=value把Cookie信息發送給服務器
要獲取指定key的Cookie時,只能循環遍歷,判斷Cookie的key與所要的是否相同
Cookie對象.getName():獲取Cookie的key
Cookie對象.getValue():獲取Cookie的value
修改Cookie:
①調用構造器:
②調用方法:
- 中文等會亂碼,需要用Base64編碼
設置Cookie存活時間:
調用cookie對象.setMaxAge(s)設置
-
s為存活的秒數
s為負數時(默認),為會話級別,退出瀏覽器時銷毀Cookie
s為0時,立即刪除Cookie
s為正數時,在s秒后刪除Cookie
設置Cookie有效路徑:
- 該路徑及該路徑下所有的子路徑在請求時都會發送該Cookie
Session
創建Session:
- 第一次調用時是創建Session,之后調用是調用創建好的Session
- session對象.isNew()可以判斷是否為新創建的Session,返回boolean值
- 每個Session會有一個唯一的ID
Session中存取數值:
設置和獲取Session的超時時長:
調用session對象.setMaxInactiveInterval(s)設置Session的超時時長
-
s為存活的秒數
-
當s為正數時,設置s秒后銷毀Session,當s為負數時,設置為永不銷毀
-
s的默認時長為30(分鐘),在Tomcat服務器配置文件web.xml中有設定,可以在工程的web.xml中配置以下:
<session-config>
? <session-timeout>存活分鐘</session-timeout>
</session-config>
調用session對象.getMaxInactiveInterval()獲取Session的超時時長
- Session超時時長為:客戶端兩次請求間的間隔時長
調用session對象.invalidate()讓當前Session立即失效
Filter過濾器
①請求攔截、響應過濾
②權限配置(實現doFilter方法)
③使用Filter過濾器統一處理事務
- web.xml中配置url為/*可以確保所有的請求都會經過Filter過濾器處理,若在執行的所有路徑中有可能有異常的進行拋出,并由doFilter()進行異常的捕獲,最后判斷是否提交或回滾,由此來實現事務的管理
(一)web.xml文件配置:
<filter>
? <filter-name>名稱</filter-name>
? <filter-class>實現的類的全類名</filter-class>
? <init-param>(可選、可多選)
? <param-name> name </param-name>
? <param-value> value </param-value>
? </init-param>
</filter>
<filter-mapping>
? <filter-name>對應名稱</filter-name>
? <url-pattern> 攔截的目標 </url-pattern>(可多選)
-
攔截的三種目標:
/ :http://localhost:8080/工程路徑/
- /資源名:精確匹配,攔截所有想訪問指定資源的程序
- /目錄/*:目錄匹配,攔截所有想訪問指定目錄下的資源的程序
- *.文件類型:后綴名匹配,攔截所有想訪問相關后綴名的文件的程序
</filter-mapping>
(二)實現步驟:
①實現javax.servlet.Filter下的Filter接口(需導包)
②根據實現Filter的類來配置web.xml文件,限制訪問哪些資源需要經過doFilter過濾
③將需要進行請求攔截的內容在doFilter()內實現
- ServletRequest類要強轉為HttpServletRequest類才能獲取session域
④調用參數的方法filterChain.doFilter(servletRequest,servletResponse)實現請求的放行
- 缺少該步驟的話,即使檢查通過,也不會訪問到目標資源
(三)Filter過濾器的生命周期
①構造器、init()初始化:在Filter過濾器創建時執行
②doFilter():每次攔截時執行
③destroy():web服務停止時執行銷毀
(四)Filter過濾器參數中的類
FilterConfig類:
- getFilterName():獲取web.xml文件中所對應的的文本值
- getInitParameter("name"):獲取web.xml文件中下的下的name所對應的value值
- getServletContext():獲取ServletContext對象
FilterChain過濾器鏈:
-
doFilter():若有多個Fliter過濾器,執行下一個過濾器,否則訪問目標資源
-
Filter過濾器的執行順序是按Filter在web.xml中的配置順序執行的
-
默認情況下所有Filter過濾器及目標資源處在同一線程
-
多個Filter過濾器及目標資源共享一個request對象
-
執行順序:(假設兩個過濾器)
filter1前——doFilter1——filter2前——doFilter2——目標資源——filter后2——filter后1
- 若其中任意過濾器執行完后無doFilter,則會直接返回(不會訪問目標資源)
(五)ThreadLocal
- 每個線程中可以為其關聯一個數據,可以使用ThreadLocal來關聯數據
- 其關聯方式類似于Map(其key值為String類型,存放當前線程名,value值存放想要在該線程中所相關聯的數據的值)
- 其作用是為了解決線程安全問題(比如事務回滾問題(保存同一個Connection對象)(用后記得將保存的ThreadLocal值remove()))
- 創建的ThreadLocal對象一般為static修飾
- 調用ThreadLocal對象的set(數值)來存儲關聯的值(每個ThreadLocal對象只能關聯一個數據值,本質是根據線程名來存儲)
- 調用ThreadLocal對象的get()來獲取關聯的值(本質是根據線程名來獲取)
JSON
-
本質是一個對象
-
有兩種存在形式:對象(常用于操作JSON中的數據)、字符串(常用于獲取JSON中的數據)
-
JSON.stringify(JSON對象):將JSON對象轉換為字符串形式
JSON.parse(JSON對象):將JSON對象轉換為對象形式
-
(一)客戶端:(javascript下)
變量:
var 變量名={
? "key1" : 值1 ,
? "key2" : 值2 ,
? …
}
取值:
變量名.key
- 數組的話可根據下標獲取指定的值,否則打印數組內全部數據
- JSON內可嵌套JSON
(二)服務器:(導包:gson.jsp)
JavaBean中:
List、Map中:(list與map方法類似)
創建一個Gson對象
調用Gson對象.toJson(list對象)可將list對象轉換為JSON字符串類型對象(返回類型為String類型)
調用Gson對象.fromJson(JSON對象,TypeOfT)可將JSON對象轉換為list集合對象
-
TypeOfT是一個Type類型 ,獲取方法:
創建一個(匿名)類,該類繼承了TypeToken<集合類型<泛型類型>>,最后調用該類的getType()即可獲取
-
建議直接使用匿名子類(new TypeToken<集合類型<泛型類型>>(){}的方式調用getType())
AJAX
特點:局部更新、異步請求與響應
(一)請求與響應:(JavaScript下)
- true:異步
(二)Jquery中使用AJAX:
①$.ajax({ })
url:請求地址
data:請求參數(key=value)
type:請求方式
success:function(變量名){}:請求后的響應事件
- 變量名:響應 的對象
dataType:決定響應對象的類型
-
text:text純文本
xml:xml文本的數據格式
json:JSON對象類型的對象
②$.get("url地址","請求參數","請求響應后的響應事件","響應對象的類型")
- 請求方式已確定為get請求
③$.post("url地址","請求參數","請求響應后的響應事件","響應對象的類型")
- 請求方式已確定為post請求
④$.getJSON("url地址","請求參數","請求響應后的響應事件")
- 請求方式已確定為get請求,響應對象的類型確定為JSON對象類型
⑤$("選擇器").serialize():獲取表單提交的全部數據
- 數據的格式為key=value&key=value所拼接
- 在請求轉發到servlet程序時,確保在data(請求參數)中添加&才能獲取到請求參數
i18n
思路:
- baseName:共有、通用的名字
- localName:指定地區語言的名字
- 配置文件內以key=value的形式保存,key為英文,value為對應的地區的語言
- Locale.getDefault():獲取當前系統默認的地區語言的locale對象
- Locale.getAvailableLocales():獲取集合全部的地區語言的locale對象
- Locale.CHINA():獲取zh_CN的locale對象
- Locale.US():獲取en_US的locale對象
(一)請求頭方式實現網頁語言的國際化
<%
%>
之后在所有用到多種語言的文本處,使用
<%= ResourceBundle對象.getString("baseName",locale對象) %>
來表示文本,當瀏覽器默認語言不同時,就會自動更改網頁的語言
(二)根據用戶選擇實現網頁語言的國際化
(三)使用JSTL標簽庫實現網頁語言的國際化
零碎知識點
JS和jQuery的頁面加載完成之后
-
JS:window.onload=function(){}
-
jQuery:$(function(){})、$(document).ready(function(){})
1)觸發時間:
JS:頁面加載好后,創建所有標簽的DOM對象,并將標簽顯示內容加載完成
jQuery:頁面加載好后,創建所有標簽的DOM對象后就執行
2)執行次數:
JS:只會執行最后一次賦值的函數
jQuery:執行所有的function函數,按順序執行
base標簽
相對路徑在跳轉時會根據當前頁面地址欄中的地址進行跳轉,使用base標簽可以設置跳轉時的相對路徑
<base href="絕對路徑"/>
- href的屬性值變成 相對路徑前的地址,當頁面以相對路徑進行跳轉時,會在該地址的基礎上進行跳轉
- 絕對路徑下的資源名可以省略(跳轉是在目錄的基礎上跳轉(/、..),與資源名無關)
web中/的不同意義
被瀏覽器解析:http://ip:port
被服務器解析:http://ip:port/工程名
response.sendRediect("/"):將/發送給瀏覽器解析,得到http://ip:port
BeanUtils工具類
- 將客戶端的表單信息快速封裝進自定義類中
導包:commons-logging.jar、commons-beanutils.jar
- Object為要將數據封裝進去的類(先獲取name屬性值,再將值封裝進Object類中)
- 可調用req.getParameterMap(),獲取客戶端的表單信息并封裝進一個Map集合中,作為populate的另一個參數
- 本質是獲取name與其值后,調用類中同名的set方法
表單重復提交
①在用戶提交表單后,因為瀏覽器會記錄下最后一次請求的信息,服務器若使用請求轉發進行頁面跳轉,當用戶按功能鍵(Ctrl+F5)刷新時,會重新發起瀏覽器的最后一次請求。
- 解決方法:改用請求轉發為重定向
②用戶提交表單,但可能出現網絡延遲,導致用戶多次提交表單
- 解決辦法:使用驗證碼
③用戶提交表單,服務器也正常跳轉,但提交完成后,用戶在瀏覽器頁面下進行回退,重新提交表單
- 解決辦法:使用驗證碼
請求轉發與重定向
1)請求轉發:
- 客戶端向服務器發送一個請求,(客戶端發送的)請求地址沒有變化,服務器調用內部方法將請求轉發到新地址進行處理,處理完后將結果返回給客戶端
- 請求轉發的方式只會有一次客戶端對服務器的請求,服務器對客戶端的響應,因此瀏覽器地址欄顯示的依舊為第一次訪問的原地址(request對象保持不變)
- 請求轉發只能訪問當前工程web下的資源,但可以訪問WEB-INF下的資源,且request.setAttribute()域內保存的數據,新頁面可以獲取
2)重定向:
- 客戶端向服務器發送一個請求,(客戶端發送的)請求地址已發生了變化,服務器向客戶端發送了一個全新的地址,此刻客戶端會自動訪問新的地址,服務器將新的地址內容返回給客戶端
- 客戶端發起了兩次請求,服務器進行了兩次響應,且瀏覽器地址欄顯示的為第二次請求訪問的新地址(request對象發生了改變)
- 重定向可以訪問其他工程下的資源,但不可訪問WEB-INF下的資源,且request.setAttribute()域內保存的數據,新頁面獲取不到
驗證碼
導入谷歌驗證碼jar包kaptcha.jar
配置web.xml文件用于生成驗證碼的Servlet程序
<servlet-class>
? com.google.code.kaptcha.servlet.KaptchaServlet
</servlet-class>
在表單中使用img標簽引用到servlet地址處并獲取到驗證碼圖片
服務器中獲取谷歌生成的驗證碼并和客戶端發送的驗證碼進行比較
- 使用request對象.getSession().getAttribute(KAPTCHA_SESSION_KEY)獲取Session中的驗證碼
- 獲取到驗證碼、保存到String中后應立即調用request對象.getSession().removeAttribute(KAPTCHA_SESSION_KEY)銷毀驗證碼
綁定單擊事件,使用this.src="絕對路徑?time="+new Date()直接訪問web.xml下kaptcha的servlet程序,可以起到單擊圖片切換驗證碼的效果,且由于有參數Date的作用,因此不會因為緩存而切換不了驗證碼
異常處理
步驟:配置web.xml文件,設計好跳轉的頁面,并將異常往外拋出,由Tomcat服務器捕獲
<error-page>
? <error-code> 錯誤碼 </error-code>
? <location> 跳轉的頁面地址 </location>
- / :http://localhost:8080/工程名/
</error-page>
BindException
netstat -ano|findstr 端口號:查看占用端口的程序
taskkill /F /PID 端口id:結束端口占用
請求頭
- req.getHeader():可以獲取對應的請求頭
Referer:獲取發起請求的絕對路徑(可用于購物車添加后返回原頁面)
總結
以上是生活随笔為你收集整理的JavaWeb随手笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中赋值语句和判断语句结合_P
- 下一篇: Java笔记--基础篇