一.JSP的頁面元素
a. 腳本 ScrptLet
1. <% 局部變量、java語句%>
- <%! 局部變量、定義方法>
- <%=輸出表達(dá)式 %>
一般而言,修改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)置對(duì)象(自帶的,不需要new 也能使用的對(duì)象)
- out: 輸出對(duì)象,向客戶端輸出內(nèi)容
- request:請(qǐng)求對(duì)象,存儲(chǔ)客戶端向服務(wù)端發(fā)送的請(qǐng)求信息
request對(duì)象的常見方法:
String getParameter(String name) 根據(jù)請(qǐng)求的字段名key,返回字段值value input標(biāo)簽的value屬性值
String[] getParameterValues(String name) 根據(jù)請(qǐng)求的字段名key,返回多個(gè)字段值value(checkbox 復(fù)選框)
void setCharacterEncoding("編碼格式"):設(shè)置post請(qǐng)求編碼,tomcat7以前默認(rèn)iso-8859-1,tomcat8以后用utf-8
getRequestDispatcher("b.jsp").forward(request,response): 以請(qǐng)求轉(zhuǎn)發(fā)的方式跳轉(zhuǎn)頁面,A => B
ServletContext getServletContext(): 獲取項(xiàng)目的ServletContext對(duì)象
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"/> 請(qǐng)求方式 默認(rèn)都是get請(qǐng)求方式
get與post請(qǐng)求方式的區(qū)別
- get方式 在地址欄顯示 請(qǐng)求信息(但是地址欄能夠容納的信息有限,4-5KB;如果請(qǐng)求數(shù)據(jù)存在大文件,圖片等會(huì)出現(xiàn)地址欄無法容納大小而出錯(cuò));post不會(huì).
- 文件上傳操作,必須是post
推薦使用post
get方式請(qǐng)求,如果出現(xiàn)亂碼,如下解決方案:
- 統(tǒng)一每一個(gè)變量的編碼(不推薦)
new String(就舊碼,新編碼);
name = new String(name.getBytes("iso-8859-1","utf-8")); - 修改server.xml,一次性的更改tomcat默認(rèn)get提交方式的編碼(utf-8)
建議 使用tomcat時(shí),首先再server.xml中 統(tǒng)一個(gè)體方式的請(qǐng)求方式的編碼。。。 修改端口號(hào)那一行添加URIEncoding="UTF-8"
tomcat8以后默認(rèn)時(shí)utf-8
- resonse:響應(yīng)對(duì)象
提供的方法:
void addCookie(Cookie cookie): 服務(wù)端向客戶端增加cookie對(duì)象
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
| 請(qǐng)求轉(zhuǎn)發(fā) | 重定向 | |
|---|---|---|
| 地址欄是否改變 | 不變check.jsp | 改變success.jsp |
| 是否保留第一次請(qǐng)求時(shí)的數(shù)據(jù) | 保留 | 不保留 |
| 請(qǐng)求次數(shù) | 1次 | 2次 |
- pageContext jsp頁面容器
- session(存在于服務(wù)端):繪畫
講session前先了解cookie;
Cookie(存在于客戶端,不是內(nèi)置對(duì)象):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ù)端準(zhǔn)備cookie:
response.addCookie(Cookie cookie)
頁面跳轉(zhuǎn)(轉(zhuǎn)發(fā),重定向)
客戶端獲取cookie:request.getCookies();
a. 服務(wù)端增加cookie: response對(duì)象; 客戶端獲取cookie:request對(duì)象
b. 不能直接獲取某一個(gè)單獨(dú)對(duì)象,只能一次性將全部的cookie拿到
通過F12可以發(fā)現(xiàn) 除了自己設(shè)置的cookie外,還會(huì)得到一個(gè)name為JSSESSIONID的cookie
session:會(huì)話
a. 瀏覽網(wǎng)站:開始-關(guān)閉
b. 購物: 瀏覽、付款、退出
c. 電子郵件: 瀏覽、寫郵件、退出
開始-結(jié)束為一次會(huì)話
session機(jī)制
客戶端第一次請(qǐng)求服務(wù)端時(shí), 服務(wù)端會(huì)產(chǎn)生一個(gè)session對(duì)象(用戶保存該客戶的信息),并且每個(gè)session對(duì)象都會(huì)有一個(gè)唯一的sessionId(用于區(qū)分其他session),并且服務(wù)端也會(huì)產(chǎn)生一個(gè)cookie,并且該cookie的name=JSESSIONID,value=服務(wù)端的sessionId的值,然后 服務(wù)端會(huì)在響應(yīng)客戶端的同時(shí)將該cookie發(fā)送給客戶端 ,至此 客戶端就有了一個(gè)cookie(JSESSIONID),因此,客戶端的cookie就可以和服務(wù)端的session一一對(duì)應(yīng)(JSESSSIONID=>sessionId)
客戶端第2/n次請(qǐng)求服務(wù)端時(shí):服務(wù)端會(huì)先用客戶端cookie中的JSESSIONID 去服務(wù)端的session中匹配sessionId,如果匹配成功,說明此用戶已不是第一次訪問
生活實(shí)例:
客戶端:顧客(第一次存包后拿到號(hào)碼牌)
服務(wù)端:存包處
session方法:
String getId():獲取sessionId
boolean isNew():判斷是否是新用戶(第一次訪問)
void invalidate():使session失效(退出登陸、注銷)
setAttribute();
getAttribute();
void setMaxInActiveInterval(秒):設(shè)置最大有效時(shí)間,

- application 全局對(duì)象
String getContextPath() 獲取當(dāng)前項(xiàng)目虛擬路徑
String getRealPath() 獲取當(dāng)前項(xiàng)目的絕對(duì)路徑 - config 配置對(duì)象(服務(wù)器配置信息)
- page 當(dāng)前JSP頁面對(duì)象(相當(dāng)于java中的this)
-
exception 異常對(duì)象
request.png
請(qǐng)求轉(zhuǎn)發(fā).png
重定向.png
四個(gè)范圍對(duì)象(從小到大)
pageContext jsp
頁面容器: 當(dāng)前頁面有效(跳轉(zhuǎn)后無效)
request 請(qǐng)求對(duì)象:同一次請(qǐng)求有效
session 會(huì)話對(duì)象: 同一次會(huì)話有效
application 全局對(duì)象:全局有效;整個(gè)項(xiàng)目運(yùn)行期間 都有效;關(guān)閉服務(wù)、其他項(xiàng)目無效
=》多個(gè)項(xiàng)目共享、重啟后仍然有效: JNDI
以上4個(gè)對(duì)象共有的方法:
Object getAttribute(String name ):根據(jù)屬性名,獲取屬性值
void setAttribute(String name, Object obj) 設(shè)置屬性值
setAttribute("a","b")//如果a不存在,則創(chuàng)建一個(gè)新的,如果存在則覆蓋
removeAttribute("a")根據(jù)屬性名刪除對(duì)象
建議以上范圍對(duì)象在使用時(shí)盡量用最小的范圍,對(duì)象范圍越大造成的性能損耗越大。


