web編程jsp總結

爲什麼要使用JSP

    Servlet存在以下缺陷:

    1.Servlet的編碼、部署和調試任務繁瑣

    2.生成動態網頁繁瑣,不利於項目分工

    可以使用JSP來彌補Servlet的這些缺陷

 

什麼是JSP

    JSP(Java Server Pages),是由HTML語句和嵌套在其中的Java代碼組成的一個普通文本文件,其擴展名爲.jsp。使用jsp技術編寫的頁面爲動態頁面

    JSP通常用於簡化創建產生文本的Servlet,而Servlet更適合於發送原生字節到客戶端或需要用Java源代碼完全控制源代碼的場合。二者可以很好的分開

 

JSP引擎

    容器廠商定義的一個類,用於幫助我們翻譯JSP文件,如:org.apache.jasper.servlet.JspServlet

    Ps:所有的JSP翻譯後的類都必須實現HttpJspPage接口,而HttpJspPage接口是Servlet的子接口,所以從這個意義上來說,JSP的本質是Servlet

 

JSP生命週期

    1. Web容器第一次接收到對某個JSP頁面的請求後,首先自動將該JSP頁面翻譯爲Servlet代碼

    2. Web容器負責將Servlet代碼編譯爲字節碼。與源文件放在同一個目錄下

    3. Web容器裝載新生成的servlet類

    4. Web容器創建servlet實例

    5. Web容器調用Servlet示例的jspInit()方法,JSP頁面裝載資源

    6. 容器創建一個新線程來處理這個客戶的請求 ,servlet對象的_jspService()方法運行

    7. 容器調用生成的servlet對象的jspDestroy()方法,銷燬裝載的資源

 

JSP隱式對象

    實質上就是翻譯後的Servlet中的局部變量,一共有9個,其中

    屬於作用域範疇的有4個:

    pageContext – 代表pageContext對象,只在當前頁面有效 

    request – 代表HttpServletRequest對象,在一次請求中有效

    session – 代表HttpSession對象,在一次會話中有效

    application – 代表ServletContext對象,在整個web應用中有效

    屬於輸出範疇的有2個

    response -- 代表與響應相關的HttpServletResponse對象

    out -- 代表與響應輸出流相關的JspWriter對象,可輸出字符流

    其它有3個

    config – 代表ServletConfig,用於配置servlet對象

    page – 當前jsp對象,相當於this

    exception – 代表Throwable對象,只能在JSP錯誤頁面中使用

腳本元素

    聲明  <%! 聲明內容 %>

    – 主要用於定義,可以定義全局變量、靜態變量和方法

    腳本  <% Java程序代碼 %>

    – 書寫Java代碼,豐富_jspService()方法

    表達式  <%= 腳本表達式%>

    – 等價於out.print(“腳本表達式”)

註釋

    JSP註釋   <%--  註釋內容 --%>

    – 在服務器端翻譯後的代碼中和客戶端均不可見,安全性高

    Html註釋  <!--  註釋內容 -->

    – 在服務器端翻譯後的代碼中和客戶端均可見

    Java註釋   //

    – 在服務器端翻譯後的代碼中可見,客戶端不可見

 

JSP指令

    JSP指令用於提供整個JSP頁面的相關信息,用於JSP頁面與容器之間的通信,有三種類型的指令

    Page指令

    <%@ page attribute1=”value1” attribute2=”value2” %>

    -- 用於設定整個JSP頁面的屬性和相關功能,page指令共有11個屬性,較常用的有:

    contentType:設定MIME類型和JSP編碼

    import:在JSP中引入Java的包和類,多個包之間以逗號隔開

    session:指定當前頁面是否能獲得當前用戶的session對象

    errorPage:如果當前頁面發生異常,網頁會重定向到errorPage所指定的頁面進行處理

    isErrorPage:允許指定的JSP頁面爲錯誤處理頁面

include指令

    表示在JSP編譯時插入一個包含文件或者代碼的文件,是一種靜態包含

    <%@ include file="relativeURL" %>

    Ps:1)include指令所包含的文件名不能是一個變量url,只能是靜態的文件名。

        2)在被包含頁面中,一般不包含<html><body>標記,兩個頁面之間不能存在相同的局部變量

 

    taglib指令

    讓用戶能夠自定義標籤

    <%@ taglib prefix="tagprefix" uri="url" %>

