JSP知識點

一.jsp概述

JSP全稱是Java Server Pages,它和servle技術一樣,都是SUN公司定義的一種用于開發(fā)動態(tài)web資源的技術球榆。JSP實際上就是Servlet娃兽。

三個概念
  1. html:靜態(tài)內(nèi)容
  2. servlet:服務器端的小應用程序菇民,處理Java邏輯代碼。主要作用是:
    (1)獲取表單數(shù)據(jù)
    (2)處理業(yè)務邏輯
    (3)分發(fā)轉(zhuǎn)向
  3. jsp:編寫輸出動態(tài)內(nèi)容投储,但不適合編寫java邏輯第练。

通俗易懂:jsp = html + java

思考:

  • IE瀏覽器訪問jsp頁面時,Web服務器是如何調(diào)用并執(zhí)行一個jsp頁面的玛荞?


    image.png
  • Web服務器在執(zhí)行jsp頁面時娇掏,是如何把jsp頁面中的html排版標簽發(fā)送到客戶端的?


    jsp界面代碼

    服務器自動生成的代碼
  • jsp頁面中的java代碼勋眯,服務器是如何執(zhí)行的婴梧?
    在執(zhí)行 JSP 網(wǎng)頁時,通晨吞#可分為兩個時期:轉(zhuǎn)譯時期(Translation Time)和請求時期(Request Time)
    轉(zhuǎn)譯時期:JSP網(wǎng)頁轉(zhuǎn)譯成Servlet類塞蹭。
    請求時期:Servlet類執(zhí)行后,響應結(jié)果至客戶端嚼酝。

轉(zhuǎn)譯期間主要做了兩件事情:

將JSP網(wǎng)頁轉(zhuǎn)譯為 Servlet 源代碼(.java)浮还;
將Servlet源代碼(.java)編譯成 Servlet 類(.class)。

  • web服務器在調(diào)用jsp時闽巩,會給jsp提供一些什么java對象


    tomcat源碼

jsp基本語法

  1. jsp的腳本
    小腳本 <% java 代碼 %>
    表達式 <%=2+3> 等價于 out.print(2+3)
    聲明 <%! 代碼 %> 表示在類中定義全局成員和靜態(tài)塊钧舌。

  2. 注釋
    jsp注釋: <%-- 注釋文字 --%> 不會返回到瀏覽器中
    html注釋:有的瀏覽器會返回到瀏覽器中

  3. jsp 3個指令

  • page 指令
1.1、 import 和java代碼中的import是一樣的
<%@ page import="java.util.Date,java.util.List"%>
或者:
<%@ page import="java.util.Date"%>
<%@ page import="java.util.List"%>
JSP會自動導入以下的包:
import java.lang.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
1.2涎跨、 session: 是否會自動創(chuàng)建session對象洼冻。默認值是true;
1.3、 buffer: JSP中有javax.servlet.jsp.JspWriter輸出字符流隅很。設置撞牢。輸出數(shù)據(jù)的緩存大小,默認是8kb.
1.4 errorPage: 如果頁面中有錯誤,則跳轉(zhuǎn)到指定的資源屋彪。
errorPage="/uri" 如果寫“/”則代表當前應用的目錄下所宰,絕對路徑。
如果不寫“/”則代表相對路徑畜挥。
    1.5仔粥、 isErrorPage: 是否創(chuàng)建throwable對象。默認是false;
1.6蟹但、 contextType: 等同于response.setContextType("text/html;charset=utf-8");
1.7躯泰、 pageEncoding: 告訴JSP引擎要翻譯的文件使用的編碼。
1.8华糖、 isELIgnored: 是否支持EL表達式麦向。 默認是false

<%@ page  pageEncoding="gbk" %>
  • Include 指令
靜態(tài)包含:把其它資源包含到當前頁面中。
<%@ include file="/include/header.jsp" %>
動態(tài)包含:
<jsp:include page="/include/header.jsp"></jsp:include>

兩者的區(qū)別:翻譯的時間段不同
前者:在翻譯時就把兩個文件合并
后者:不會合并文件客叉,當代碼執(zhí)行到include時诵竭,才包含另一個文件的內(nèi)容。

原則:能用靜的就不用動的十办。
  • taglib 指令
