jsp

tomcatwork目錄: tomcat服務器存放jsp運行時的臨時文件php

 

 

Jsp的執行過程html

 

 

tomcat掃描到jsp文件,在%tomcat%/workjsp文件翻譯成java源文件java

 

 

tomcat服務器把java源文件編譯成class字節碼文件 web

 

 

tomcat服務器構造_01_hello_jsp類對象sql

 

 

 

爲何Jsp就是servletapache

 

 

extends org.apache.jasper.runtime.HttpJspBase  implements org.apache.jasper.runtime.JspSourceDependent瀏覽器

 

 

HttpJspBase類  就是集成servlet緩存

 

 

 

Jsp的生命週期tomcat

 

1)翻譯: jsp->java文件服務器

 

2)編譯: java文件->class文件(servlet程序)

 

3)構造方法(第1次訪問)

 

4)init方法(第1次訪問):_jspInit()

 

5)service方法:_jspService()

 

6)destroy方法:_jspDestroy()

 

語法: <%!--  jsp註釋  --%>

 

html的註釋會被翻譯和執行。而jsp的註釋不能被翻譯和執行。

 

 

指令:

 

include指令

 

做用: 在當前頁面用於包含其餘頁面

 

語法: <%@include file="common/header.jsp"%>

 

 

原理是把被包含的頁面(header.jsp)的內容翻譯到包含頁面(index.jsp),合併成翻譯成一 java源文件,再編譯運行!!,這種包含叫靜態包含(源碼包含)

 

 

若是使用靜態包含,被包含頁面中不須要出現全局的html標籤了(如htmlhead body)

 

 

 

page指令

 

 

 

做用: 告訴tomcat服務器如何翻譯jsp文件

 

 

import="java.util.*" --告訴服務器java文件使用什麼包導入包,多個包之間用逗號分割

 

 

pageEncoding="utf-8"  --告訴服務器使用什麼編碼翻譯jsp文件

 

contentType="text/html; charset=utf-8" 服務器發送瀏覽器的數據類型和內容編碼

 

errorPage="error.jsp"

isErrorPage="false"

buffer="8kb"

session="true"

isELIgnored="false"

 

taglib指令

 

 

配置全局的錯誤處理頁面

 

  <!-- 全局錯誤處理頁面配置 -->
  <error-page>
      <error-code>500</error-code>
      <location>/common/500.jsp</location>
  </error-page>
  <error-page>
      <error-code>404</error-code>
      <location>/common/404.html</location>
  </error-page>

9大內置對象

內置對象名          類型

request    HttpServletRequest

response      HttpServletResponse

config        ServletConfig

application        ServletContext

session         HttpSession

exception        Throwable

page            Object(this)

out             JspWriter

pageContext     PageContext 

 

Out對象:out對象類型,JspWriter類,至關於帶緩存的PrintWriter

當知足如下條件之一,緩衝區內容寫出:

1)緩衝區滿了

2)刷新緩存區

3)關閉緩存區

4)執行完畢jsp頁面

 

 

pageContext對象

 

 

pageContext對象的類型是PageContext,叫jsp的上下文對象 能夠獲取其餘八個內置對象

 

使用場景: 在自定義標籤的時候,PageContext對象頻繁使用到

 

 

自己是一個域對象

保存數據:

 

 

默認狀況下,保存到page域 pageContext.setAttribute("name");

 

能夠向四個域對象保存數據  pageContext.setAttribute("name",域範圍常量)

 

讀取數據

pageContext.getAttribute("name")

pageContext.getAttribute("name",域範圍常量)

PageContext.PAGE_SCOPE  ... 

 

自動在四個域中搜索數據

pageContext.findAttribute("name");

順序: page-> request-> session- > context域(application域)

 

Jsp中的四個域對象

pageContext      page域       只能在當前jsp頁面中使用(當前頁面)

request          request域       只能在同一個請求中使用(轉發)

session          session域       只能在同一個會話(session對象)中使用(私有的)

application       context域       只能在同一個web應用中使用。(全局的)

 

使用EL表達式替換掉jsp表達式

EL做用:向瀏覽器輸出域對象中的變量值或表達式計算的結果

語法: ${變量或表達式}

輸出基本數據類型變量       

${name}        從四個域獲取               域範圍: pageScoep / requestScope / sessionScope / applicationScope

${pageScope.name}   指定域獲取       

 

jsp標籤

標籤的做用:替換jsp腳本

流程判斷(if   for循環)  跳轉頁面(轉發,重定向)

 

Jsp標籤分類

內置標籤(動做標籤): 不須要在jsp頁面導入標籤

jstl標籤: 須要在jsp頁面中導入標籤

 

自定義標籤 開發者自行定義,須要在jsp頁面導入標籤

 

   

 

動做標籤

轉發標籤: <jsp:forward />

參數標籤:  <jsp:pararm/>