JSP標準動作

    <jsp:include>動作

    實現一種動態包含,把顯示的結果插入到當前頁面來顯示

    <jsp:include page="localURL" flush="true"/>

    page:表示一個相對路徑

    flush:必需屬性,且只能爲真,表示當緩衝區滿時會自動清空

    Ps:靜態包含與動態包含的區別:

    1)靜態包含是文件原樣的拷貝,所以在被包含頁面中,一般不包含<html>和<body>標記,兩個頁面之間不能存在相同的局部變量;動態包含包含的是結果,在兩個頁面之間,可以存在相同的變量

    2)靜態包含在編譯時發生,只能包含文件;動態包含在請求時發生,可包含JSP及Servlet請求的url

    <jsp:forward>動作

    相當於內部轉發

    <jsp:forward page="relativeURL">

EL表達式

    EL(expression_r_r Language) -- 表達式語言

語法:${...}

EL的主要目標是從JSP頁面中消除Java代碼,因此,EL表達式不能在腳本中定義變量。

EL表達式隱式變量:

 

 

類別

隱式變量名

描述

JSP pageContext 用來訪問JSP的隱式對象
作用域 pageScope 與page作用域屬性的名稱和值相關聯的Map類
requestScope 與request作用域屬性的名稱和值相關聯的Map類
sessionScope 與session作用域屬性的名稱和值相關聯的Map類
applicationScope 與application作用域屬性的名稱和值相關聯的Map類
請求參數 param 包含請求參數字符串的Map類
paramValues 包含請求參數字符串數組(String[])的Map類
請求頭 header 包含請求頭字符串的Map類
headerValues 包含請求頭字符串數組(String[])的Map類
Cookie cookie 按名稱存儲請求附帶的Cookie的Map類

 

自定義標籤

    1.新建一個類繼承BodyTagSupport類,BodyTagSupport類實現了Tag接口,重寫需要實現的方法,一般是doEndTag()

    2.在WEB-INF下面新建一個.tld文件,完成註冊 

    <?xml version="1.0" encoding="UTF-8"?>
    <taglib>
      <tlib-version>1.0</tlib-version>
      <jsp-version>1.2</jsp-version>
      <uri>http://www.baidu.com</uri>
      <tag>
        <name>tagTast</name>
        <tag-class>com.lovo.MyTag</tag-class> 

      </tag>
    </taglib>

    3.在jsp頁面添加taglib指令

    <%@ taglib prefix="my" uri="com.lovo.MyTag">

    4.在jsp頁面使用自定義標籤

 

爲自定義標籤設置屬性

 

    1.定義屬性,並且生成get和set方法

    2.在tld文件裏<tag>標籤內註冊

    <attribute>
      <name>屬性名<name>
      <required>true</required>
    </attribute>

    3.在jsp頁面裏面設置標籤屬性的值 

標準標記庫JSTL:

    需要兩個Jar文件:jstl.jar、standard.jar;構建成功後須在JSP中添加如下指令;
    < %@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

    常用標記:

    <c:if>  -- 判斷 

    <c:forEach>  -- 循環

 

 

在JSP中使用JavaBean:

 

1、<jsp:useBean>動作

語法:<jsp:useBean id="beanName" scope="page|request|session|applicaion"  class="className">

id -- 對象的屬性名

scope -- 作用域

class -- 類的全路徑名。

  

2、<jsp:getProperty>動作

  語法:<jsp:getProperty name="beanName" property="propertyName">

  name -- 對應<jsp:useBean>裏的id。

  property -- 要獲取的屬性名

 

3、<jsp:setProperty>動作

   語法:<jsp:setProperty name="beanName" property="屬性名">

         <jsp:setProperty name="beanName" property="屬性名" param="參數名">

         <jsp:setProperty name="beanName" property="屬性名" value="屬性值"> //獲取請求參數

         <jsp:setProperty name="beanName" property="*">

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章