1. 程式人生 > >JavaWeb:JSP技術基礎

JavaWeb:JSP技術基礎

spa XML bubuko hits cat 個數 教程 element utf-8

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 類。

    在執行過程中,Servlet 產生 HTML 格式的輸出並將其內嵌於 HTTP response 中上交給 Web 服務器。

  • 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技術基礎