jsp學習筆記

  • Servlet不支持HTML語法,生成網(wǎng)頁需要通過response輸出流輸出,導致生成頁面的代碼非常復雜.JSP支持HTML語法,生成HTML頁面比較簡單
  • JSP和Servlet的區(qū)別和關(guān)系?
    • JSP和Servle都是用來動態(tài)生成網(wǎng)頁的
    • Servlet不支持HTML語法,生成網(wǎng)頁麻煩
    • JSP支持HTML語法,生成網(wǎng)頁比較簡單
    • JSP運行時會被翻譯成Servlet再執(zhí)行.所以JSP就是Servlet

jsp腳本元素

  • JSP中的腳本元素
    • 聲明
      • 代碼 : <%! %>
      • 作用 : 聲明的內(nèi)容會被翻譯成Servlet的成員變量, 方法和類 !
    • 表達式
      • 代碼 : <%= %>
      • 作用 : 用于向頁面輸出內(nèi)容,等價于out.print(). 不能在內(nèi)容后面添加";"分號
    • 代碼塊
      • 代碼 : <% %>
      • 作用 : 在其中書寫任意Java代碼.代碼塊可以和html嵌套使用

jsp注釋

  • jsp注釋:jsp的注釋只存在于jsp的源文件里面,在翻譯成servlet的時候就消失了

    <%-- 這是jsp的注釋 --%>
    
  • jsp中的java注釋:和java一樣不解釋
  • html注釋:語法 :
    • 不能阻止java代碼和jsp的運行

jsp指令

  • page指令

    import:用來導入包的

    contentType:相當于response.setContentType();jsp頁面相依的MIME類型

    pageEncoding:設(shè)置的是保存時采用指定的字符編碼集

    errorPage:指定當前的頁面發(fā)生錯誤的時候跳轉(zhuǎn)到指定的頁面

    iserrorPage:設(shè)置某個頁面是錯誤頁面,設(shè)置為true以后,就可以通過exception過去錯誤信息

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
  • include指令(靜態(tài)包含)

    file指定的是要包裹進來的文件,會生成一個java文件

    <%@ include file="index.jsp"  %>
    
  • taglib指令

    導入標簽庫

    uri:命名空間,prefix:命名空間的名字

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

jsp內(nèi)置對象

  • request

    類型:HttpServletRequest 請求對象

  • response

    類型:HttpServletResponse 響應(yīng)對象

  • session

    HttpSession 回話對象

  • application

    ServletContext web應(yīng)用全局唯一對象

  • config

    ServletConfig 初始化數(shù)據(jù)

  • page

    Object 當前jsp生成的servlet對象

    如果一定要使用,需要強制轉(zhuǎn)換成HttpServlet對象

    Servlet有三種數(shù)據(jù)范圍:request,session,servletcontext ,JSP在serlvet三種數(shù)據(jù)范圍基礎(chǔ)上,新增了page數(shù)據(jù)范圍

  • pageContext

    • PageContext 當前jsp上下文
  • 可以向page范圍存取數(shù)據(jù)

    • findAttribute方法會依次在page 、request 、session 、 application 四個數(shù)據(jù)范圍進行數(shù)據(jù)查找.如果找到了就不會往下查找
    • 如果在EL表達式中直接使用 ${name}會調(diào)用findAttribute方法在四個范圍中依次查找數(shù)據(jù)
  • 可以獲得其它八個隱含對象

    • pageContext封裝八個隱含對象的作用:框架編寫,得到PageContext對象 相當于得到 JSP九個內(nèi)置對象
  • exception

    Throwable 當頁面是一個錯誤頁面,可以獲取的對象

  • out

    JspWriter 向輸出流輸出內(nèi)容

