JSP基礎(chǔ)語法(語法跌穗、指令、生命周期)

一虏辫、JSP簡介

JSP全名為Java Server Pages蚌吸,其根本是一個簡化的Servlet設(shè)計,他實現(xiàn)了在Java當(dāng)中使用HTML標(biāo)簽砌庄。JSP是一種動態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn)羹唠,也是JavaEES的標(biāo)準(zhǔn)。JSP與Servlet一樣娄昆,是在服務(wù)器端執(zhí)行的佩微。

常見動態(tài)網(wǎng)站開發(fā)技術(shù)對比
  • JSP:Java平臺,安全性高萌焰,適合開發(fā)大型的哺眯,企業(yè)級的、分布式的Web應(yīng)用程序扒俯。
  • Asp.net:Net平臺奶卓,簡單易學(xué),安全性以及跨平臺性差陵珍。
  • PHP:簡單寝杖,高效,成本低開發(fā)周期短互纯,特別適合中小型企業(yè)的Web應(yīng)用開發(fā)瑟幕。(LAMP:Linux+Apache+MySQL+PHP)。
JSP頁面的元素構(gòu)成
  • 靜態(tài)內(nèi)容
  • 指令
  • 表達(dá)式
  • 小腳本
  • 聲明
  • 注釋

在JSP中其基本的核心語法都來源于Java。

二只盹、JSP注釋

在JSP中支持兩種注釋語句的操作辣往,一種是顯示注釋,這種注釋客戶端是可見的殖卑;另外一種是隱式注釋站削,這種注釋客戶端是無法看見的。

1孵稽、顯示注釋語法:(HTML注釋许起,客戶端可見)

 <!-- 注釋內(nèi)容 -->

2、隱式注釋語法:(JSP注釋)

<%-- 注釋 --%>菩鲜,JSP注釋

3园细、隱式注釋語法:(JSP腳本注釋)

 //注釋,單行注釋
/* 注釋 */接校,多行注釋

三猛频、JSP腳本

在JSP頁面中執(zhí)行的java代碼。

1蛛勉、Scriptlet(腳本小程序)

在JSP中鹿寻,最重要的部分就是Scriptlet(腳本小程序),所有嵌入在HTML代碼中的Java程序都必須使用Scriptlet標(biāo)記出來诽凌。在JSP中一共有3中Scriptlet代碼毡熏。

  • <% java代碼 %>;在此Scriptlet中可以定義局部變量皿淋、編寫語句等招刹。

注意:

  • 盡量不要再JSP中定義類或方法,當(dāng)JSP中需要類或方法時窝趣,往往會通過JavaBean的形式調(diào)用疯暑。
  • 盡量不要使用out.println()輸出,而使用表達(dá)式輸出哑舒。
2妇拯、Scriptlet標(biāo)簽

在程序中如果過多的出現(xiàn)<%%>會導(dǎo)致代碼混亂,所以在新版本的JSP中提供了一種Scriptlet標(biāo)簽洗鸵,使用此標(biāo)簽可以完成與<%%>同樣的功能越锈。

格式:

<jsp:scriptlet>
    java scriptlet 代碼
</jsp:scriptlet>

四、JSP聲明

在JSP頁面中定義變量或者方法膘滨。

  • <%! java代碼 %>甘凭;在此中可以定義全局變量、方法火邓、類丹弱。

五德撬、JSP表達(dá)式

在JSP頁面中執(zhí)行表達(dá)式。

  • <%=表達(dá)式 %>躲胳;在此中可輸出一個變量或一個具體內(nèi)容蜓洪。

六、JSP指令(三大指令page坯苹、include隆檀、taglib)

1、page指令

page指令通常位于JSP頁面的頂端粹湃,同一個頁面可以有多個page指令恐仑。

page指令在JSP開發(fā)中較為重要,使用此屬性再芋,可以定義一個JSP頁面的相關(guān)屬性菊霜,包括設(shè)置MIME類型,定義需要導(dǎo)入的包济赎,錯誤頁的指定等。

對于以上的操作指令记某,只有import指令可以重復(fù)出現(xiàn)多次司训,而對于其他屬性只能出現(xiàn)一次。且在以上若干指令中液南,比較常用的是Language壳猜、contentType、pageEncoding滑凉、errorPage/isErrorPage统扳、import這5個指令。

page指令語法:

<%@ page 屬性="內(nèi)容"%>

1.1畅姊、設(shè)置頁面的MIME
在page指令中咒钟,contentType屬性是使用最多的一個屬性,如果想讓一個JSP文件顯示中文若未,則必須對整個頁面指定MIME編碼朱嘴。

