java web--EL技術與JSTL技術簡介

  爲了更方便、便捷的在頁面中輸入和操作動態數據,jsp引入了表達式語言(EL)和jsp標準標籤庫(JSTL)技術。兩者在jsp2.0版本以上都作爲標準被支持。

目錄

一、EL技術

  1.EL的作用

  2.EL語法

  (1)EL的語法形式

  (2)EL內部對象

  (3)存取運算符

  (4)EL運算符

  3.EL調用實例

二、JSTL技術

  1.JSTL簡介

  2.常用的JSTL標籤

(1):用於在jsp頁面中顯示數據

(2):用於保存數據

(3):用於刪除數據

(4):單條件標籤

(5):多分枝標籤

(6):循環標籤

  3.JSTL標準函數

  4.JSTL實例--使用EL和JSTL顯示查詢結果


一、EL技術

  1.EL的作用

    jsp頁面中輸出動態信息有三種方法。

    ①jsp內置對象out:例如,<% out.println("這是一篇技術介紹博客");%>

    ②jsp表達式:例如,<%=new Date()%>

    ③表達式語言:例如,${user.id}

    EL表達式的作用就是在jsp頁面中輸出動態信息

  2.EL語法

  (1)EL的語法形式

    所有的EL都是以“${”開始,以“}”結束的。

例如:
   ${user.name}
   功能:在頁面上顯示錶達式user.name的值

   如果EL表達式不指定範圍,那麼表達式會依次在page、request、session、application範圍中查找。若中途找到user.name,就返回其值,不在繼續找;但若在全部範圍中內有找到,就返回null。

  如果要指定範圍,就需要加上特定的前綴

page範圍:${pageScope.user.name}
request範圍:${requestScope.user.name}
response範圍:${responseScope.user.name}
session範圍:${sessionScope.user.name}

  在web程序設計時,對jsp頁面常用EL代替腳本代碼顯示輸出內容。

  (2)EL內部對象

    EL提供了11個可直接使用的內部對象。

EL內部對象
類別 對象 描述
jsp pageContent 獲取當前jsp頁面的信息,可訪問jsp的8個內置對象
作用域 pageScope 獲取page範圍的屬性值
requestScope 獲取request範圍的屬性值
sessionScope 獲取response範圍的屬性值
applicationScope 獲取application範圍的屬性值
請求參數 param 獲取單個指定請求參數的值
paramValues 獲取請求參數的所有請求參數的值數組
請求頭 header 獲取單個指定請求頭信息的值
headerValues 獲取請求頭信息的所有請求頭的值數組
Cookie cookie 獲取request中的Cookie集
初始化參數 initParam 獲取初始化參數值

  (3)存取運算符

    EL表達式是由EL的有關運算符構成的式子,主要運算符有:存取數據運算符以及表達式求值運算符。

    在EL中,對數據值的存取是通過"[]"或"."實現的。

${user.name}或${user["name"]}或${user[name]}
  "[]"主要用於訪問數組、列表或其他集合對象的屬性
  "."主要用於訪問對象的屬性

  (4)EL運算符

    EL支持的運算符和java語言運算符類似,分爲算數運算符、關係運算符、邏輯運算符和特殊運算符。唯一不同的是EL中的一個特殊運算符empty--用以判斷是否爲空。

    EL提供自動類型轉換的功能,能夠按照一定的規則將操作數或結果轉換成指定的類型。

  3.EL調用實例

    調用並顯示javabean中的信息

package bean;

public class javabean {
  private int id;
  private String name;
  private String sex;
public javabean() {
	super();
	id=1;
	name="張三";
	sex="男";
}
public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public String getSex() {
	return sex;
}
public void setSex(String sex) {
	this.sex = sex;
}
  
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@page import="bean.javabean" %>
<!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>調用javabean</title>
</head>
<body>
<jsp:useBean id="javabean" class="bean.javabean" scope="session"></jsp:useBean>
<%
int BId=javabean.getId();
javabean.setId(2);
String Name=javabean.getName();
javabean.setName("李四");
%>
<p>展示信息</p>
<hr>
學號:${javabean.id}<br>
姓名:${javabean.name}<br>
性別:${javabean.sex}<br>
</body>
</html>

二、JSTL技術

  1.JSTL簡介

    JSTL是jsp標準標籤庫,使用JSTL中的標籤可以提高開發效率,減少jsp頁面中的代碼數量,保持頁面的簡潔性和良好的可讀性、可維護性。

    JSTL專門提供了一套支持Jar包,JST標籤按功能分爲5類。

JSTL標籤庫
功能類型 uri prefix 庫功能
核心庫

http://java.sun.com/jsp/jstl/core

c 操作範圍變量、流程控制、url生成和操作
XML處理 http://java.sun.com/jsp/jstl/xml x 操作通過xml表示的數據
格式化 http://java.sun.com/jsp/jstl/fmt fmt 數字及日期數據格式化、頁面國際化
數據庫存取 http://java.sun.com/jsp/jstl/sql sql 操作關係數據庫
函數 http://java.sun.com/jsp/jstl/functions fn 字符串處理函數