作用:在JSP頁面中導入JSTL標簽庫秀撇。替換jsp中的java代碼片段。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
  1. jsp 6個動作
    <%
        Student stu = new Student();
        stu.setName("tom");
        
        out.print(stu.getName());
        
        //request.getRequestDispatcher("/7.jsp").forward(request, response);
        
        
     %>
     
     <jsp:useBean id="stu1" class="com.ky.entity.Student"></jsp:useBean>
     <jsp:setProperty property="name" name="stu1" value="jerry"/>
     <jsp:getProperty property="name" name="stu1"/>
     
     <!-- http://localhost:8080/day11_02_jsp2/6.jsp?name=123 -->
     <jsp:forward page="/7.jsp">
        <jsp:param value="123" name="name"/>
        <jsp:param value="333" name="pwd"/>
     </jsp:forward>
  1. jsp 9個內(nèi)置對象


    9個內(nèi)置對象
<body>
    <%
        //pageContext.setAttribute("p", "pp");
        pageContext.setAttribute("p", "pp", PageContext.PAGE_SCOPE);
        
        //pageContext.setAttribute("p", "pp", PageContext.REQUEST_SCOPE);
        request.setAttribute("p", "request");
        
        //pageContext.setAttribute("p", "pp", PageContext.SESSION_SCOPE);
        //session.setAttribute("p", "session");
        
        //pageContext.setAttribute("p", "pp", PageContext.APPLICATION_SCOPE);
        application.setAttribute("p", "application");
        
        //request.getRequestDispatcher("/2.jsp").forward(request, response);
        //response.sendRedirect(request.getContextPath()+"/2.jsp");
        pageContext.forward("/2.jsp");
     %>
</body>

作用與范圍: pageContext<request<session<application

使用規(guī)則:

  • PageContext : pageConext 存放的數(shù)據(jù)在當前頁面有效向族。開發(fā)時使用較少呵燕。
  • ServletRequest: request 存放的數(shù)據(jù)在一次請求(轉(zhuǎn)發(fā))內(nèi)有效。使用非常多件相。
  • HttpSession: session 存放的數(shù)據(jù)在一次會話中有效再扭。使用的比較多。如:存放用戶的登錄信息夜矗,購物車功能泛范。
  • ServletContext: application 存放的數(shù)據(jù)在整個應用范圍內(nèi)都有效。因為范圍太大紊撕,應盡量少用罢荡。

EL表達式

<%
  Student stu = (Student)request.getAttribute("s");
        //out.print(stu.getName());
%>
     
     ${s.city.address } <!-- ${s}==pageContext.findAttribute("s") -->
image.png
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市对扶,隨后出現(xiàn)的幾起案子区赵,更是在濱河造成了極大的恐慌,老刑警劉巖浪南,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笼才,死亡現(xiàn)場離奇詭異,居然都是意外死亡络凿,警方通過查閱死者的電腦和手機骡送,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門昂羡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人摔踱,你說我怎么就攤上這事虐先。” “怎么了昌渤?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵赴穗,是天一觀的道長。 經(jīng)常有香客問我膀息,道長,這世上最難降的妖魔是什么了赵? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任潜支,我火速辦了婚禮,結(jié)果婚禮上柿汛,老公的妹妹穿的比我還像新娘冗酿。我一直安慰自己,他們只是感情好络断,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布裁替。 她就那樣靜靜地躺著,像睡著了一般貌笨。 火紅的嫁衣襯著肌膚如雪弱判。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天锥惋,我揣著相機與錄音昌腰,去河邊找鬼。 笑死膀跌,一個胖子當著我的面吹牛遭商,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捅伤,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼劫流,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了丛忆?” 一聲冷哼從身側(cè)響起祠汇,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蘸际,沒想到半個月后座哩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡粮彤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年根穷,在試婚紗的時候發(fā)現(xiàn)自己被綠了姜骡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡屿良,死狀恐怖圈澈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情尘惧,我是刑警寧澤康栈,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站喷橙,受9級特大地震影響啥么,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贰逾,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一悬荣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧疙剑,春花似錦氯迂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至管挟,卻和暖如春轿曙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背哮独。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工拳芙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人皮璧。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓舟扎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親悴务。 傳聞我的和親對象是個殘疾皇子睹限,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容