Web 基礎(chǔ)14 JSP入門 語(yǔ)法

1.1 JSP簡(jiǎn)介

1.1.1 JSP概述

  • JSP概述
    • 全稱是Java Server Pages,他和Servlet一樣滑绒,也是Java所提供的一門用于開發(fā)動(dòng)態(tài)WEB資源的技術(shù)店诗,
    • JSP也是JavaEE的規(guī)范之一混埠,JSP的底層其實(shí)就是Servlet霉翔。
  • JSP的特點(diǎn)
    • 編寫JSP就像編寫HTML一樣
  • JSP和HTML的區(qū)別
    • HTML只能向客戶端提供靜態(tài)數(shù)據(jù)
    • JSP技術(shù)允許我們?cè)陧?yè)面中嵌套Java代碼咖为,從而可以向客戶端提供動(dòng)態(tài)的數(shù)據(jù)

1.1.2 JSP與Servlet的區(qū)別

  • Servlet本身的缺點(diǎn)
    • 每一個(gè)Servlet都需在web.xml進(jìn)行配置
    • 顯示html元素的時(shí)候非常麻煩
  • jsp = html + java + jsp自身的東西 本質(zhì)Servlet
    • 02-08年 基本上開發(fā)全部都是用jsp 可讀性非常(html里面加了java代碼)
    • 缺點(diǎn) :?jiǎn)渭兊膉sp頁(yè)面不適合做這種大型項(xiàng)目

1.2 JSP的原理

  • 原理:
    • 一個(gè)JSP文件第一次被客戶端訪問(wèn)時(shí)(也包括JSP文件修改后的第一次被訪問(wèn)),WEB服務(wù)器會(huì)把JSP文件翻譯成一個(gè)Servlet帘皿,
    • 客戶端訪問(wèn)JSP文件东跪,其實(shí)訪問(wèn)的就是JSP文件翻譯后的Servlet,
    • JSP的底層原理其實(shí)就是Servlet鹰溜。
jsp原理.png
  • 一些對(duì)Servlet和jsp理解
    • jsp本質(zhì)是一個(gè)Servlet,他的運(yùn)行也需要容器(tomcat)支持
    • 在jsp和Servlet文件中都可以編寫java和html代碼,不同的是
      • Servlet雖然可以動(dòng)態(tài)的生成頁(yè)面內(nèi)容,但是更加偏向于邏輯的控制
      • jsp最終被轉(zhuǎn)換成 Servlet 在jvm里面執(zhí)行,在jsp里面雖然可以編寫java代碼,但是他更加偏向于頁(yè)面內(nèi)容的展示
      • 在MVC架構(gòu)模式中,C通常是由Servlet充當(dāng),V通常是由jsp充當(dāng)

1.3 JSP入門案例

在網(wǎng)頁(yè)上顯示當(dāng)前時(shí)間

<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <h1>hello JSP</h1>
    <%
        //腳本片段
        //向客戶端發(fā)送當(dāng)前的系統(tǒng)時(shí)間
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        String now = sdf.format(new Date());
        //使用內(nèi)置對(duì)象out虽填,可以把數(shù)據(jù)發(fā)送給客戶端
        out.println(now);
    %>
</body>
</html>

1.4 JSP默認(rèn)編碼設(shè)置

在入門案例案例中可以看到三個(gè)編碼屬性

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
  • contentType服務(wù)器端發(fā)給客戶端的內(nèi)容編碼的設(shè)置(與response.setContentType("")作用是相同)
  • pageEncoding 當(dāng)前jsp頁(yè)面本身的編碼
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  • 是告訴瀏覽器 生成的頁(yè)面(這個(gè)頁(yè)面是用來(lái)展示服務(wù)器發(fā)來(lái)的數(shù)據(jù)) 所使用的格式和編碼,瀏覽器會(huì)根據(jù)此來(lái)調(diào)用相應(yīng)的字符集來(lái)顯示網(wǎng)頁(yè)內(nèi)容
  • http-equiv類似我們http的頭部協(xié)議,他回應(yīng)瀏覽器一些有用的信息,以幫助瀏覽器正確和精確的顯示網(wǎng)頁(yè)內(nèi)容
  • 建議:工作空間 項(xiàng)目 外加jsp頁(yè)面 都設(shè)置成UTF-8
  • 步驟:window - preference -搜索jsp 把Encoding改成UTF-8即可

1.5 模版元素&腳本片段

  • 模版元素
    • JSP頁(yè)面中的HTML標(biāo)簽,CSS樣式奉狈,以及JS都稱之為JSP的模版元素,模版元素定義了頁(yè)面的結(jié)構(gòu)和外觀涩惑,
    • JSP翻譯后的Servlet中仁期,模版元素會(huì)被輸出流對(duì)象直接發(fā)送到客戶端。
  • 腳本片段
    • JSP頁(yè)面中可以嵌套Java代碼,Java代碼要定義在JSP的腳本片段中跛蛋,也就是<%%>里面熬的,
    • JSP頁(yè)面中可以有多個(gè)腳本片段,
    • 多個(gè)腳本片段之間赊级,可以嵌套文本押框,嵌套HTML的標(biāo)簽,嵌套其他的JSP元素理逊。
    • 注意: 不能在腳本片段里面定義方法,因?yàn)榉椒ú荒芮短锥x
  • 總結(jié)
    • 模板元素其實(shí)就是頁(yè)面上一堆的html代碼
    • 在html中添加java代碼,java代碼就是腳本片段
  • 代碼事例
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
    HttpSession s = request.getSession();
    Object username = s.getAttribute("username");
    %>
    <h1>itheima</h1>
    <%
        if(null == username){
    %>
        <a href="LoginUI.jsp">登錄</a>
    <%
        }else{
    %>
        <a href="OUT.jsp">注銷</a>
    <%
        }
    %>
    <hr />