    表中的統一資源標識符(URI)表示標籤的位置,perfix是使用標籤時用到的前綴。在web程序中使用JSTL標籤,必須首先下載支持Jar包(javax.servlet.jsp.jstl.jar和jstl-impl-1.2.2.jar),然後部署到工程中。

    在jsp頁面中添加taglib指令,從而使該頁面使用到添加的標籤:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

  2.常用的JSTL標籤

(1)<c:out>:用於在jsp頁面中顯示數據

<c:out value="${user.id}" default="null"/>

    value屬性:輸出的信息,可以使EL表達式或常量;default屬性:可選項,當value值爲空時顯示的信息,上述例子顯示null。  

(2)<c:set>:用於保存數據

<c:set target="" value="" var="" property="" scope=""/>

    value屬性:可選項,要保留的信息;target屬性:可選性,需要修改屬性的變量名;property屬性:可選項,需要修改的javabean屬性;var屬性:可選項,需要保存的信息的變量;scope屬性:可選項,保存信息的變量範圍。

(3)<c:remove>:用於刪除數據

<c:remove var="" scope=""/>

    var屬性:要刪除的變量;scope屬性:可選項,被刪除變量的範圍(page、request、response、application)

(4)<c:if>:單條件標籤

<c:if test="test-condition">
    body content
</c:if>

    test屬性:需要評價的條件,條件需要自己定義;var屬性:可選項,需要保存的信息的變量;scope屬性:可選項,保存信息的變量範圍。

(5)<c:choose>:多分枝標籤

    <c:choose>用於多選擇情況,與<c:when>、  <c:otherwise>配合使用。<c:when>有一個屬性test,由於指明判定條件。

<c:choose>
  <c:when test="condition1">
    相關語句
  </c:when>
  其他條件語句
  <c:otherwise>
    相關語句
  </c:otherwise>
</c:choose>

(6)<c:forEach>:循環標籤

    格式1:

<c:forEach var="" varStatus="" begin="" end="" step="">
    循環內容
</c:forEach>

    格式2:

<c:forEach var="" varStatus="" items="">
    循環內容
</c:forEach>

    其中,items屬性:進行循環的項目;var屬性:代表當前項目的變量名;begin屬性:開始條件;end屬性:結束條件;step屬性:步長;vatStatus屬性:顯示循環變量的狀態。

  3.JSTL標準函數

    調用函數前,需要在jsp中引入標準函數聲明。

http://java.sun.com/jsp/jstl/functions
JSTL標準函數
函數名 函數說明
fn:contains() 測試輸入的字符串是否包含指定的子串
fn:containsIgnoreCase() 測試輸入的字符串是否包含指定的子串,大小寫不敏感
fn:endsWith() 測試輸入的字符串是否以指定的後綴結尾
fn:escapeXml() 跳過可以作爲XML標記的字符
fn:indexOf() 返回指定字符串在輸入字符串中出現的位置
fn:join() 將數組中的元素合成一個字符串然後輸出
fn:length() 返回字符串長度
fn:replace() 將輸入字符串中指定的位置替換爲指定的字符串然後返回
fn:split() 將字符串用指定的分隔符分隔然後組成一個子字符串數組並返回
fn:startsWith() 測試輸入字符串是否以指定的前綴開始
fn:substring() 返回字符串的子集
fn:substringAfter() 返回字符串在指定子串之後的子集
fn:substringBefore() 返回字符串在指定子串之前的子集
fn:toLowerCase() 將字符串中的字符轉爲小寫
fn:toUpperCase() 將字符串中的字符轉爲大寫
fn:trim() 移除首位的空白符

  4.JSTL實例--使用EL和JSTL顯示查詢結果

package bean;

public class javabean {
  private int id;
  private String name;
  private String sex;
public javabean() {
	super();
	// TODO Auto-generated constructor stub
}
public javabean(int id, String name, String sex) {
	super();
	this.id = id;
	this.name = name;
	this.sex = sex;
}
public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public String getSex() {
	return sex;
}
public void setSex(String sex) {
	this.sex = sex;
}
  
}
package bean;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class jieshou
 */
@WebServlet("/jieshou")
public class jieshou extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public jieshou() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		List<javabean> studentlist=new ArrayList<javabean>();
		studentlist.add(new javabean(1,"張三","男"));
		studentlist.add(new javabean(2,"李四","女"));
		studentlist.add(new javabean(3,"王五","男"));
		request.setAttribute("result", studentlist);
		request.getRequestDispatcher("beanEL.jsp").forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@page import="bean.javabean,java.util.*" %>
            <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!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>調用servlet</title>
</head>
<body>
<p>通過EL和JSTL顯示結果</p>
<hr>
<table>
<tr><th>學號</th><th>姓名</th><th>性別</th></tr>
<c:forEach var="javabean" items="${result }">
<tr><td>${javabean.id}</td>
<td>${javabean.name}</td>
<td>${javabean.sex}</td></tr>
</c:forEach>
</table>
</body>
</html>

 

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