jsp動作標簽

  • jsp中6個動作標簽

    <jsp:useBean>:用于在page范圍內(nèi)查找指定名稱的javaBean,如果找不到會創(chuàng)建一個User對象, 然后把這個對象賦值為zhangsan;

    scope:定義那一個數(shù)據(jù)范圍獲取一個JavaBean;

    class:全類名,包名+類名;

    id:聲明的變量名;

    <jsp:useBean id="zhangsan" class="com.luoluo.User" scope="page" />
    

    <jsp:setProperty>:用于在jsp頁面中設(shè)置一個JavaBean屬性 相當于調(diào)用了某屬性的get方法

    name:聲明的變量的名字

    value:屬性值

    property:屬性名

    <jsp:setProperty property="age" name="zhangsan" value="10" />
    

    <jsp:getproperty>:用于在jsp頁面中獲取一個JavaBean屬性 相當于調(diào)用了某屬性的set方法

    <jsp:getproperty property="age" name="zhangsan">
    

    <jsp:include>等價于request.getRequestDispatcher().include() 動態(tài)包含

    jsp:include和@include的區(qū)別

    • @include是JSP指令,屬于靜態(tài)包含.在jsp翻譯為Servlet時完成包含動作,包含的內(nèi)容是目標頁面翻譯為Servlet時的源代碼,最終只會生成一個Servlet
    • jsp:include是JSP標簽,屬于動態(tài)包含.在servlet執(zhí)行時完成包含動作,包含的內(nèi)容是目標jsp翻譯為Servlet生成的HTML頁面,每個被包含的JSP都會生成一個單獨的Servlet,所以最終會生成多個Servlet

    <jsp:forward>等價于request.getRequestDispatcher.forward()

EL表達式

  • 從數(shù)組中獲取數(shù)據(jù)

    ${arr[0]}

  • 從集合中獲取數(shù)據(jù)

    ${list[0]}

  • 從map集合中獲取數(shù)據(jù)

    1. ${map["key"]} 得的值是value
    2. ${map.key} 得的值是value
  • empty運算符

    可以用來判斷一個對象是否為null,還可以判斷是否為空

    ${empty list} //當list為null或size為0的時候,得出的結(jié)果都是true

  • 三元運算符

    ${list == null ? " ": " "}

EL內(nèi)置對象的使用

  • 獲取四個數(shù)據(jù)范圍中的數(shù)據(jù)
    • pageScope
    • requestScope
    • sessionScope
    • applicationScope
  • pageContext : 代表當前jsp上下文.通過該對象可以獲取當前應(yīng)用的路徑${pageContext.request.contextPath },等價于<%=request.getContextPath() %>
  • ${param.name} 等價于 request.getParameter("name")
  • ${paramValues.hobby} 等價于 request.getParameterValues("hobby")
  • ${header.referer} 等價于 request.getHeader("referer")
  • ${headerValues["Accept-Encoding"]} 等價于 request.getHeaders("Accept-Encoding")
  • ${initParam.name} 等價于 getServletContext().getInitParamter("name")
  • cookie隱含對象寫法
    • ${cookie.address.value } : 等于從所有Cookie中找出name為address的Cookie,并將其中的值取出來JSTL標簽庫

