JSP入門實戰下

第一部分簡單講解:jsp語法的規範,以及三大編譯指令,七個動做指令和九大內置對象,生命週期講解等。這章主要講解el表達式,核心標籤庫。php

所有代碼下載:連接html

1.核心標籤庫(JSTL:c)講解:

1.1簡要介紹:

JSTL全名JspServer Pages Standdard Tag Library(Jsp標準標籤庫),它是sun公司發佈的一個針對JSP開發的新組件,它容許使用標籤開發Jsp頁面.JSTL支持通用的、結構化的任務,好比迭代,條件判斷,XML文檔操做,國際化標籤,SQL標籤。 除了這些,它還提供了一個框架來使用集成JSTL的自定義標籤。
JSTL所提供的標籤庫主要分爲五大類:
09java

1.2JSTL庫安裝:

  1. 從Apache的標準標籤庫中下載的二進包(jakarta-taglibs-standard-current.zip)。下載地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
  2. 將下載的壓縮包解壓,將lib下的兩個jar文件:standard.jar和jstl.jar文件拷貝到Tomcat下lib/目錄下。
  3. 如今就能夠經過在頭部包含 標籤使用JSTL了 web

    1.3核心標籤庫的使用:

    核心標籤是最經常使用的JSTL標籤。如今基本上咱們也之使用功能核心標籤庫,此去只介紹核心標籤,對於其餘的標籤用法相似。
  4. 引用核心標籤庫的語法以下:
<%--導入核心標籤庫 --%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"
  1. 核心標籤庫的介紹:
    10
  2. 演示以下:詳細見註釋
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    import="java.util.*,com.rlovep.entity.Student"
    %> 
<%--導入核心標籤庫 --%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>核心標籤jiangjie</title>
</head>
<body>
<%--使用標籤庫 --%>
<%--set標籤:保存數據到域中,默認保存到pag域中
    var:屬性名
    value:屬性價值,能夠是對象
    scope:範圍
 --%>
<c:set var="name" value="rose" scope="page"></c:set>
<%--out標籤: 相似輸出表達式:<%= %>
    value:顯示的內容;
    default:value爲空時顯示的內容
    escapexml:是否對<等實體符號轉義;
--%>
<%--el表達式輸出,調用屬性 --%>
<c:out value="${name }" default="<h3>標題3</h3>" escapeXml="true"></c:out>
<%--默認值測試,以及輸出特殊字符 --%>
<c:out value="${peace }" default="<h3>標題</h3>" escapeXml="true"></c:out>
<hr/>
<%--remove標籤:刪除數據,默認刪除到pag域中
    var:屬性名
    scope:範圍
 --%>
<c:remove var="name" scope="page"/>
<c:out value="${name }" default="刪除name以後" escapeXml="true"></c:out>
<hr/>
<%--catch標籤:能夠用來取得發生錯誤時的信息,同時能夠進行適當處理.至關於try catch
    var:保存錯誤信息的exception
 --%>
 <c:catch var="e">
 <%
   int a=0,b=10;
    b=b/a;
 %>
 </c:catch>
 <%--輸出錯誤信息 --%>
 <c:out value="${e }"/>
<%-- <%
   int a=0,b=10;
    b=b/a;
 %> --%>
 <hr/>
  <%--
    <c:url>標籤將URL格式化爲一個字符串,而後存儲在一個變量中
    var:變量名。
    value:url
    context:本地的另外一個工程庫
  --%>
  <%--c:param 在重定向時當參數用 --%>
  <c:url var="url" value="el.jsp">
    <c:param name="pass" value="peace"/>
  </c:url>
  <a href="${url }">url重定向</a>
   <c:url var="baidu" value="http://wwww.baidu.com"/>
   <a href="${baidu }">百度</a>
<hr/>
<%--<c:import>標籤:功能相似於<jsp:import>,可是功能更增強大。能夠導入外部jsp文件,和保存到輸入流中
    var:輸出保存到string
    varReader:輸出保存到輸入字符流
    url:包含的頁面
 --%>
 <c:import url="/common/header1.jsp" >
  <c:param name="name" value="sisi"/>
  </c:import>
  <hr/>
 <%--c:redirect 標籤 能夠是絕對地址 
    url:地址
    context:另一個jsp容器
  --%>
