jsp學習 EL JSTL C標簽

JSP

Java server page    服務器端用來開發(fā)動態(tài)網(wǎng)頁
原因: 替換servlet中顯示邏輯的servlet
            (獲得作用域中的數(shù)據(jù) + 想瀏覽器顯示網(wǎng)頁)
            java+HTML   (java代碼嵌套html標簽)

第一個JSP程序

//顯示當前系統(tǒng)時間
1.代碼命名: *.JSP
            HTML代碼+java代碼(html標簽嵌套java代碼)
2.部署tomcat中
    部署地位相當于html文件。
3.訪問JSP
    和HTML訪問一樣。
注意:
    ① jsp開發(fā)無須在web.xml中注冊
    ② jsp代碼無須程序員編譯
    JSP程序執(zhí)行:
        HTML表簽直接輸出瀏覽器
        java代碼,執(zhí)行。如果有執(zhí)行結(jié)果,顯示給瀏覽器.

JSP對比servlet

servlet
    java嵌套HTML
    開發(fā)后需要程序員編譯
    在web.xml配置
    修改代碼需要重新啟動tomcat

    
JSP
    HTML嵌套java
    直接部署,無須程序員手動編譯
    無需要在web.xml配置
    修改代碼無須重新啟動tomcat

JSP中java腳本元素

表達式腳本:  將結(jié)果輸出給瀏覽器
    表達式?    1+1     a/b     a++     a==b
        <%= java表達式 %>
            * 末尾不能有分號 ;
            * 表達式有執(zhí)行結(jié)果;
普通腳本
    流程控制代碼.
    <%  普通java代碼 %>
聲明腳本
    <%! 聲明變量,定義函數(shù)的代碼%>

注意:
    1. java腳本不能嵌套HTML標簽
    2. java腳本不能相互嵌套.

JSP原理

本質(zhì)上是Servlet程序.
JSP執(zhí)行原理:
    1. 瀏覽器請求jsp程序,tomcat將jsp翻譯servlet程序(*.java)
    2. 將servlet程序編譯成class文件
    3. 調(diào)用servlet程序service方法提供響應服務。
*  一次訪問jsp
    tomcat將jsp翻譯servlet程序(*.java)
*  一旦修改jsp
    tomcat將jsp重新發(fā)翻譯servlet程序(*.java)

JSP的翻譯規(guī)則

1.HTML標簽部分,翻譯成響應輸出流方法中內(nèi)容
    JSP:
        <body>
            <h1></h1>
        </body>
    翻譯Servlet:
        pw.println("<body>");
        pw.println("<h1></h1>");
        pw.println("</body>");
2. 表達式腳本
    將表達式翻譯輸出語句中的代碼。
    JSP:
        <%=new java.util.Date() %>
    翻譯servlet:
        pw.println(new java.util.Date());
3. 普通腳本
    翻譯成service方法內(nèi)部的代碼
4. 聲明腳本
    翻譯成Servlet的成員變量(成員方法)
jsp翻譯規(guī)則.png

JSP指令元素

頁面指令

<%@page 屬性=’值‘%>
導包:
    servlet:    import java.util.*;
    jsp:        <%@page import="java.util.*" %>

設(shè)置響應的編碼格式:
    servlet:
        resp.setCharacterEncoding("GBK");
        resp.setContentType("text/html");
    JSP:
        contentType='text/html;charset=GBK'
設(shè)置jsp文件流編碼
    JSP:
        pageEncoding='GBK'
獲得session:
    servlet: getSession();
    JSP:      session='true'    當前jsp中可以使用session
            * session='false'   當前jsp中無法使用session
                     翻譯后的servlet中沒有g(shù)etSession();
              默認  值  true;

錯誤頁面
    isErrorPage=’false|true‘
        表明當前jsp是否是一個錯誤頁面
        包含隱含exception對象。
    errorPage='url-pattern'
        指明如果當前頁面有異常,自動跳轉(zhuǎn)errorPage指向的頁面

isELIgnored="false" 表明當前頁面是否忽略EL表達式 [了解]

標簽庫指令

<%@taglib uri='' prefix=''%>
    uri:    引入外部標簽庫的地址
    prefix: 標簽前綴
例如:
    <%@taglib uri='/struts-tags' prefix=’s‘%>       
        <s:if>

包含指令

<%@include file=’被包含的jsp的url-pattern路徑‘%>
注意:
    靜態(tài)包含,源代碼包含,注意java變量重復聲明的問題。
包含指令.png

動作指令

包含動作

<jsp:include page="被包含的頁面的路徑 url-pattern"></jsp:include>

