2018年9月19日
今天學完了EL表達式與jstl的基礎內容。
1.說一說EL表達式
在開始之前,我想說一些自己的想法。每當我對Web這樣一個東西有了新的認知的時候,總會有一些問題冒出來,它使我思考這些問題為什么存在,也使我好奇如何解決。而我們的前輩往往使用一些有意思的東西來解決它,使那些內容在抽象上更加深層次。
回到話題里,在我還在學習Jsp的時候,我會在Html里去寫那些無深度無思考的Java代碼,有時候一段代碼被我復制修改很多次,而每一次我都會對所寫的代碼有所懷疑,因為它們從來不“面向對象”,也不“高內聚低耦合”,而EL表達式與后面要說的Jstl解決了這個問題——Html與Java的分離。
這里我又要提到Jquery與JavaScript,事實上前輩們也和我一樣痛恨著Element.document.getElementById()這樣的代碼。EL表達式與Jstl也是一樣,前人的智慧在今天為我們帶來了無數(shù)的便利。
1.1EL表達式簡化了Jsp中的Java代碼
EL表達式簡化了許多Jsp中的Java代碼,在過去,我們往往使用Request,Session,Application等等方式來存儲一些變量,而后又要使用幾乎相同的方式取出來,在就使得好不容將JavaScript,Css,Html分離的前端代碼又變的臃腫起來。因此在EL表達式中,我們使用一個簡短的${}來獲取變量,當然,根據作用的不同,我們也可以獲取到不同作用域中的指定變量。
< %=request. getParameter(“username”)% > 等價于 ${ param. username }不僅僅是這樣,它還人性化的為我們就null作出了處理。
EL表達式提供了.與[]兩種運算符來獲取元素的屬性和方法,需要注意的是如果該元素的屬性中含有短橫線-那么就不可以使用.運算法了。
值得注意的是,如果要使Jsp頁面支持EL語法,則需要在頁面開始聲明如下內容
<%@ page isELIgnored="true" %>
2.Jstl表達式
如果說EL是前輩對于問題的解決方式策略,那么Jstl就是對解決方式的衍生了。Jstl譯為Jsp標準標簽庫,就像EL表達式簡化了內置對象的使用,Jstl簡化了Jsp中的Java代碼
在Jstl中,有大量的標簽替代了原有的臃腫的代碼,使得Html不那么臃腫,并且十分具備可讀性。更重要的是,這種高語義化的語法本身就極度簡化了Jsp的開發(fā)效率。
//<c:out>標簽用于做標準輸出,配合EL表達式可以輸出變量
<c:out value="this is our first JSTL demo"></c:out>
<c:out value="${1*2}"></c:out>
<%String str="helloworld";request.setAttribute("str",str); %>
<c:out value="${str1}" default="error"></c:out>
<c:out value="<out標簽>" escapeXml="flase"></c:out>
//<c:set>如書面表達一樣,可以對類對象,作用于類變量等進行操作
<c:set scope="session" var="day" value="today"></c:set>
<c:out value="${day}"></c:out>
<c:set target="${std}" property="name" value="hhhh"></c:set>
<c:out value="${std.name}"></c:out>
//<c:remove>標簽可以刪除一個變量
<c:set var="two" value="two"></c:set>
<c:remove var="two"/>
<c:out value="${two}"></c:out>
//<c:catch>標簽可以捕獲異常,var屬性用于存儲異常信息
<c:catch var="error_info">
<c:set target="${aa}" property="name" value="123"></c:set>
</c:catch>
<c:out value="${error_info}"></c:out>
//以下內容中,使用了<c:choose>與<c:when>,<c:otherwise>標簽。前者是后面兩個的父容器,后面兩者類似于Switch-case
<form action="FirstDemo.jsp" method="post">
<input type="text" name="score" value="${param.score}">
<input type="submit">
</form>
<c:choose>
<c:when test="${param.score>=90 && param.score<=100}">
<c:out value="優(yōu)秀"></c:out>
</c:when>
......
<c:otherwise>
<c:out value="您輸入的有誤"></c:out>
</c:otherwise>
</c:choose>
//<c:forEach>標簽:遍歷
<%
List<String> Music=new ArrayList<String>();
Music.add("Hip-Pop");
......
request.setAttribute("Music",Music);
%>
<c:forEach var="music" begin="1" end="3" items="${Music}">
<c:out value="${music }"></c:out><br>
</c:forEach>
//<c:forTokens>標簽可以分割字符串,以下屬性分別是,要操作的字符串,分隔符,分割后的字符串存儲變量,起始位置,結束位置。
<c:forTokens items="001-222-333-333" delims="-" var="num" begin="0" end="3">
<c:out value="${num }"></c:out><br>
</c:forTokens>
常用的Jstl標簽就到此基本都在上面了,目前需要使用這樣一種新的語法去替代已有的思想確實需要一些時間,而后打算再去接觸自定義Jsp標簽。
反思
自從我開始自學,一直有很多東西在困擾著我。一方面我學習一些編程思想,比如Java中的多態(tài),比如JavaBeans,Css掛鉤等。另一方面,在我的開發(fā)過程中,我始終沒有辦法寫出漂亮的,令自己滿意的代碼。我了解過大概在2004年,我們的前輩察覺到Web中的種種問題,開發(fā)出了優(yōu)秀的Struts框架。這使我不得不反思的問題有兩點。第一是,我現(xiàn)在所接觸到,思考的東西已經是十四年前的產物了。而更重要的確實第二點,正是因為有了這些困惑與思考,我們的技術正在不斷的發(fā)展,不斷的更新,而其最直接的收益就是我們的編譯思想在不斷進步,我們的開發(fā)在不斷的"簡化"。我想大概沒有哪個個行業(yè)在沒有了這樣敬業(yè)的前輩之后,還能得以前行的吧。