<%--  <c:redirect url="el.jsp">
   <c:param name="pass" value="wang"></c:param>
 </c:redirect> --%>
 <%
   Integer score=new Integer(60);
   pageContext.setAttribute("score", score);
 %>
   <%--if標籤 :單條件判斷
     test:判斷是否爲true執行
   --%>
    <c:if test="${!empty score}">
        條件成立
    </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開始,last屬性:最後一個)
           --%>
    <c:forEach items="${list}" var="student" varStatus="varSta">
        序號:
{student.name } - 年齡:${student.age}<br/>

    </c:forEach>
        <hr/>
        <c:forEach items="${map}" var="entry">  
{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" varStatus="status">
        ${s }<br/>
        <c:if test="${status.last }">
        <c:out value="輸出:${status.count}"/>個元素
        </c:if>
    </c:forTokens>
</body>
</html>

2.EL表達式語言:

E L(Expression Language) 目的:爲了使JSP寫起來更加簡單。 EL 提供了在 JSP 腳本編制元素範圍外使用運行時表達式的功能。
EL既能夠用來建立算術表達式也能夠用來建立邏輯表達式。在JSP EL表達式內能夠使用整型數,浮點數,字符串,常量true、false,還有null。
EL使得訪問存儲在JavaBean中的數據變得很是簡單,EL能夠訪問內置對象,以及放置在對象中的屬性;
EL表達式做用: 向瀏覽器輸出域對象中的變量值或表達式計算的結果!!!算法

2.1EL語法:${exper}

  1. 輸出基本數據類型變量:
    不註明域的範圍時,從四個域中獲取:順序爲pageScoep / requestScope / sessionScope / applicationScope
    ${name}<%--從指定域中獲取name變量的值--%>
    指定域獲取:
    ${pageScope.name} <%--等價於getAttribute()方法;--%>
  2. 輸出對象的屬性值
    ${student.name} 等價於 (點相對於調用getXX()方法)
  3. 使用EL獲取集合對象

{list[0].age } <%-- list[0]等價於 (中括號相對於調用get(參數)方法) ((List)pageContext.findAttribute("list")).get(0)--%>apache

  1. el還能夠執行算法表達式
    EL表達式支持大部分Java所提供的算術和邏輯操做符:
    11
    演示以下:
比較運算
     ${10>5 }<br/>
     ${10<5 }<br/>
     ${10!=10 }
     <hr/>
邏輯運算
     ${true && false }<br/>
     ${true || false }<br/>
     ${!false }<br/>
判空
        null 或 空字符串:  empty
     <%
        //String name = "eric";
        //String name = null;
        String name = "";
        pageContext.setAttribute("name",name);
      %>
      判斷null: ${name==null }<br/>
      判斷空字符: ${name=="" }<br/>
     判空:  ${name==null || name=="" }
另外一種判空寫法: ${empty name }

2.2EL高級用法自定義函數:

el表達語言的自定義函數 本質是爲了調用提供一種方法容許el中調用某類的靜態方法:瀏覽器

  1. 自定義函數使用語法:
    ${rlovep:reverse(student.name)}<%--調用reverse方法使傳入的student.name反轉--%>
  2. 開發步驟:
    1.在src創建開發處理類,這個類包含若干個靜態方法。固然這個步驟能夠省掉使用jdk庫的類也是能夠的
    2.使用標籤庫定義函數:定義函數的方式與定義標籤的方式類似。增長function標籤就行;
    3.使用:增長taglib指令
  3. 演示以下
    創建開發處理類: MyFuns.java
public static String reverse(String str)
    {
        return new StringBuffer(str).reverse().toString();
    }
    public static int count(String str)
    {
        return str.length();
    }

在webcontent目錄下創建:mytaglib.tld標籤庫文件,增長function標籤cookie

<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">
    <description>A tag library exercising SimpleTag handlers.</description>
    <!-- 標籤庫的版本 -->
    <tlib-version>1.0</tlib-version>
    <!-- 標籤庫前綴 -->
    <short-name>rlovep</short-name>
     <!-- tld文件的惟一標記 -->
   <uri>http://rlovep.com</uri>
 <!-- 定義第一個方法 -->
   <function>
   <!-- 定義方法名 -->
    <name>reverse</name>
    <!-- 定義方法的處理類 -->
    <function-class>com.rlovep.elmethod.MyFuns</function-class>
    <!-- 定義函數的實現方法:包括返回值和函數名以及參數 -->
    <function-signature>java.lang.String reverse(java.lang.String)</function-signature>
   </function>
    <!-- 定義第二個方法 -->
   <function>
   <!-- 定義方法名 -->
    <name>count</name>
    <!-- 定義方法的處理類 -->
    <function-class>com.rlovep.elmethod.MyFuns</function-class>
    <!-- 定義函數的實現方法:包括返回值和函數名以及參數 -->
    <function-signature>int count(java.lang.String)</function-signature>
   </function>
   </taglib>

增長taglib指令
<%@taglib prefix="rlovep" uri="http://rlovep.com" %>session

2.3總體演示以下:

<%@page import="java.util.HashMap,java.util.Map"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="com.rlovep.entity.Student"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!-- 定義標籤 -->
<%@taglib prefix="rlovep" uri="http://rlovep.com" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>el表達式學習:</title>
</head>
<body>
<%--el的內置對象 --%>
 <%
    pageContext.setAttribute("name", "peace");
    pageContext.setAttribute("age", "22", pageContext.APPLICATION_SCOPE);
 %>
 <%--直接從域中搜索得到屬性 --%>
 El表達式:${name }
 <hr/>
 <%--等價於 --%>
 表達式:<%=pageContext.findAttribute("name") %>
 <hr/>
 <%--從指定域中獲取屬性 --%>
 EL表達式:${applicationScope.age}
 <hr/>
 <%--等價於 --%>
 <%=pageContext.getAttribute("age", pageContext.APPLICATION_SCOPE) %>
 <hr/>
 <%--獲取請求參數 --%>
 請求參數${param.pass}
 <hr/>
<%--請求頭獲取 --%>
請求頭${header.Host}
<%--還能夠得到初始參數:initparam 以及cookie --%>
<hr/>
<%--el輸出對象的屬性 ,必須將對象放入域中--%>
<%
    Student student=new Student("peace",22);
    String a="123";
    //放入域中
   pageContext.setAttribute("student", student);
    //放入list中
    List<Student> list=new ArrayList<Student>();
    list.add(new Student("sisi",22));
    list.add(new Student("nick",20));
    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);