*   輸出包含,動態(tài)包含。不會存在java變量沖突的 問題.
動態(tài)包含.png

JSP 9大內(nèi)置(隱含)對象

什么叫內(nèi)置對象:
    可以直接在java腳本中使用。不能在聲明腳本中使用
    是service方法局部變量.
exception   
request     HttpServletRequest
session     HttpSession
application ServletContext

response    HttpServletResponse
page        this    Object  
out         JspWriter   面向瀏覽器的輸出流
config      ServletConfig
            web.xml ------ ServletContext
            filter標簽------FilterConfig
            servlet標簽------ServletConfig
            
pageContext【重點】
    1. 作用域:存儲命名屬性
        pageContext.setAttribute("name",值);
        pageContext.getAttribute("name");
        生命周期: 僅限當前jsp頁面。
    2. 管理其他所有的作用域:
        pageContext
        request
        session
        servletContext(application)
        獲得作用域中的值:
            pageContext.getAttribute(arg0, arg1)
                參數(shù)1: 獲得的命名屬性的名字
                參數(shù)2:    指定的作用域 是一個int類型的數(shù)字  作用域?qū)某A?                        pageContext     1       PageContext.PAGE_SCOPE
                        request         2       PageContext.REQUEST_SCOPE
                        session         3       PageContext.SESSION_SCOPE
                        servletContext  4       PageContext.APPLICATION_SCOPE
            
        向作用域中存儲值
            pageContext.setAttribute(name, Value,作用域?qū)某A?
    3.  管理其他所有jsp內(nèi)置對象。
            獲得request對象
                pageContext.getRequest();
            獲得session對象
                pageContext.getSession();
            獲得application對象(ServletContext)
                pageContext.getServletContext();
        案例:
            動態(tài)獲得  "/項目名"
                HttpServletRequest
                使用request:
                request.getContextPath();
                使用pageContext:
                ((HttpServletRequest)pageContext.getRequest()).getContextPath()

栗子

jsp翻譯規(guī)則.png
:
導入PersonSystemServlet項目,改名字;
左邊---右鍵---import--general--Existing projects in workspace
---brows---項目目錄---勾選 copy projects into workspace
該項目名:
項目名--右鍵--refacter---rename
項目名--右鍵--properties--搜 web--修改 web context root(改為項目名一致)
1.將通訊錄展示所有聯(lián)系人的頁面
該JSP實現(xiàn)。
舊: showAllPersonAction --------->showAllPersonView
調(diào)用service獲得list 獲得request作用域list
list存入request作用域 顯示成一個table
forward
新: showAllPersonAction --------->showAllPersonView.jsp
調(diào)用service獲得list 獲得request作用域list
<%request.getAttribute%>
list存入request作用域 顯示成一個table
forward html嵌套java腳本.

2.完成顯示所有商品功能
    showAllProductAction            showAllProductView.jsp
        調(diào)用service獲得list             獲得request作用域list
        list存入request作用域            顯示成一個table
        forward 
    ProductService:
        public List<Product> getAllProducts();
    ProductDAO
        public List<Product> selectAllProducts();
    實體Product:
    添加JDBCUtil  配置文件     jar包
    建表
    創(chuàng)建web項目

批量刪除

批量刪除.png

EL

expression language 表達式語言
特點: 結(jié)果輸出給瀏覽器

語法:
    java表達式腳本:  <%= java表達式,調(diào)用方法%>
    EL:             ${java表達式}
        訪問語法:   []      .

語法介紹

1.  數(shù)學運算符   +   -   *   /   %
        注意: ${10/3}         3.33333333
2.  邏輯運算符   >   <   >=  <=  !=  ==
                &&  ||  !
3.  三目運算符   booleab表達式?值1:值2

4.  訪問作用域中的值
    訪問pageContext作用域
        ${pageScope.命名屬性的name}
    獲得request作用域中的命名屬性
        ${requestScope.命名屬性的name}               不是 <%=request%>
    獲得session作用域中的值
        ${sessionScope.命名屬性的name}
    獲得servletContext作用域中的值
        ${applicationScope.命名屬性的name}
5.  訪問對象的屬性
        ${對象.屬性名}
            * 原理 調(diào)用對象.get屬性();
            例如:
                ${person.username}
                person.getUsername()                
    獲得  /項目名
    java:   <%=request.getContextPath()%>
            <%=((HttpServletRequest)pageContext.getRequest()).getContextPath()%>
    EL:     ${pageContext.request.contextPath}  【重要】
6.  訪問請求參數(shù)
    ${param.請求參數(shù)的name}
7.  訪問cookie
    ${cookie.cookie的name}
    ${cookie.cookie的name.value} //獲得cookie得到value
