一.JSP的頁面元素
a. 腳本 ScrptLet
1. <% 局部變量、java語句%>
- <%! 局部變量视卢、定義方法>
- <%=輸出表達式 %>
一般而言廊驼,修改web.xml妒挎、配置文件、java代碼鳞芙,需要重啟服務(wù)原朝,但是如果修改Jsp\html\css\js,不需要重啟。
b. 指令
page指令
<%@ page .... %>
page指定的屬性:
language:jsp頁面使用的腳本語言
import:導(dǎo)入類
pageEncoding:jsp文件自身編碼 jsp => java
contentType:瀏覽器解析jsp的編碼
c. 注釋
- html注釋 < !-- -->,可以被用戶通過瀏覽器查看源碼看到
- java注釋 // /......./
- jsp注釋 <%-- --%>
d. JSP九大內(nèi)置對象(自帶的鞠评,不需要new 也能使用的對象)
- out: 輸出對象谢澈,向客戶端輸出內(nèi)容
- request:請求對象御板,存儲客戶端向服務(wù)端發(fā)送的請求信息
request對象的常見方法:
String getParameter(String name) 根據(jù)請求的字段名key怠肋,返回字段值value input標(biāo)簽的value屬性值
String[] getParameterValues(String name) 根據(jù)請求的字段名key,返回多個字段值value(checkbox 復(fù)選框)
void setCharacterEncoding("編碼格式"):設(shè)置post請求編碼淹朋,tomcat7以前默認iso-8859-1笙各,tomcat8以后用utf-8
getRequestDispatcher("b.jsp").forward(request,response): 以請求轉(zhuǎn)發(fā)的方式跳轉(zhuǎn)頁面,A => B
ServletContext getServletContext(): 獲取項目的ServletContext對象
http://localhost:8080/show.jsp?uname=zs&upwd=avc&uage=29&uhobbies=%E8%B6%B3%E7%90%83&uhobbies=%E7%AF%AE%E7%90%83
get提交方式:method="get" 和 地址欄础芍、超鏈接<a href="xx"/> 請求方式 默認都是get請求方式
get與post請求方式的區(qū)別
- get方式 在地址欄顯示 請求信息(但是地址欄能夠容納的信息有限杈抢,4-5KB;如果請求數(shù)據(jù)存在大文件仑性,圖片等會出現(xiàn)地址欄無法容納大小而出錯)惶楼;post不會.
- 文件上傳操作,必須是post
推薦使用post
get方式請求诊杆,如果出現(xiàn)亂碼,如下解決方案:
- 統(tǒng)一每一個變量的編碼(不推薦)
new String(就舊碼晨汹,新編碼);
name = new String(name.getBytes("iso-8859-1","utf-8")); - 修改server.xml,一次性的更改tomcat默認get提交方式的編碼(utf-8)
建議 使用tomcat時豹储,首先再server.xml中 統(tǒng)一個體方式的請求方式的編碼。淘这。剥扣。 修改端口號那一行添加URIEncoding="UTF-8"
tomcat8以后默認時utf-8
- resonse:響應(yīng)對象
提供的方法:
void addCookie(Cookie cookie): 服務(wù)端向客戶端增加cookie對象
void senRedirect(String location) throws IOException: 頁面跳轉(zhuǎn)的一種方式,重定向
void setContentType(String type):設(shè)置服務(wù)端響應(yīng)的編碼(設(shè)置服務(wù)端的contentype)
示例:登陸
login.jsp => check.jsp => success.jsp
請求轉(zhuǎn)發(fā) | 重定向 | |
---|---|---|
地址欄是否改變 | 不變check.jsp | 改變success.jsp |
是否保留第一次請求時的數(shù)據(jù) | 保留 | 不保留 |
請求次數(shù) | 1次 | 2次 |
- pageContext jsp頁面容器
- session(存在于服務(wù)端):繪畫
講session前先了解cookie铝穷;
Cookie(存在于客戶端钠怯,不是內(nèi)置對象):Cookie是由服務(wù)端生成的,再發(fā)送給客戶端保存氧骤。
相當(dāng)于 本地緩存的作用: 客戶端(hello.mp4,zs/abc)=>服務(wù)端(hello.mp4,zs/abc)
作用:提高訪問服務(wù)端的效率呻疹,但是安全性較差。
Cookie:name=value
javax.servlet.htttp.Cookie
public Cookie(String name, String value)
String getName():獲取name
String getValue():獲取value
void setMaxAge(int expire):最大有限期(秒)
服務(wù)端準備cookie:
response.addCookie(Cookie cookie)
頁面跳轉(zhuǎn)(轉(zhuǎn)發(fā),重定向)
客戶端獲取cookie:request.getCookies();
a. 服務(wù)端增加cookie: response對象刽锤; 客戶端獲取cookie:request對象
b. 不能直接獲取某一個單獨對象镊尺,只能一次性將全部的cookie拿到
通過F12可以發(fā)現(xiàn) 除了自己設(shè)置的cookie外,還會得到一個name為JSSESSIONID的cookie
session:會話
a. 瀏覽網(wǎng)站:開始-關(guān)閉
b. 購物: 瀏覽并思、付款庐氮、退出
c. 電子郵件: 瀏覽、寫郵件宋彼、退出
開始-結(jié)束為一次會話
session機制
客戶端第一次請求服務(wù)端時弄砍, 服務(wù)端會產(chǎn)生一個session對象(用戶保存該客戶的信息),并且每個session對象都會有一個唯一的sessionId(用于區(qū)分其他session)输涕,并且服務(wù)端也會產(chǎn)生一個cookie音婶,并且該cookie的name=JSESSIONID,value=服務(wù)端的sessionId的值,然后 服務(wù)端會在響應(yīng)客戶端的同時將該cookie發(fā)送給客戶端 莱坎,至此 客戶端就有了一個cookie(JSESSIONID),因此衣式,客戶端的cookie就可以和服務(wù)端的session一一對應(yīng)(JSESSSIONID=>sessionId)
客戶端第2/n次請求服務(wù)端時:服務(wù)端會先用客戶端cookie中的JSESSIONID 去服務(wù)端的session中匹配sessionId,如果匹配成功檐什,說明此用戶已不是第一次訪問
生活實例:
客戶端:顧客(第一次存包后拿到號碼牌)
服務(wù)端:存包處
session方法:
String getId():獲取sessionId
boolean isNew():判斷是否是新用戶(第一次訪問)
void invalidate():使session失效(退出登陸碴卧、注銷)
setAttribute();
getAttribute();
void setMaxInActiveInterval(秒):設(shè)置最大有效時間,
- application 全局對象
String getContextPath() 獲取當(dāng)前項目虛擬路徑
String getRealPath() 獲取當(dāng)前項目的絕對路徑 - config 配置對象(服務(wù)器配置信息)
- page 當(dāng)前JSP頁面對象(相當(dāng)于java中的this)
-
exception 異常對象
四個范圍對象(從小到大)
pageContext jsp
頁面容器: 當(dāng)前頁面有效(跳轉(zhuǎn)后無效)
request 請求對象:同一次請求有效
session 會話對象: 同一次會話有效
application 全局對象:全局有效;整個項目運行期間 都有效;關(guān)閉服務(wù)乃正、其他項目無效
=》多個項目共享住册、重啟后仍然有效: JNDI
以上4個對象共有的方法:
Object getAttribute(String name ):根據(jù)屬性名,獲取屬性值
void setAttribute(String name, Object obj) 設(shè)置屬性值
setAttribute("a","b")//如果a不存在瓮具,則創(chuàng)建一個新的荧飞,如果存在則覆蓋
removeAttribute("a")根據(jù)屬性名刪除對象
建議以上范圍對象在使用時盡量用最小的范圍,對象范圍越大造成的性能損耗越大搭综。