%>
<%--使用el獲取對象值 --%>
{student.age }

 <%--
       ${student.name} 等價於     (點相對於調用getXX()方法)
          <%=((Student)pageContext.findAttribute("student")).getName()%>
       --%>
       <hr/>
       <%--使用EL獲取List對象 --%>
{list[0].age }<br/>

{list[1].age }<br/>
{list[2].age }

       <%--
       list[0]等價於       (中括號相對於調用get(參數)方法)
            ((List)pageContext.findAttribute("list")).get(0)
        --%>
        <hr/>
        <%--使用EL獲取Map對象 --%>       
{map['100'].age }<br/>
{map['101'].age }<br/>
{map['102'].age }<br/>

<%--el還能夠執行算法表達式 --%>
<%--el表達語言的自定義函數 
本質是爲了調用提供一種方法容許el中調用某類的靜態方法:
1.在src創建開發處理類,這個類包含若干個靜態方法。固然這個步驟能夠省掉使用jdk庫的類也是能夠的
2.使用標籤庫定義函數:定義函數的方式與定義標籤的方式類似。增長function標籤就行;
3.增長taglib指令
--%>
此去表達式調用函數:<br/>
peace倒轉:${rlovep:reverse(student.name)}<%--調用reverse方法使傳入的student.name反轉--%>
<br/>
peace字符個數:${rlovep:count(student.name)}
</body>
</html>

來自一條小鯊魚wpeace(rlovep.com)app

相關文章
相關標籤/搜索