什么是MIME,有什么作用粗合?
許多文件都存在擴展名萍嬉,如.doc、.htm 隙疚,根據(jù)這些不同的擴展名可以打開不同的應(yīng)用程序壤追,那么MIME(Multipurpose Internet Mail Extensions,多功能Internet郵件擴充服務(wù))就是指定某個擴展名文件將使用何種應(yīng)用程序打開的一個說明供屉。當(dāng)該擴展名文件被訪問時行冰,瀏覽器會自動指定應(yīng)用程序來打開溺蕉。

為JSP頁面指定編碼

<%@ page language="java" contentType="text/html;charset=GBK"%>

從Tomcat安裝目錄/conf/web.xml中可以查詢MIME類型。例如资柔,如果現(xiàn)在希望頁面可以按照Word文檔的形式顯示焙贷,則可以使用如下的MIME類型:

<mime-mapping>
    <extension>doc</extension>
    <mime-type>application/msword</mime-type>
</mime-mapping>

1.2、設(shè)置文件編碼
除了使用contentType指定MIME類型外贿堰,還使用charset進(jìn)行頁面編碼的指定辙芍,當(dāng)然,在page指令中也可以使用pageEncoding進(jìn)行編碼的指定羹与。

<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>

contentType使用charset設(shè)置編碼故硅,和使用pageEncoding設(shè)置有什么區(qū)別?
pageEncoding指的是JSP文件本身的編碼纵搁,而contentType中的charset指的是服務(wù)器發(fā)送給客戶端的內(nèi)容編碼(更常使用)吃衅。

1.3、錯誤頁面的設(shè)置
當(dāng)一個頁面出錯后腾誉,會自動跳轉(zhuǎn)到一個頁面上進(jìn)行錯誤信息的提示徘层,那么這個操作,就可以通過錯誤頁面來指定利职。
要想完成錯誤頁的操作趣效,則一定要滿足一下兩個條件:

  • 指定錯誤出現(xiàn)時的跳轉(zhuǎn)頁,通過errorPage屬性指定猪贪。
  • 錯誤處理頁必須有明確的標(biāo)識跷敬,通過isErrorPage屬性指定。
    如果一個JSP頁面運行時出現(xiàn)了錯誤热押,會通過errorPage指定的頁面進(jìn)行跳轉(zhuǎn)西傀,被跳轉(zhuǎn)的頁面中必須將isErrorPage的內(nèi)容設(shè)置為true。
    會出現(xiàn)錯誤的頁面:
// show.jsp
<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>
<%@ page errorPage="error.jsp"%>
<%
    int result = 10 / 0;
%>

錯誤處理頁:

//error.jsp
<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>
<%@ page isErrorPage="true"%>
<h1>程序出錯了</h1>

注意:
錯誤頁的跳轉(zhuǎn)屬于服務(wù)器端的跳轉(zhuǎn)桶癣。
一旦發(fā)生錯誤后拥褂,頁面的顯示內(nèi)容將變成error.jsp中設(shè)置的內(nèi)容,但是在地址欄上依然是show.jsp鬼廓。在整個操作工程中肿仑,客戶端對服務(wù)器只發(fā)送了一次請求,服務(wù)器對客戶端也只回應(yīng)了一次碎税。


服務(wù)器端跳轉(zhuǎn)

以上的錯誤頁是在每一個JSP頁面中指定尤慰,當(dāng)然,也可以在整個虛擬目錄中指定全局的錯誤處理雷蹂,要想達(dá)到這個效果伟端,就必須修改web.xml文件,在其中加入錯誤頁的操作匪煌。

全局的錯誤處理可以處理兩種類型的錯誤责蝠,一種是HTTP代碼的錯誤党巾,如404或500;還有一種是異常的錯誤霜医,如NullPointerException等齿拂。

修改web.xml文件加入錯誤處理

<error-page>
    <error-code>500</error-page>
    <location>/ch05/error.jsp</location>
</error-page>
<error-page>
    <error-code>404</error-page>
    <location>/ch05/error.jsp</location>
</error-page>
<error-page>
    <exception-type>java.lang.NullPointerException</exception-type>
    <location>/ch05/error.jsp</location>
</error-page>

1.4、數(shù)據(jù)庫連接操作
在page指令中可以使用import導(dǎo)入所需要的Java開發(fā)包肴敛,所以直接利用此屬性將java.sql包導(dǎo)進(jìn)來署海,即可進(jìn)行數(shù)據(jù)庫的開發(fā)操作。
配置數(shù)據(jù)庫的驅(qū)動程序医男,將mysql的驅(qū)動程序復(fù)制到Tomcat\lib目錄中砸狞。
配置完成后需要重新啟動服務(wù)器。只有這樣镀梭,才能將新配置的jar包在服務(wù)器啟動時加載進(jìn)來刀森,不會出現(xiàn)找不到驅(qū)動程序的錯誤。

