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來建立網頁的:html

  • 就像其餘普通的網頁同樣,您的瀏覽器發送一個 HTTP 請求給服務器。java

  • Web 服務器識別出這是一個對 JSP 網頁的請求,而且將該請求傳遞給 JSP 引擎。經過使用 URL或者 .jsp 文件來完成。web

  • 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 來對待app

JSP生命週期

  理解JSP底層功能的關鍵就是去理解它們所遵照的生命週期。JSP生命週期就是從建立到銷燬的整個過程,相似於servlet生命週期,區別在於JSP生命週期還包括將JSP文件編譯成servletjsp

如下是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>
相關文章
相關標籤/搜索