JavaWeb:JSP技術基礎
JavaWeb:JSP技術
快速開始
介紹
- JSP全稱Java Server Pages,是一種動態網頁開發技術。它使用JSP標簽在HTML網頁中插入Java代碼。標簽通常以<%開頭以%>結束。
- JSP是一種Java servlet,主要用於實現Java web應用程序的用戶界面部分。網頁開發者們通過結合HTML代碼、XHTML代碼、XML元素以及嵌入JSP操作和命令來編寫JSP。
- JSP通過網頁表單獲取用戶輸入數據、訪問數據庫及其他數據源,然後動態地創建網頁。
- JSP標簽有多種功能,比如訪問數據庫、記錄用戶選擇信息、訪問JavaBeans組件等,還可以在不同的網頁中傳遞控制信息和共享信息
- JSP 技術是以 Java 語言作為腳本語言的,JSP 網頁為整個服務器端的 Java 庫單元提供了一個接口來服務於HTTP的應用程序。
- JSP文件後綴名為 *.jsp 。
- JSP開發的WEB應用可以跨平臺使用,既可以運行在 Linux 上也能運行在 Windows 上。
第一個JSP頁面
<html> <head> <title>第一個 JSP 程序</title> </head> <body> <% out.println("Hello World!"); %> </body> </html>
JSP處理
JSP創建過程
以下步驟表明了 Web 服務器是如何使用JSP來創建網頁的:
-
就像其他普通的網頁一樣,您的瀏覽器發送一個 HTTP 請求給服務器。
-
Web 服務器識別出這是一個對 JSP 網頁的請求,並且將該請求傳遞給 JSP 引擎。通過使用 URL或者 .jsp 文件來完成。
-
JSP 引擎從磁盤中載入 JSP 文件,然後將它們轉化為 Servlet。這種轉化只是簡單地將所有模板文本改用 println() 語句,並且將所有的 JSP 元素轉化成 Java 代碼。
-
JSP 引擎將 Servlet 編譯成可執行類,並且將原始請求傳遞給 Servlet 引擎。
-
Web 服務器的某組件將會調用 Servlet 引擎,然後載入並執行 Servlet 類。
-
Web 服務器以靜態 HTML 網頁的形式將 HTTP response 返回到您的瀏覽器中。
-
最終,Web 瀏覽器處理 HTTP response 中動態產生的HTML網頁,就好像在處理靜態網頁一樣。
圖例
一句話說明,JSP與Servlet關系:JSP 網頁就是用另一種方式來編寫 Servlet 而不用成為 Java 編程高手。除了解釋階段外,JSP 網頁幾乎可以被當成一個普通的 Servlet 來對待。
JSP生命周期
理解JSP底層功能的關鍵就是去理解它們所遵守的生命周期。JSP生命周期就是從創建到銷毀的整個過程,類似於servlet生命周期,區別在於JSP生命周期還包括將JSP文件編譯成servlet。
以下是JSP生命周期中所走過的幾個階段:
編譯階段
當瀏覽器請求JSP頁面時,JSP引擎會首先去檢查是否需要編譯這個文件。如果這個文件沒有被編譯過,或者在上次編譯後被更改過,則編譯這個JSP文件。
編譯的過程包括三個步驟:
- 解析JSP文件。
- 將JSP文件轉為servlet。
- 編譯servlet。
初始化階段
容器載入JSP文件後,它會在為請求提供任何服務前調用jspInit()方法。如果您需要執行自定義的JSP初始化任務,復寫jspInit()方法就行了,就像下面這樣:
public void jspInit(){ // 初始化代碼 }
一般來講程序只初始化一次,servlet也是如此。通常情況下您可以在jspInit()方法中初始化數據庫連接、打開文件和創建查詢表。
執行階段
這一階段描述了JSP生命周期中一切與請求相關的交互行為,直到被銷毀。
銷毀階段
SP生命周期的銷毀階段描述了當一個JSP網頁從容器中移除時所發生的一切
JSP開發
基礎語法
JSP指令
JSP指令用來設置整個JSP頁面相關的屬性,如網頁的編碼方式和腳本語言。
語法格式如下:
<%@ directive attribute="value" %>
指令可以有很多個屬性,它們以鍵值對的形式存在,並用逗號隔開。
JSP中的三種指令標簽:
指令 | 描述 |
---|---|
<%@ page ... %> | 定義網頁依賴屬性,比如腳本語言、error頁面、緩存需求等等 |
<%@ include ... %> | 包含其他文件 |
<%@ taglib ... %> | 引入標簽庫的定義 |
JSP動作元素
說明
與JSP指令元素不同的是,JSP動作元素在請求處理階段起作用。JSP動作元素是用XML語法寫成的。利用JSP動作可以動態地插入文件、重用JavaBean組件、把用戶重定向到另外的頁面、為Java插件生成HTML代碼。動作元素只有一種語法,它符合XML標準:
<jsp:action_name attribute="value" />
動作元素基本上都是預定義的函數,JSP規範定義了一系列的標準動作,它用JSP作為前綴,可用的標準動作元素如下:
語法 | 描述 |
---|---|
jsp:include | 在頁面被請求的時候引入一個文件。 |
jsp:useBean | 尋找或者實例化一個JavaBean。 |
jsp:setProperty | 設置JavaBean的屬性。 |
jsp:getProperty | 輸出某個JavaBean的屬性。 |
jsp:forward | 把請求轉到一個新的頁面。 |
jsp:plugin | 根據瀏覽器類型為Java插件生成OBJECT或EMBED標記。 |
jsp:element | 定義動態XML元素 |
jsp:attribute | 設置動態定義的XML元素屬性。 |
jsp:body | 設置動態定義的XML元素內容。 |
jsp:text | 在JSP頁面和文檔中使用寫入文本的模板 |
演示
JSP簡單應用
頁面自動刷新
這個例子使用了setIntHeader()方法來設置刷新頭,模擬一個數字時鐘:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.io.*,java.util.*" %> <html> <head> <title>自動刷新實例</title> </head> <body> <h2>自動刷新實</h2> <% // 設置每隔5秒刷新一次 response.setIntHeader("Refresh", 5); // 獲取當前時間 Calendar calendar = new GregorianCalendar(); String am_pm; int hour = calendar.get(Calendar.HOUR); int minute = calendar.get(Calendar.MINUTE); int second = calendar.get(Calendar.SECOND); if(calendar.get(Calendar.AM_PM) == 0) am_pm = "AM"; else am_pm = "PM"; String CT = hour+":"+ minute +":"+ second +" "+ am_pm; out.println("當前時間為: " + CT + "\n"); %> </body> </html>
點擊量統計
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.io.*,java.util.*" %> <html> <html> <head> <title>訪問量統計</title> </head> <body> <% Integer hitsCount = (Integer)application.getAttribute("hitCounter"); if( hitsCount ==null || hitsCount == 0 ){ /* 第一次訪問 */ out.println("歡迎訪問菜鳥教程!"); hitsCount = 1; }else{ /* 返回訪問值 */ out.println("歡迎再次訪問菜鳥教程!"); hitsCount += 1; } application.setAttribute("hitCounter", hitsCount); %> <p>頁面訪問量為: <%= hitsCount%></p> </body> </html>
頁面重定向
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.io.*,java.util.*" %> <html> <html> <head> <title>頁面重定向</title> </head> <body> <h1>頁面重定向</h1> <% // 重定向到新地址 String site = new String("http://www.runoob.com"); response.setStatus(response.SC_MOVED_TEMPORARILY); response.setHeader("Location", site); %> </body> </html>
JavaWeb:JSP技術基礎