Jsp基礎(chǔ)

一.JSP的頁面元素

a. 腳本 ScrptLet
1. <% 局部變量、java語句%>

  1. <%! 局部變量、定義方法>
  2. <%=輸出表達(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. 注釋

  1. html注釋 < !-- -->,可以被用戶通過瀏覽器查看源碼看到
  2. java注釋 // /......./
  3. jsp注釋 <%-- --%>

d. JSP九大內(nèi)置對(duì)象(自帶的,不需要new 也能使用的對(duì)象)

  1. out: 輸出對(duì)象,向客戶端輸出內(nèi)容
  2. 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ū)別

  1. get方式 在地址欄顯示 請(qǐng)求信息(但是地址欄能夠容納的信息有限,4-5KB;如果請(qǐng)求數(shù)據(jù)存在大文件,圖片等會(huì)出現(xiàn)地址欄無法容納大小而出錯(cuò));post不會(huì).
  2. 文件上傳操作,必須是post
    推薦使用post

get方式請(qǐng)求,如果出現(xiàn)亂碼,如下解決方案:

  1. 統(tǒng)一每一個(gè)變量的編碼(不推薦)
    new String(就舊碼,新編碼);
    name = new String(name.getBytes("iso-8859-1","utf-8"));
  2. 修改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

  1. 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次

  1. pageContext jsp頁面容器

  1. 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í)間,

session創(chuàng)建過程.png
  1. application 全局對(duì)象
    String getContextPath() 獲取當(dāng)前項(xiàng)目虛擬路徑
    String getRealPath() 獲取當(dāng)前項(xiàng)目的絕對(duì)路徑
  2. config 配置對(duì)象(服務(wù)器配置信息)
  3. page 當(dāng)前JSP頁面對(duì)象(相當(dāng)于java中的this)
  4. 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ì)象范圍越大造成的性能損耗越大。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.JSP注釋1./........./ Java代碼注釋,頁面不顯示,客戶端不可見2<!-- ..... --...
    寞離i閱讀 278評(píng)論 0 1
  • 1課程回顧 會(huì)話管理 1)會(huì)話管理:管理瀏覽器和服務(wù)器之間的會(huì)話過程中產(chǎn)生的會(huì)話數(shù)據(jù) 2)Cookie技術(shù):會(huì)話數(shù)...
    守亭翁閱讀 346評(píng)論 0 0
  • JSP總結(jié)(經(jīng)典) day1 JSP 定義: 1)Java Server Page, Java EE 組件,本...
    91數(shù)據(jù)閱讀 3,645評(píng)論 0 13
  • jsp指令 page指令:<%@ page language="java"import="java.util*,j...
    jarWorker閱讀 462評(píng)論 0 8
  • 今天周一,晚上又被蹂躪了一個(gè)小時(shí)。 熱身運(yùn)動(dòng)沒了,換成了波比跳,20個(gè)一組。 休息一分鐘左右,高抬腿1分鐘,休息一...
    小寶_cde4閱讀 297評(píng)論 0 0

友情鏈接更多精彩內(nèi)容