包含標籤:  <jsp:include/>

原理: 包含與被包含的頁面先各自翻譯成java源文件,而後再運行時合併在一塊兒。

(先翻譯再合併),動態包含

 

靜態包含和動態包含的區別

1) 語法不一樣

靜態包含語法: <%@inclue file="被包含的頁面"%>

動態包含語法: <jsp:include page="被包含的頁面">

 

2)參數傳遞不一樣

靜態包含不能向被包含頁面傳遞參數

動態包含能夠向被包含頁面傳遞參數

 

3)原理不一樣

靜態包含: 先合併再翻譯

動態包含: 先翻譯再合併

 

 

JSTL標籤: java標準標籤庫

 

 

核心標籤庫 c標籤庫) 重點

國際化標籤(fmt標籤庫)

EL函數庫(fn函數庫)

xml標籤庫(x標籤庫)

sql標籤庫(sql標籤庫)

 

使用步驟:

導入jstl支持的jar包(標籤背後隱藏的java代碼)

使用taglib指令導入標籤庫  <%@taglib uri="tld文件的uri名稱" prefix="簡寫" %>

 

 

核心標籤庫的重點標籤:

保存數據:<c:set></c:set>   

獲取數據:<c:out value=""></c:out>

單條件判斷:<c:if test=""></c:if>

多條件判斷:

          <c:choose></c:choose>

         <c:when test=""></c:when>

          <c:otherwise></c:otherwise>

循環數據

          <c:forEach></c:forEach>

          <c:forTokens items="" delims=""></c:forTokens>

重定向

          <c:redirect></c:redirect>

<%--set標籤 :保存數據(保存到域中)默認保存到page域 --%>
    <c:set var="name" value="rose" scope="request"></c:set>
    

   
    <%--out標籤: 獲取數據(從域中) 
    default: 當value值爲null時,使用默認值
    escapeXml: 是否對value值進行轉義,false,不轉義,true,轉義(默認)
    --%>
    <c:out value="${msg}" default="<h3>標題3</h3>" escapeXml="true"></c:out>
    
    <hr/>
    
    <%--if標籤 :單條件判斷--%>
    <c:if test="${!empty msg}">
        條件成立
    </c:if>
    
    <hr/>
    <%--choose標籤+when標籤+otherwirse標籤: 多條件判斷 --%>
    <c:set var="score" value="56"></c:set>
    
    <c:choose>
        <c:when test="${score>=90 && score<=100}">
            優秀
        </c:when>
        <c:when test="${score>=80 && score<90}">
            良好
        </c:when>
        <c:when test="${score>=70 && score<80}">
            通常
        </c:when>
        <c:when test="${score>=60 && score<70}">
            及格
        </c:when>
        <c:otherwise>
            不及格
        </c:otherwise>
    </c:choose>
    
    <%-- forEach標籤:循環 --%>
    <%
        //List
         List<Student>  list = new ArrayList<Student>();
         list.add(new Student("rose",18));
         list.add(new Student("jack",28));
         list.add(new Student("lucy",38));
         //放入域中
         pageContext.setAttribute("list",list);
         
         //Map
         Map<String,Student> map = new HashMap<String,Student>();
         map.put("100",new Student("mark",20));
         map.put("101",new Student("maxwell",30));
         map.put("102",new Student("narci",40));
         //放入域中
         pageContext.setAttribute("map",map);
     %>
     <hr/>
     <%--
      begin="" : 從哪一個元素開始遍歷,從0開始.默認從0開始
      end="":     到哪一個元素結束。默認到最後一個元素
      step="" : 步長    (每次加幾)  ,默認1
      items="": 須要遍歷的數據(集合) 
      var="": 每一個元素的名稱 
      varStatus="": 當前正在遍歷元素的狀態對象。(count屬性:當前位置,從1開始)
      
     --%>
    <c:forEach items="${list}" var="student" varStatus="varSta">
        序號:${varSta.count} - 姓名:${student.name } - 年齡:${student.age}<br/>
    </c:forEach>
    
    <hr/>
    
    <c:forEach items="${map}" var="entry">
        ${entry.key } - 姓名: ${entry.value.name } - 年齡:${entry.value.age }<br/>
    </c:forEach>
    <hr/>
    <%-- forToken標籤: 循環特殊字符串 --%>
    <%
        String str = "java-php-net-平面";
        pageContext.setAttribute("str",str);
     %>
    
    <c:forTokens items="${str}" delims="-" var="s">
        ${s }<br/>
    </c:forTokens>
    
    <%--redrict:重定向 --%>
    <c:redirect url="http://www.baidu.com"></c:redirect>

JavaBean

這個Java類必須具備一個無參的構造函數 屬性必須私有化。

私有化的屬性必須經過public類型的方法暴露給其它程序,而且方法的命名也必須遵照必定的命名規範。

相關文章
相關標籤/搜索