8.  訪問數(shù)組和List集合
    ${集合[下標]}
9.  訪問Map
    ${map.key}  //通過map的key獲得value

總結(jié)EL中可以使用的內(nèi)置對象

pageScope requestScope sessionScope applicationScope
pageContext param   cookie
*重點記住:
    1. 不要再JSP寫java代碼
    2. 
        獲得request作用域中的命名屬性
            ${requestScope.命名屬性的name}               
        獲得session作用域中的值
            ${sessionScope.命名屬性的name}

JSTL part I

jsp標簽庫。
作用: 條件判斷,流程控制,循環(huán)。 url生成。
使用:
    1. 導入jstl的jar包
    
    2. 導入jstl
        <%@taglib uri='http://java.sun.com/jsp/jstl/core' prefix=‘c’%>

if: 單條件判斷
    使用:
        <c:if test='boolean表達式結(jié)果'>
            條件成立執(zhí)行。
        </c:if>

choose: 多條件分支
    when
    otherwise
    使用:
        <c:choose>
            <c:when test='條件1'>
                條件1成立
            </c:when>   
            <c:when test='條件2'>
                條件1不成立,條件2成立
            </c:when>
            <c:when test='條件3'>
                條件1,2都不成立,條件3成立
            </c:when>
            <c:otherwise>
                else,條件都不成立
            </c:otherwise>
        </c:choose>

forEach 遍歷集合
    <c:forEach items='list' var='p'>
        ${p}
    </c:forEach>
        var:每次循環(huán)得到的當前元素對象。
        items:被遍歷的集合。
        
        begin:遍歷集合的起始下標
        end:遍歷集合的結(jié)束下標
        step:下標漸變值。步長.
        varStatus:
            varStatus='aa'
                aa.index    下標
                aa.count    被遍歷出來的元素個數(shù)(序號)

JSTL問題

1. jstl標簽屬性中,使用EL表達式,el表達式外不能寫空格.

總結(jié):

JSP開發(fā)
    顯示邏輯代碼
    EL+JSTL(不要出現(xiàn)java代碼)
    EL: ${requestScope}
            ${sessionScope}
            ${對象.屬性名}
    JSTL:
            choose
            forEach

JSTL part II

formatDate:
    使用:
        ① 導入    <%@taglib uri="http://java.sun.com/jsp/jstl/fmt" 
            prefix="fmt" %>
        ② <fmt:formatDate value="" pattern=""/>
            value: 要格式化的日期
            pattern: 日期格式
                    年   yyyy
                    月   MM
                    日   dd
remove
    使用:
        <c:remove var='' scope='' />
        刪除作用域中的值
            var:要刪除的命名屬性的name
            scope:刪除的作用域哪個
                    page        pageContext作用域
                    request     request作用域
                    session     session作用域
                    application ServletContext作用域

url
    使用:
        <c:url value='url-pattern'></c:url>
            1.將url-pattern轉(zhuǎn)換成uri
            2.在cookie被禁用的時候,自動將JESSSIONID追加在url后面
      
    禁用cookie的解決辦法:
        1. 將jsp中所有的超鏈接,表單的action
            <c:url value='url-pattern'></c:url>
        2. 處理servlet中重定向的路徑
            response.encodURL(uri);
            在uri后自動追加 jsessionid的值
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、JSP基礎(chǔ) 1.1什么是JSP JSP(Java ServerPage)是Java服務器端動態(tài)頁面技術(shù)。是su...
    晨星資源閱讀 1,267評論 0 6
  • 1.學習內(nèi)容 JSP技術(shù)入門和常用指令 JSP的內(nèi)置對象&標簽介紹 EL表達式&EL的內(nèi)置對象 2.JSP技術(shù)入門...
    WendyVIV閱讀 2,326評論 1 18
  • 1課程回顧 Jsp基礎(chǔ) 1)Jsp的執(zhí)行過程 tomcat服務器完成:jsp文件->翻譯成java文件->編譯成c...
    守亭翁閱讀 391評論 0 0
  • JSP 基本結(jié)構(gòu)JSP 頁面組成:模板文本(HTML,XML,純文本),JSP 元素;JSP 元素:腳本元素,指令...
    jslancer閱讀 1,077評論 0 11
  • 月華靜淌 長廊深處茗煙清淺 難奈人走茶涼 梨花飄遠 曲巷幽徑寒風蕭瑟 怎奈春意闌珊 凡塵若煙 我舉杯對月空飲 欲攬...
    夏默xl閱讀 688評論 0 9

友情鏈接更多精彩內(nèi)容