<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # JSP教程 JSP 與 PHP、ASP、ASP.NET等語言類似,運行在服務端的語言。 JSP(全稱Java Server Pages)是由 Sun Microsystems 公司倡導和許多公司參與共同創建的一種使軟件開發者可以響應客戶端請求,而動態生成 HTML、XML 或其他格式文檔的Web網頁的技術標準。 JSP 技術是以 Java 語言作為腳本語言的,JSP 網頁為整個服務器端的 Java 庫單元提供了一個接口來服務于HTTP的應用程序。 JSP文件后綴名為\*.jsp。 JSP開發的WEB應用可以跨平臺使用,既可以運行在 Linux 上也能運行在 Windows 上。 * * * ## 第一個 JSP 程序 語言學習入門的第一個程序一般都是輸出 "Hello World",JSP輸出 "Hello World" 代碼如下所示: ~~~ <html> <head> <title>第一個 JSP 程序</title> </head> <body> <% out.println("Hello World!"); %> </body> </html> ~~~ * * * ## 開始學習 JSP 了解了 JSP 的基本概念后,現在讓我們開始來學習 JSP吧。 # JSP簡介 ## 什么是Java Server Pages? JSP全稱Java Server Pages,是一種動態網頁開發技術。它使用JSP標簽在HTML網頁中插入Java代碼。標簽通常以結束。 JSP是一種Java servlet,主要用于實現Java web應用程序的用戶界面部分。網頁開發者們通過結合HTML代碼、XHTML代碼、XML元素以及嵌入JSP操作和命令來編寫JSP。 JSP通過網頁表單獲取用戶輸入數據、訪問數據庫及其他數據源,然后動態地創建網頁。 JSP標簽有多種功能,比如訪問數據庫、記錄用戶選擇信息、訪問JavaBeans組件等,還可以在不同的網頁中傳遞控制信息和共享信息。 * * * ## 為什么使用JSP? JSP程序與CGI程序有著相似的功能,但和CGI程序相比,JSP程序有如下優勢: * 性能更加優越,因為JSP可以直接在HTML網頁中動態嵌入元素而不需要單獨引用CGI文件。 * 服務器調用的是已經編譯好的JSP文件,而不像CGI/Perl那樣必須先載入解釋器和目標腳本。 * JSP 基于Java Servlet API,因此,JSP擁有各種強大的企業級Java API,包括JDBC,JNDI,EJB,JAXP等等。 * JSP頁面可以與處理業務邏輯的 Servlet 一起使用,這種模式被Java servlet 模板引擎所支持。 最后,JSP是Java EE不可或缺的一部分,是一個完整的企業級應用平臺。這意味著JSP可以用最簡單的方式來實現最復雜的應用。 * * * ## JSP的優勢 以下列出了使用JSP帶來的其他好處: * 與ASP相比:JSP有兩大優勢。首先,動態部分用Java編寫,而不是VB或其他MS專用語言,所以更加強大與易用。第二點就是JSP易于移植到非MS平臺上。 * 與純 Servlet 相比:JSP可以很方便的編寫或者修改HTML網頁而不用去面對大量的println語句。 * 與SSI相比:SSI無法使用表單數據、無法進行數據庫鏈接。 * 與JavaScript相比:雖然JavaScript可以在客戶端動態生成HTML,但是很難與服務器交互,因此不能提供復雜的服務,比如訪問數據庫和圖像處理等等。 * 與靜態HTML相比:靜態HTML不包含動態信息。 * * * ## 接下來呢? 我們將會帶您一步一步地來搭建JSP運行環境,這需要有一定的Java基礎。 # JSP結構 網絡服務器需要一個 JSP 引擎,也就是一個容器來處理 JSP 頁面。容器負責截獲對 JSP 頁面的請求。本教程使用內嵌 JSP 容器的 Apache 來支持 JSP 開發。 JSP 容器與 Web 服務器協同合作,為JSP的正常運行提供必要的運行環境和其他服務,并且能夠正確識別專屬于 JSP 網頁的特殊元素。 下圖顯示了 JSP 容器和 JSP 文件在 Web 應用中所處的位置。 ![](http://h.yiniuedu.com/a64dbc5a8415996c04597466879f6cbb) * * * ## JSP 處理 以下步驟表明了 Web 服務器是如何使用JSP來創建網頁的: * 就像其他普通的網頁一樣,您的瀏覽器發送一個 HTTP 請求給服務器。 * Web 服務器識別出這是一個對 JSP 網頁的請求,并且將該請求傳遞給 JSP 引擎。通過使用 URL或者 .jsp 文件來完成。 * JSP 引擎從磁盤中載入 JSP 文件,然后將它們轉化為 Servlet。這種轉化只是簡單地將所有模板文本改用 println() 語句,并且將所有的 JSP 元素轉化成 Java 代碼。 * JSP 引擎將 Servlet 編譯成可執行類,并且將原始請求傳遞給 Servlet 引擎。 * Web 服務器的某組件將會調用 Servlet 引擎,然后載入并執行 Servlet 類。在執行過程中,Servlet 產生 HTML 格式的輸出并將其內嵌于 HTTP response 中上交給 Web 服務器。 * Web 服務器以靜態 HTML 網頁的形式將 HTTP response 返回到您的瀏覽器中。 * 最終,Web 瀏覽器處理 HTTP response 中動態產生的HTML網頁,就好像在處理靜態網頁一樣。 以上提及到的步驟可以用下圖來表示: ![](http://h.yiniuedu.com/210ac7b78c2556c1e68e387a3b94a59c) 一般情況下,JSP 引擎會檢查 JSP 文件對應的 Servlet 是否已經存在,并且檢查 JSP 文件的修改日期是否早于 Servlet。如果 JSP 文件的修改日期早于對應的 Servlet,那么容器就可以確定 JSP 文件沒有被修改過并且 Servlet 有效。這使得整個流程與其他腳本語言(比如 PHP)相比要高效快捷一些。 總的來說,JSP 網頁就是用另一種方式來編寫 Servlet 而不用成為 Java 編程高手。除了解釋階段外,JSP 網頁幾乎可以被當成一個普通的 Servlet 來對待。 # JSP生命周期 理解JSP底層功能的關鍵就是去理解它們所遵守的生命周期。 JSP生命周期就是從創建到銷毀的整個過程,類似于servlet生命周期,區別在于JSP生命周期還包括將JSP文件編譯成servlet。 以下是JSP生命周期中所走過的幾個階段: * **編譯階段:** servlet容器編譯servlet源文件,生成servlet類 * **初始化階段:** 加載與JSP對應的servlet類,創建其實例,并調用它的初始化方法 * **執行階段:** 調用與JSP對應的servlet實例的服務方法 * **銷毀階段:** 調用與JSP對應的servlet實例的銷毀方法,然后銷毀servlet實例 很明顯,JSP生命周期的四個主要階段和servlet生命周期非常相似,下面給出圖示: ![](http://h.yiniuedu.com/a6bf74ccae71a38892647bc9419201fb) * * * ## JSP編譯 當瀏覽器請求JSP頁面時,JSP引擎會首先去檢查是否需要編譯這個文件。如果這個文件沒有被編譯過,或者在上次編譯后被更改過,則編譯這個JSP文件。 編譯的過程包括三個步驟: * 解析JSP文件。 * 將JSP文件轉為servlet。 * 編譯servlet。 * * * ## JSP初始化 容器載入JSP文件后,它會在為請求提供任何服務前調用jspInit()方法。如果您需要執行自定義的JSP初始化任務,復寫jspInit()方法就行了,就像下面這樣: ~~~ public void jspInit(){ // 初始化代碼 } ~~~ 一般來講程序只初始化一次,servlet也是如此。通常情況下您可以在jspInit()方法中初始化數據庫連接、打開文件和創建查詢表。 * * * ## JSP執行 這一階段描述了JSP生命周期中一切與請求相關的交互行為,直到被銷毀。 當JSP網頁完成初始化后,JSP引擎將會調用\_jspService()方法。 \_jspService()方法需要一個HttpServletRequest對象和一個HttpServletResponse對象作為它的參數,就像下面這樣: ~~~ void _jspService(HttpServletRequest request, HttpServletResponse response) { // 服務端處理代碼 } ~~~ \_jspService()方法在每個request中被調用一次并且負責產生與之相對應的response,并且它還負責產生所有7個HTTP方法的回應,比如GET、POST、DELETE等等。 * * * ## JSP清理 JSP生命周期的銷毀階段描述了當一個JSP網頁從容器中被移除時所發生的一切。 jspDestroy()方法在JSP中等價于servlet中的銷毀方法。當您需要執行任何清理工作時復寫jspDestroy()方法,比如釋放數據庫連接或者關閉文件夾等等。 jspDestroy()方法的格式如下: ~~~ public void jspDestroy() { // 清理代碼 } ~~~ ### 實例 JSP生命周期代碼實例如下所示: ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <title>life.jsp</title> </head> <body> <%! private int initVar=0; private int serviceVar=0; private int destroyVar=0; %> <%! public void jspInit(){ initVar++; System.out.println("jspInit(): JSP被初始化了"+initVar+"次"); } public void jspDestroy(){ destroyVar++; System.out.println("jspDestroy(): JSP被銷毀了"+destroyVar+"次"); } %> <% serviceVar++; System.out.println("_jspService(): JSP共響應了"+serviceVar+"次請求"); String content1="初始化次數 : "+initVar; String content2="響應客戶請求次數 : "+serviceVar; String content3="銷毀次數 : "+destroyVar; %> <h1>JSP 測試實例</h1> <p><%=content1 %></p> <p><%=content2 %></p> <p><%=content3 %></p> </body> </html> ~~~ 瀏覽器打開該頁面,輸出結果為: **JSP 測試實例** 初始化次數 : 1 響應客戶請求次數 :1 銷毀次數 :0 # JSP語法 本小節將會簡單地介紹一下JSP開發中的基礎語法。 * * * ## 腳本程序 腳本程序可以包含任意量的Java語句、變量、方法或表達式,只要它們在腳本語言中是有效的。 腳本程序的語法格式: ~~~ <% 代碼片段 %> ~~~ 或者,您也可以編寫與其等價的XML語句,就像下面這樣: ~~~ <jsp:scriptlet> 代碼片段 </jsp:scriptlet> ~~~ 任何文本、HTML標簽、JSP元素必須寫在腳本程序的外面。 下面給出一個示例,同時也是本教程的第一個JSP示例: ~~~ <html> <head><title>Hello World</title></head> <body> Hello World!<br/> <% out.println("Your IP address is " + request.getRemoteAddr()); %> </body> </html> ~~~ **注意:**請確保Apache Tomcat已經安裝在C:\\apache-tomcat-7.0.2目錄下并且運行環境已經正確設置。 將以上代碼保存在hello.jsp中,然后將它放置在 C:\\apache-tomcat-7.0.2\\webapps\\ROOT目錄下,打開瀏覽器并在地址欄中輸入http://localhost:8080/hello.jsp。運行后得到以下結果: ![](http://h.yiniuedu.com/e16713a0bfcc7dc2779eadaf43e29603) ### 中文編碼問題 如果我們要在頁面正常顯示中文,我們需要在 JSP 文件頭部添加以下代碼: ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> ~~~ 接下來我們將以上程序修改為: ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>JSP教程(cms.yiniuedu.com)</title> </head> <body> Hello World!<br/> <% out.println("你的 IP 地址 " + request.getRemoteAddr()); %> </body> </html> ~~~ 這樣中文就可以正常顯示了。 * * * ## JSP聲明 一個聲明語句可以聲明一個或多個變量、方法,供后面的Java代碼使用。在JSP文件中,您必須先聲明這些變量和方法然后才能使用它們。 JSP聲明的語法格式: ~~~ <%! declaration; [ declaration; ]+ ... %> ~~~ 或者,您也可以編寫與其等價的XML語句,就像下面這樣: ~~~ <jsp:declaration> 代碼片段 </jsp:declaration> ~~~ 程序示例: ~~~ <%! int i = 0; %> <%! int a, b, c; %> <%! Circle a = new Circle(2.0); %> ~~~ * * * ## JSP表達式 一個JSP表達式中包含的腳本語言表達式,先被轉化成String,然后插入到表達式出現的地方。 由于表達式的值會被轉化成String,所以您可以在一個文本行中使用表達式而不用去管它是否是HTML標簽。 表達式元素中可以包含任何符合Java語言規范的表達式,但是不能使用分號來結束表達式。 JSP表達式的語法格式: ~~~ <%= 表達式 %> ~~~ 同樣,您也可以編寫與之等價的XML語句: ~~~ <jsp:expression> 表達式 </jsp:expression> ~~~ 程序示例: ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>JSP教程(cms.yiniuedu.com)</title> </head> <body> <p> 今天的日期是: <%= (new java.util.Date()).toLocaleString()%> </p> </body> </html> ~~~ 運行后得到以下結果: ~~~ 今天的日期是: 2016-6-25 13:40:07 ~~~ * * * ## JSP注釋 JSP注釋主要有兩個作用:為代碼作注釋以及將某段代碼注釋掉。 JSP注釋的語法格式: ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>JSP教程(cms.yiniuedu.com)</title> </head> <body> <%-- 該部分注釋在網頁中不會被顯示--%> <p> 今天的日期是: <%= (new java.util.Date()).toLocaleString()%> </p> </body> </html> ~~~ 運行后得到以下結果: ~~~ 今天的日期是: 2016-6-25 13:41:26 ~~~ 不同情況下使用注釋的語法規則: | **語法** | 描述 | | --- | --- | | <%--注釋--%> | JSP注釋,注釋內容不會被發送至瀏覽器甚至不會被編譯 | | \<\!--注釋--> | HTML注釋,通過瀏覽器查看網頁源代碼時可以看見注釋內容 | | <\% | 代表靜態 <%常量 | | %\> | 代表靜態 %> 常量 | | \' | 在屬性中使用的單引號 | | \" | 在屬性中使用的雙引號 | * * * ## JSP指令 JSP指令用來設置與整個JSP頁面相關的屬性。 JSP指令語法格式: ~~~ <%@ directive attribute="value" %> ~~~ 這里有三種指令標簽: | **指令** | **描述** | | --- | --- | | <% @ page ...| 定義網頁依賴屬性,比如腳本語言、error頁面、緩存需求等等 | | <% @ include ...%> | 包含其他文件 | | <% @taglib ...%>| 引入標簽庫的定義 | * * * ## JSP行為 JSP行為標簽使用XML語法結構來控制servlet引擎。它能夠動態插入一個文件,重用JavaBean組件,引導用戶去另一個頁面,為Java插件產生相關的HTML等等。 行為標簽只有一種語法格式,它嚴格遵守XML標準: ~~~ <jsp:action_name attribute="value" /> ~~~ 行為標簽基本上是一些預先就定義好的函數,下表羅列出了一些可用的JSP行為標簽:: | **語法** | **描述** | | --- | --- | | jsp:include | 用于在當前頁面中包含靜態或動態資源 | | jsp:useBean | 尋找和初始化一個JavaBean組件 | | jsp:setProperty | 設置 JavaBean組件的值 | | jsp:getProperty | 將?JavaBean組件的值插入到 output中 | | jsp:forward | 從一個JSP文件向另一個文件傳遞一個包含用戶請求的request對象 | | jsp:plugin | 用于在生成的HTML頁面中包含Applet和JavaBean對象 | | jsp:element | 動態創建一個XML元素 | | jsp:attribute | 定義動態創建的XML元素的屬性 | | jsp:body | 定義動態創建的XML元素的主體 | | jsp:text | 用于封裝模板數據 | * * * ## JSP隱含對象 JSP支持九個自動定義的變量,江湖人稱隱含對象。這九個隱含對象的簡介見下表: | **對象** | **描述** | | --- | --- | | request | **HttpServletRequest**類的實例 | | response | **HttpServletResponse**類的實例 | | out | **PrintWriter**類的實例,用于把結果輸出至網頁上 | | session | **HttpSession**類的實例 | | application | **ServletContext**類的實例,與應用上下文有關 | | config | **ServletConfig**類的實例 | | pageContext | **PageContext**類的實例,提供對JSP頁面所有對象以及命名空間的訪問 | | page | 類似于Java類中的this關鍵字 | | exception | **exception**類的對象,代表發生錯誤的 JSP 頁面中對應的異常對象 | * * * ## 控制流語句 JSP提供對Java語言的全面支持。您可以在JSP程序中使用Java API甚至建立Java代碼塊,包括判斷語句和循環語句等等。 ## 判斷語句 **if…else**塊,請看下面這個例子: ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%! int day = 3; %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>JSP教程(cms.yiniuedu.com)</title> </head> <body> <h3>IF...ELSE 實例</h3> <% if (day == 1 || day == 7) { %> <p>今天是周末</p> <% } else { %> <p>今天不是周末</p> <% } %> </body> </html> ~~~ 運行后得到以下結果: ~~~ IF...ELSE 實例 今天不是周末 ~~~ 現在來看看switch…case塊,與if…else塊有很大的不同,它使用out.println(),并且整個都裝在腳本程序的標簽中,就像下面這樣: ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%! int day = 3; %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>JSP教程(cms.yiniuedu.com)</title> </head> <body> <h3>SWITCH...CASE 實例</h3> <% switch(day) { case 0: out.println("星期天"); break; case 1: out.println("星期一"); break; case 2: out.println("星期二"); break; case 3: out.println("星期三"); break; case 4: out.println("星期四"); break; case 5: out.println("星期五"); break; default: out.println("星期六"); } %> </body> </html> ~~~ 瀏覽器訪問,運行后得出以下結果: ~~~ SWITCH...CASE 實例 星期三 ~~~ * * * ## 循環語句 在JSP程序中可以使用Java的三個基本循環類型:for,while,和 do…while。 讓我們來看看for循環的例子,以下輸出的不同字體大小的"菜鳥教程": ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%! int fontSize; %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>JSP教程(cms.yiniuedu.com)</title> </head> <body> <h3>For 循環實例</h3> <%for ( fontSize = 1; fontSize <= 3; fontSize++){ %> <font color="green" size="<%= fontSize %>"> JSP教程 </font><br /> <%}%> </body> </html> ~~~ 運行后得到以下結果: <h1>For循環示例</h1> <h5>JSP教程</h5> <h3>JSP教程</h3> <h2>JSP教程</h2> 將上例改用 while 循環來寫: ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%! int fontSize=0; %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>JSP教程(cms.yiniuedu.com)</title> </head> <body> <h3>While 循環實例</h3> <%while ( fontSize <= 3){ %> <font color="green" size="<%= fontSize %>"> JSP教程 </font><br /> <%fontSize++;%> <%}%> </body> </html> ~~~ 瀏覽器訪問,輸出結果為(fontSize 初始化為0,所以多輸出了一行): <h1>While循環示例</h1> <font color="green" size="1">JSP教程</font><br/> <font color="green" size="2">JSP教程</font><br/> <h3>JSP教程</h3> <h2>JSP教程</h2> JSP運算符 JSP支持所有Java邏輯和算術運算符。 下表羅列出了JSP常見運算符,優先級從高到底: | **類別** | **操作符** | **結合性** | | --- | --- | --- | | 后綴 | () \[\] . (點運算符) | 左到右 | | 一元 | ++ - - ! ~ | 右到左 | | 可乘性 | \* / %? | 左到右 | | 可加性 | \+ -? | 左到右 | | 移位 | \>> >>> << ? | 左到右? | | 關系 | \> >= < <= ? | 左到右 | | 相等/不等 | \== !=? | 左到右 | | 位與 | &? | 左到右 | | 位異或 | ^? | 左到右 | | 位或 | |? | 左到右 | | 邏輯與 | &&? | 左到右 | | 邏輯或 | ||? | 左到右 | | 條件判斷 | ?:? | 右到左 | | 賦值 | \= += -= \*= /= %= >>= <<= &= ^= |=? | 右到左 | | 逗號? | ,? | 左到右? | * * * ## JSP 字面量 JSP語言定義了以下幾個字面量: * 布爾值(boolean):true 和 false; * 整型(int):與 Java 中的一樣; * 浮點型(float):與 Java 中的一樣; * 字符串(string):以單引號或雙引號開始和結束; * Null:null。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看