</body>
</html>

1.6聲明

  • 在JSP頁(yè)面里定義方法橡伞,定義成員變量等,<%! %>
  • 注意:不能在聲明里面寫語(yǔ)句
  • 平時(shí)也很少去定義成員變量 ,他是有線程安全問(wèn)題 用處不大

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <!--聲明方法 -->
    <%!
        public int sum(int a,int b) {
            return a + b;
        }
    %>
    
    <%
        int result = sum(1,2);
        out.println(result);
    %>
</body>
</html>

1.7腳本表達(dá)式

  • 在JSP頁(yè)面中將數(shù)據(jù)發(fā)送到客戶端晋被,替代JSP頁(yè)面里的輸出語(yǔ)句兑徘,
格式:<%=變量/常量/表達(dá)式%> //1 + 1
  • 注意:在腳本表達(dá)式中不可以寫分號(hào)

  • 總結(jié): 用syso輸出的語(yǔ)句,都可以用腳本表達(dá)式輸出

  • 代碼實(shí)例


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
        //要使用腳本表達(dá)式將當(dāng)前系統(tǒng)時(shí)間發(fā)送到客戶端
        //獲取當(dāng)前系統(tǒng)時(shí)間
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        String now = sdf.format(new Date());
    %>
    
    <!-- 腳本表達(dá)式 -->
    <%=now %>
    <%="<h1>hello JSP</h1>" %>
    <%=1 + 1 %>
</body>
</html>

1.8 注釋

  • HTML的注釋:

  • Java代碼的注釋://,/**/

  • 腳本片段的注釋:<%-- --%>

  • 注意:

    • HTML的注釋:被注釋的文本和代碼,會(huì)翻譯到Servlet中,然后發(fā)送到客戶端
    • java的注釋:被注釋的文本和代碼,會(huì)翻譯到Servlet中,不會(huì)發(fā)送到客戶端
    • jsp的注釋: 被注釋的文本和代碼,不會(huì)翻譯到Servlet中,不會(huì)發(fā)送到客戶端
  • 建議使用第三個(gè) 功能最強(qiáng)大 什么都可以注釋,也不會(huì)翻譯最后html中

1.9 總結(jié)

  • 模板元素: Html + css + js 對(duì)于模板元素,會(huì)被翻譯到out.println(參數(shù));
  • 腳本片段;java 原樣復(fù)制到翻譯后的java文件里面,復(fù)制到service方法 <% %>
  • java聲明;翻譯到類中,方法外,成員的位置上,可以用來(lái)定義成員變量,成員方法<%! %>
  • 腳本表達(dá)式:翻譯到out.println(參數(shù)),注意不能有分號(hào) <%= %>
  • 注釋:HTML的注釋 java的注釋 jsp的注釋 <%-- --%>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市羡洛,隨后出現(xiàn)的幾起案子挂脑,更是在濱河造成了極大的恐慌,老刑警劉巖欲侮,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崭闲,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡威蕉,警方通過(guò)查閱死者的電腦和手機(jī)刁俭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)忘伞,“玉大人薄翅,你說(shuō)我怎么就攤上這事∶ツ危” “怎么了翘魄?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)舀奶。 經(jīng)常有香客問(wèn)我暑竟,道長(zhǎng),這世上最難降的妖魔是什么育勺? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任但荤,我火速辦了婚禮,結(jié)果婚禮上涧至,老公的妹妹穿的比我還像新娘腹躁。我一直安慰自己,他們只是感情好南蓬,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布纺非。 她就那樣靜靜地躺著哑了,像睡著了一般。 火紅的嫁衣襯著肌膚如雪烧颖。 梳的紋絲不亂的頭發(fā)上弱左,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音炕淮,去河邊找鬼拆火。 笑死,一個(gè)胖子當(dāng)著我的面吹牛涂圆,可吹牛的內(nèi)容都是我干的们镜。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼乘综,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼憎账!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起卡辰,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胞皱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后九妈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體反砌,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年萌朱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宴树。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晶疼,死狀恐怖酒贬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情翠霍,我是刑警寧澤锭吨,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站寒匙,受9級(jí)特大地震影響零如,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锄弱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一考蕾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧会宪,春花似錦肖卧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)沟沙。三九已至,卻和暖如春壁榕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赎瞎。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工牌里, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人务甥。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓牡辽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親敞临。 傳聞我的和親對(duì)象是個(gè)殘疾皇子态辛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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

  • 1.學(xué)習(xí)內(nèi)容 JSP技術(shù)入門和常用指令 JSP的內(nèi)置對(duì)象&標(biāo)簽介紹 EL表達(dá)式&EL的內(nèi)置對(duì)象 2.JSP技術(shù)入門...
    WendyVIV閱讀 2,125評(píng)論 1 18
  • 1.什么是JSP (1)jsp全稱是Java Server Pages,它和Servlet技術(shù)一樣都是sun公司定...
    yjaal閱讀 3,642評(píng)論 5 99
  • 前面講了servlet入門實(shí)踐現(xiàn)在開始介紹jsp入門實(shí)踐挺尿,開發(fā)環(huán)境的搭建請(qǐng)參考我前面的tomcat的文章奏黑,jsp入...
    伊豚wall閱讀 3,361評(píng)論 2 56
  • 1、我們都需要一面“照妖鏡” 今年5月23日的晚上编矾,我在上海參加了人生中的第一次磨課熟史。當(dāng)時(shí),任博老師有一句話讓我印...
    小說(shuō)家郭大俠閱讀 439評(píng)論 0 3
  • 能好好說(shuō)清的事情,盡量別吵架凹蜈,你笑了限寞,世界都亮了…
    臘月的豬閱讀 246評(píng)論 0 0