Java web基礎總結八之—— jsp基礎

來源:互聯網
上載者:User

標籤:java web   jsp   web開發   java   web應用   

Java web基礎總結八之—— jsp基礎一.什麼是jsp?

      JSP是Java ServerPages的縮寫,它和servlet一樣,都是用於開發動態web資源的技術。在servlet中拼湊輸出html代碼時,非常麻煩。而JSP的最大的特點在於,寫jsp就像在寫html,但是html只能為使用者提供待用資料,而Jsp技術允許在頁面中嵌套java代碼,開發動態資源。

       現在隨著前端越來越重要,很多的公司都會採取前後端分離的開發模式。即後端只提供返回json等格式的介面,而前端開發人員則通過對後端介面的請求處理json資料,做相應的展示。這樣jsp就幾乎很少用到。但是學習java web,不能不學習jsp。

        JSP和Servlet,都可以用於開發動態web資源。但在實際的開發中中,通常把servlet作為web應用中的控制器組件來使用,而把JSP技術作為資料顯示模板來使用。即servlet只負責響應請求產生資料,並把資料通過轉寄技術帶給jsp,資料的顯示jsp來做。

 

二.jsp的原理

    首先需要明確的是,JSP也是一個servlet,所以它的運行原理和servlet類似。每個JSP 頁面在第一次被訪問時,WEB容器都會把請求交給JSP引擎(即一個Java程式)去處理。JSP引擎先將JSP翻譯成一個_jspServlet(實質上也是一個servlet),然後按照servlet的調用方式進行調用。

       由於JSP第一次訪問時會翻譯成servlet,所以第一次訪問通常會比較慢,但第二次訪問,JSP引擎如果發現JSP沒有變化,就不再翻譯,而是直接調用,所以程式的執行效率不會受到影響。

      當然,jsp也可以配置為web應用啟動載入。而且jsp也可以像servlet一樣在web.xml中進行配置映射路徑,但是通常都是通過servlet來訪問相應的jsp。

例如:

<servlet>

    <servlet-name>HelloWorldJspServlet</servlet-name>

    <jsp-file>/jsp/hello.jsp</jsp-file>

    <load-on-startup>1</load-on-startup>

</servlet>

 

<servlet-mapping>

    <servlet-name> HelloWorldJspServlet</servlet-name>

    <url-pattern>/hello.html</url-pattern>

</servlet-mapping>

 

 

三.Jsp的文法簡介1. JSP元素

     JSP元素就是JSP頁面中的HTML內容。Jsp頁面中可以定義html的標籤。所以它定義了網頁的基本骨架,定義了頁面的結構和外觀。例如head, body。

2. JSP指令碼運算式

        JSP指令碼運算式(expression)用於將程式資料輸出到用戶端,簡單的說就是輸出運算式所嵌套的java變數的值。文法是:<%= 變數或運算式 %>。例如,目前時間:<%= new java.util.Date() %> 。JSP引擎在翻譯指令碼運算式時,會將程式資料轉成字串,然後在相應位置用out.print(…)方法將資料輸給用戶端。需要注意的是JSP指令碼運算式中的變數或運算式後面不能有分號。

3. JSP指令碼片斷

         JSP指令碼片斷(scriptlet)就是在JSP頁面中編寫多行Java代碼,雖然通常我們並不會在一個jsp檔案中嵌套太多的java代碼。文法是:<% java代碼%>

       需要注意的是,JSP指令碼片斷中只能出現java代碼,不能出現其它模板元素,這是因為 JSP引擎在翻譯JSP頁面中,會將JSP指令碼片斷中的Java代碼將被原封不動地放到Servlet的_jspService方法中。所以JSP指令碼片斷中的Java代碼必須嚴格遵循Java文法,和JSP指令碼運算式不同的是,每一個執行語句後面必須用分號結束。

        在一個JSP頁面中可以有多個指令碼片斷,在兩個或多個指令碼片斷之間可以嵌入文本、HTML標記和其他JSP元素。

    例如:

<%

    String s1 = "hello";

    out.println(s1);

%>

<p>hello world!</p>

<%

String s2 = "world!";

    out.println(s1+s2);  

%>

       多個指令碼片斷中的代碼可以相互訪問,猶如將所有的代碼放在一對<%%>之中的情況。如:out.println(s1+s2);所以單個指令碼片斷中的Java語句可以是不完整的,但是,多個指令碼片斷組合後的結果必須是完整的Java語句。

4. JSP聲明

      JSP聲明和JSP指令碼片斷不同,JSP指令碼片斷中的java代碼,預設會翻譯到servlet的service方法中,而Jsp聲明中的java代碼被翻譯到_jspService方法的外面。文法:

<%! java代碼 %>

所以,JSP聲明可用於定義JSP頁面轉換成的Servlet程式的靜態代碼塊、成員變數和方法 。 多個靜態代碼塊、變數和函數可以定義在一個JSP聲明中,也可以分別單獨定義在多個JSP聲明中。JSP隱式對象的作用範圍僅限於Servlet的_jspService方法,所以在JSP聲明中不能使用這些隱式對象。例如:

<%!

static

{

    System.out.println("helloworld!");

}

%>

 

5.JSP注釋

    JSP注釋的文法是:<%-- 注釋資訊 --%>。JSP引擎在將JSP頁面翻譯成Servlet程式時,JSP頁面中被注釋的內容。

6. JSP指令簡介

     JSP指令的基本文法格式:<%@ 指令屬性名稱="值" %>

         舉例:<%@page contentType="text/html;charset=UTF-8" language="java"%>

下面是幾個比較常用的jsp指令。

(1).page

       page指令的作用是定義JSP頁面的各種屬性,它作用的是整個JSP頁面,所以為了保持程式的可讀性和遵循良好的編程習慣,一般把page指令放在整個JSP頁面的起始位置。

JSP 2.0規範中定義的page指令的完整文法:

<%@ page

    [ language="java"]

    [extends="package.class" ]

    [import="{package.class | package.*}, ..." ]

    [ session="true |false" ]

    [ buffer="none | 8kb |sizekb" ]

    [ autoFlush="true |false" ]

    [ isThreadSafe="true |false" ]

    [ info="text" ]

    [errorPage="relative_url" ]

    [ isErrorPage="true |false" ]

    [contentType="mimeType [ ;charset=characterSet ]" | "text/html ;charset=ISO-8859-1" ]

    [pageEncoding="characterSet | ISO-8859-1" ]

    [ isELIgnored="true |false" ]

%>

 

(2). Include

        include指令的作用是引入其它JSP頁面,如果使用include指令引入了其它JSP頁面,那麼JSP引擎將把這兩個JSP翻譯成一個servlet。所以include指令引入通常也稱之為靜態引入。

文法:<%@include file="xx.jspf"%>

          其中的file屬性用於指定被引入檔案的相對路徑。需要注意的是file屬性的值必須使用相對路徑,如果以“/”開頭,表示相對於當前WEB應用程式的根目錄(注意不是網站根目錄),否則,表示相對於當前檔案。被引入的檔案可以使用任意的副檔名,即使其副檔名是html,JSP引擎也會按照處理jsp頁面的方式處理它裡面的內容,JSP規範建議使用.jspf(JSP fragments)作為靜態引入檔案的副檔名。由於使用include指令將會涉及到2個JSP頁面,並會把2個JSP翻譯成一個servlet,所以這2個JSP頁面的指令不能衝突。

(3). taglib

     taglib指令用於在JSP頁面中匯入標籤庫。例如:

     <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

 

四.jsp的9個內建對象以及其中的4個域對象。

         JSP引擎在調用JSP對應的_jspServlet時,會傳遞或建立9個與web開發相關的對象供_jspServlet使用。JSP技術的設計者為便於開發人員在編寫JSP頁面時獲得這些web對象的引用,特意定義了9個相應的變數,開發人員在JSP頁面中通過這些變數就可以快速獲得這9大對象的引用。需要特別注意的是:JSP隱式對象的作用範圍僅限於Servlet的_jspService方法,所以在JSP聲明中不能使用這些隱式對象。

1. jsp的9個內建對象

request:這個對象就是HttpServletRequest,不多敘述

response:這個對象就是HttpServletResponse。

config:就是ServletConfig,在servlet中已經介紹過,作用是為servlet配置一些初始化參數,作用範圍是一個servlet。

application:就是ServletContext, 前面也介紹過,作用範圍是整個web應用。

exception:異常相關,用於處理異常。

session: 就是HttpSession,也不多說。

page:就是this對象,代表當前的頁面。

out:out隱式對象用於向用戶端發送文本資料。 out對象是通過調用pageContext對象的getOut方法返回的,其作用和用法與      ServletResponse.getWriter方法返回的PrintWriter對象非常相似。 JSP頁面中的out隱式對象的類型為JspWriter,JspWriter相當於一種帶緩衝功能的PrintWriter,設定JSP頁面的page指令的buffer屬性可以調整它的緩衝大小,甚至關閉它的緩衝。

pageContext: pageContext對象是JSP的一個非常重要的一個對象,它代表JSP頁面的運行環境,這個對象不僅封裝了對其它8大隱      式對象的引用,它自身還是一個域對象,可以用來儲存資料。並且,這個對象還封裝了web開發中經常涉及到的一些常用操作。     它有個非常重要的方法:findAttribute方法,作用是尋找各個域中的屬性。EL運算式就是通過它實現的。EL運算式語句在執行       時,會調用pageContext.findAttribute方法,用標識符為關鍵字,分別從page、request、session、application四個域中尋找相     應的對象,找到則返回相應對象,找不到則返回Null 字元串,而不是null,可以避免異常。

 

2.      java web 的4個域對象:

這四個域中都可以儲存一些屬性,並且可以通過名字取出屬性的值。

pageContext(稱為page域):作用的範圍最小,就是當前的jsp頁面

request(稱為request域):作用的範圍為一個請求。

session(稱為session域):就是session,作用範圍是一個用戶端瀏覽器。

servletContext(稱為application域):範圍最大,為整個web應用。

 

 

Java web基礎總結八之—— jsp基礎

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.