核心標簽庫:

  • c:set

    • 保存數(shù)據(jù)到四個數(shù)據(jù)范圍
    <%
      session.setAttribute("address","shenzhen");
    %>
    <!-- scope用于指定數(shù)據(jù)范圍 var:存數(shù)據(jù)的時候?qū)?yīng)的key vlaue:存數(shù)據(jù)的時候?qū)?yīng)的值-->
    <!-- 實現(xiàn)了和上面的一樣的效果,往session里面存值 -->
    <c:set scope="session" var="address" value="shenzhen" />
    
    • 修改四個數(shù)據(jù)范圍中已存在對象的屬性值
    <%
      User user = new User();
      user.setAge(16);
      pageContext.setAttribute("usr",user);
    %>
    <!-- target表示指定的對象 property:要修改的對象的屬性-->
    <c:set target="${usr}" property="age" value="10" />
    
  • c:if

    • 取代頁面if條件判斷
    <%
      int a= 8;
    %>
    
    <c:if test="${a>10}">
      a是大于10的
    </c:if>
    <!-- 如果是else的業(yè)務(wù)邏輯,就用not關(guān)鍵字,里面的條件要用()括起來 -->
    <!-- var就是把判斷語句的結(jié)果存到一個對象中,對象的名字就是var值,scope就是數(shù)據(jù)存儲的范圍 -->
    <c:if test="${not (a>10)}" var="result" scope="page">
      a是小于10的
    </c:if>
    <!-- 這樣就可以取出if里面存儲的值 -->
    ${result}
    
  • c:url

    • 完成URL重寫
    • 結(jié)合從c:param進行中文的編碼
    <!-- context:當前應(yīng)用的路徑 下面的實例的路徑相當于去找 /JSP/jstl/if.jsp 文件 -->
    
    <c:url context="/JSP" scope="" value="/jstl/if.jsp" var="encodeURL">
          <!-- 在客戶端禁用cookie的時候,可以重寫URL的資源的路徑,可以對中文進行轉(zhuǎn)譯 -->
      <c:param name="address">深圳</c:param>
    </c:url>
    <a href="encodeURL">這里會跳轉(zhuǎn)到上面的URL指定的路徑 </a>
    
  • c:foreach

    • 遍歷數(shù)組和集合
    <%
      pageContext.setAttribute("arr",new int[]{1,2,3});
    %>
    <!-- items:指定要遍歷的對象 -->
    <!-- var:遍歷的每一個元素 -->
    <c:foreach items="${arr}" var="a">
      ${a}
    </c:foreach>
    
    • 遍歷map
    <%
      Map map = new HashMap();
      map.put("a","aaa");
      map.put("b","bbb");
      map.put("c","ccc");
      pageContext.setAttribute("map",map)
    %>
    
    <c:foreach items="${map}" var="m">
      ${m.key}==>${m.value}
    </c:foreach>
    
    • foreach特殊的用法
    <!-- 求1到100的和 -->
    
    <!--定義一個初始變量,初始值為0-->
    <c:set var="result" value="0" scope="page" />
    <!--求和-->
    <!-- step:遞增的時候每遞增多少,默認值是1 -->
    <!-- varStatus:獲取當前迭代的狀態(tài) -->
    <c:foreach begin="1" end="100" var="current" >
      <c:set var="result" value="${result+current}" scope="page"></c:set>
    </c:foreach>
    <!--打印值-->
    ${result}
    
  • c:redirect

    <!--context是項目名 value是文件路徑名-->
    <c:redirect context="/JSP" value="/demo1.jsp" ></c:redirect>
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • JSP總結(jié)(經(jīng)典) day1 JSP 定義: 1)Java Server Page, Java EE 組件,本...
    91數(shù)據(jù)閱讀 3,634評論 0 13
  • 1.學習內(nèi)容 JSP技術(shù)入門和常用指令 JSP的內(nèi)置對象&標簽介紹 EL表達式&EL的內(nèi)置對象 2.JSP技術(shù)入門...
    WendyVIV閱讀 2,324評論 1 18
  • JSP頁面元素的構(gòu)成:靜態(tài)內(nèi)容,注釋,聲明,小腳本,表達式,指令。 JSP指令 page指令:通常位于jsp頁面的...
    dev_winner閱讀 688評論 0 0
  • 一、JSP基礎(chǔ) 1.1什么是JSP JSP(Java ServerPage)是Java服務(wù)器端動態(tài)頁面技術(shù)。是su...
    晨星資源閱讀 1,266評論 0 6
  • 一、jsp介紹 jsp作用jsp全稱java server pages(java服務(wù)器頁面),本質(zhì)是一個servl...
    圣賢與無賴閱讀 1,391評論 0 14

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