<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.sql.*"%>
<html>
    <head>
        <title></title>
    </head>
    <body>
        <%!
            public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";
            public static final String DBURL = "jdbc:mysql://localhost:3306/databasename";
            public static final String DBUSER = "root";
            public static final String DBPASS = "";
        %>
        <%
            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet = null;
        %>
        <%
            try{
                Class.forName(DBDRIVER);
                conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
                String sql = "select * from tablename";
                pstmt = conn.prepareStatement(sql);
                rs = pstmt.executeQuery();
        %>
    <center>
        <table border="1" width="80%">
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
        <%
            while(rs.next()) {
                
            }
        %>
        
        </table>
    </center>
        <%
            } catch(Exception e) {
                System.out.println(e);
            } finally {
                rs.close();
                pstmt.close();
                conn.close();
            }
        %>
    </body>
</html>
2报账、include指令(包指令)

將一個外部文件嵌入到當(dāng)前JSP文件中研底,同時解析這個頁面中的JSP語句。

在一般的頁面開發(fā)中會有很多內(nèi)容要重復(fù)的顯示透罢。
要實現(xiàn)這種效果有兩種方法:

  • 讓每一個頁面都分別包含該部分飘哨。
  • 將每個部分做成一個文件,然后在需要的地方導(dǎo)入(包含)琐凭。

要想實現(xiàn)這樣的包含功能,在JSP中可以通過靜態(tài)包含和動態(tài)包含兩種方式完成浊服。

2.1统屈、靜態(tài)包含
靜態(tài)包含指令是在JSP編譯時插入一個包含文本或代碼的文件,這個包含的過程是靜態(tài)的牙躺,而包含的文件可以是JSP文件愁憔、HTML文件、文本文件孽拷,或是一般java程序吨掌。

靜態(tài)包含語法:

<%@ include file="要包含的文件路徑"%>

包含時不管文件的后綴是什么,都會將內(nèi)容直接包含并顯示脓恕。

2.2膜宋、動態(tài)包含
使用<jsp:include>指令可以完成動態(tài)包含的操作,與之前的靜態(tài)包含不同炼幔,動態(tài)包含語句可以自動區(qū)分被包含的頁面是靜態(tài)還是動態(tài)秋茫。如果是靜態(tài)頁面,則與靜態(tài)包含一樣乃秀,將內(nèi)容包含進(jìn)來進(jìn)行處理肛著;而如果被包含的頁面是動態(tài)頁面圆兵,則可以先進(jìn)行動態(tài)的處理,然后再將處理后的結(jié)果包含進(jìn)來枢贿。

動態(tài)包含語法:

//不傳遞參數(shù)
<jsp:include page="{要包含的文件路徑 | <%=表達(dá)式%>}" flush="true | false"/>
//傳遞參數(shù)
<jsp:include page="{要包含的文件路徑 | <%=表達(dá)式%>}" flush="true | false">
    <jsp:param name="參數(shù)名稱" value="參數(shù)內(nèi)容"/>
</jsp:include>

flush屬性設(shè)置為false表示這個網(wǎng)頁完全被讀進(jìn)來以后才會輸出殉农。在每一個JSP的內(nèi)部都會有一個Buffer,所以如果是true局荚,當(dāng)Buffer滿了就輸出超凳,一般此屬性都會設(shè)置成true。

靜態(tài)包含的操作屬于先包含后處理危队,而動態(tài)包含如果被包含的頁面是動態(tài)頁聪建,則屬于先處理后包含。

在實際開發(fā)中建議使用動態(tài)包含茫陆。

3金麸、taglib指令

是一個標(biāo)簽庫。使用標(biāo)簽庫定義新的自定義標(biāo)齊簿盅,在JSP頁面中啟用自定義的標(biāo)簽挥下。

七、跳轉(zhuǎn)指令

在Web中可以使用<jsp:forward>指令桨醋,將一個用戶的請求(request)從一個頁面?zhèn)鬟f到另一個頁面棚瘟,完成跳轉(zhuǎn)的操作。

頁面跳轉(zhuǎn)語法

//不傳遞參數(shù)
<jsp:forward page="{要包含的文件路徑 | <%=表達(dá)式%>}">
//傳遞參數(shù)
<jsp:forward page="{要包含的文件路徑 | <%=表達(dá)式%>}" flush="true | false">
    <jsp:param name="參數(shù)名稱" value="參數(shù)內(nèi)容"/>
</jsp:forward>

此跳轉(zhuǎn)語句也屬于服務(wù)器端跳轉(zhuǎn)喜最。

八偎蘸、JSP頁面生命周期

JSP頁面的生命周期

jspService()方法被調(diào)用來處理客戶端的請求。對每一個請求瞬内,JSP引擎創(chuàng)建一個線程來處理該請求迷雪。如果有多個客戶端同時請求該JSP文件,則JSP引擎會創(chuàng)建多個線程虫蝶。每個客戶端請求對應(yīng)一個線程章咧。以多線程方式執(zhí)行可以大大降低對系統(tǒng)資源的需求,提高系統(tǒng)的并發(fā)量及響應(yīng)時間能真。但也要注意多線程的編程帶來的同步問題赁严,由于該Servlet始終駐于內(nèi)存,所以響應(yīng)是非撤垲恚快的疼约。

八、項目聯(lián)系
1秦躯、實例操作:用戶登錄程序?qū)崿F(xiàn)(JSP+JDBC實現(xiàn))

1.1忆谓、創(chuàng)建數(shù)據(jù)庫表

user表結(jié)構(gòu)

1.2、程序設(shè)計思路

登錄操作流程圖
JSP頁面
2踱承、開發(fā)實戰(zhàn)練習(xí)

2.1倡缠、增加分頁顯示功能哨免。


表結(jié)構(gòu)

程序顯示格式如下:


簡書

2.2、在以上程序中增加模糊查詢的功能昙沦,之后對查詢出的數(shù)據(jù)進(jìn)行分頁顯示琢唾。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市盾饮,隨后出現(xiàn)的幾起案子采桃,更是在濱河造成了極大的恐慌,老刑警劉巖丘损,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件普办,死亡現(xiàn)場離奇詭異,居然都是意外死亡徘钥,警方通過查閱死者的電腦和手機衔蹲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呈础,“玉大人舆驶,你說我怎么就攤上這事《” “怎么了沙廉?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長臼节。 經(jīng)常有香客問我撬陵,道長,這世上最難降的妖魔是什么网缝? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任袱结,我火速辦了婚禮,結(jié)果婚禮上途凫,老公的妹妹穿的比我還像新娘。我一直安慰自己溢吻,他們只是感情好维费,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著促王,像睡著了一般犀盟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蝇狼,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天阅畴,我揣著相機與錄音,去河邊找鬼迅耘。 笑死贱枣,一個胖子當(dāng)著我的面吹牛监署,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纽哥,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼钠乏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了春塌?” 一聲冷哼從身側(cè)響起晓避,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎只壳,沒想到半個月后俏拱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡吼句,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年锅必,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片命辖。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡况毅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尔艇,到底是詐尸還是另有隱情尔许,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布终娃,位于F島的核電站味廊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏棠耕。R本人自食惡果不足惜余佛,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窍荧。 院中可真熱鬧辉巡,春花似錦、人聲如沸蕊退。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓤荔。三九已至净蚤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間输硝,已是汗流浹背今瀑。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人橘荠。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓屿附,卻偏偏與公主長得像,于是被迫代替她去往敵國和親砾医。 傳聞我的和親對象是個殘疾皇子拿撩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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

  • 1.什么是JSP (1)jsp全稱是Java Server Pages,它和Servlet技術(shù)一樣都是sun公司定...
    yjaal閱讀 3,648評論 5 99
  • 1.學(xué)習(xí)內(nèi)容 JSP技術(shù)入門和常用指令 JSP的內(nèi)置對象&標(biāo)簽介紹 EL表達(dá)式&EL的內(nèi)置對象 2.JSP技術(shù)入門...
    WendyVIV閱讀 2,136評論 1 18
  • 前面講了servlet入門實踐現(xiàn)在開始介紹jsp入門實踐如蚜,開發(fā)環(huán)境的搭建請參考我前面的tomcat的文章压恒,jsp入...
    伊豚wall閱讀 3,368評論 2 56
  • 什么是jsp? 很久之前错邦,我們的網(wǎng)頁都是靜態(tài)的探赫,就是我們所看到的頁面在編寫好之后總是唯一的。后來有人便提出動態(tài)頁面...
    ezsync小智閱讀 1,509評論 0 13
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理撬呢,服務(wù)發(fā)現(xiàn)伦吠,斷路器,智...
    卡卡羅2017閱讀 134,651評論 18 139