jsp和velocity的區別

jsp和velocity都是模板引擎,jsp可以在頁面代碼裏增加java代碼,雖然這樣可讀性很差,但有時候是很方便。

velocity不支持java代碼,但有特定的標籤表達式。

velocity代碼展示:

...

  <legend>信用貸</legend>
#if($applyVO.site == "ALIPAY")<p class="apply-tip">請確認以下法定代表人信息</p>#end
                            <div class="ui-form-item">
                                <label for="" class="ui-label">申請額度:</label>
                                <input autocomplete="off" class="ui-input" type="text" id="J_MoneyInput" name="$creditFormGroup.amount.key" value="$!amountInteger" max-length="3"data-rules="{regexp : /^\d{1,3}$/,max:[100,'申貸額度2-100萬'],min:[2,'申貸額度2-100萬']}" data-messages="{regexp:'請輸入整數,申貸額度2-100萬'}" >
                            #if("$!creditFormGroup.amount.value"!="")
                                    #set($amountInteger = $numberUtil.intValueFromDoubleString($!creditFormGroup.amount.value))
                                #end
                                <p class="ui-form-unit"><span>萬元</span></p>
                                <p class="ui-form-explain" id="J_Money"></p>
                            </div>

    <div class="ui-form-item">
                                <label for="" class="ui-label">貸款用途:</label>
                                <select class="ui-input bui-form-field" name="$!creditFormGroup.loanPurpose.key" id ="loanPurpose">
#foreach($loanPurpose in $loanPurposes)
<option value="$!loanPurpose.code">$!loanPurpose.desc</option>
#end
</select>
                            </div>

...

velocity有自己的標籤:#if()...#else(#else if)...#end、#set()、#foreach()...#end,頁面中數據的顯示可以使用"$"或者"$!",如"$!userName"。

jsp代碼展示:

 

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    ...
  </head>
  <body>
  <form action="work.do?method=search" method="post">
      <table border="1" align="center" width="50%"> 班級:http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    ...
  </head>
  <body>
  <form action="work.do?method=search" method="post">
      <table border="1" align="center" width="50%"> 班級:
            <select name="student.s_class">
                 <option value="0">全部</option>
                 <c:forEach var="T_class" items="${requestScope.tClassList}">
                 	<option value="${T_class.c_no}"> ${T_class.c_name}</option>
                 </c:forEach>
    	    </select>
    <input type="submit" value="提交">
   </table>
  </form>	<option value="${T_class.c_no}"> ${T_class.c_name}</option>
                 </c:forEach>
    	    </select>
    <input type="submit" value="提交">
   </table>
  </form>
...
  <c:if test="${requestScope.searchResult==0}">
  <h5 align=center>無此數據</h5>
  </c:if>
...
  </body>
</html>
如上可見,jsp中可以鑲嵌java代碼。
1.編譯器指示(page指令) <%@ 編譯器指示 %> ,就是導入包page和標籤庫taglib ,例如page指令) <%@ 編譯器指示 %> ,就是導入包page和標籤庫taglib ,例如
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>,引人了JSTL標籤庫才能使用<c:forEach>、<c:if>這些標籤,http://java.sun.com/jsp/jstl/core" prefix="c"%>,引人了JSTL標籤庫才能使用<c:forEach>、<c:if>這些標籤,
說白了JSTL標籤常用來實現網頁的邏輯判斷和迭代顯示的。

2.聲明 <%! 聲明 %>,通常裏面定義一些java的變量和方法。

3.表達式 <%= 表達式 %> ,等同於EL表達式,
EL的語法:${ EL exprission } ${ bean.name } 或 ${ bean['name'] },例如上面jsp代碼就是使用了EL表達式沒有使用<%= %> ,<%= %> ,
如:${T_class.c_name},說白了,EL是用來顯示數據的,而且EL表達式是不需要引入什麼東西的,不像JSTL標籤庫需要引人。${T_class.c_name},說白了,EL是用來顯示數據的,而且EL表達式是不需要引入什麼東西的,不像JSTL標籤庫需要引人。

4.程序代碼段/小型指令 <% 程序代碼片段 %> ,就是在寫普通的java代碼。

<%!%>裏面定義的屬性是成員屬性,相當於類的屬性,方法相當於是全局的方法,相當於是類裏面的方法.但是它是不可以進行輸出的,因爲它只是進行方法的定義和屬性的定義。
<%%>這個裏面可以進行屬性的定義,可以輸出內容,但是它不可以進行方法的定義,因爲這對標籤裏面的內容將來是在此jsp被編譯爲servlet的時候放在了_jspService()方法裏面的,這個方法就是服務器向客戶端輸出內容的地方,它本身就是一個方法,所以如果你在它裏面定義方法的話,那麼就相當於是在類的方法裏面嵌套定義了方法,這在java裏面是不允許的。但是你可以在裏面定義自己的私有變量,因爲方法裏面也可以定義變量,也可以調用方法,但是唯獨不可以再定義方法了。
<%!%>是用來定義成員變量屬性和方法的,<%%>主要是用來輸出內容的,因此如果涉及到了成員變量的操作,那麼我們就應該使用<!%%>,而如果是涉及到了輸出內容的時候,就使用<%%>。

<%%>這個裏面可以進行屬性的定義,可以輸出內容,但是它不可以進行方法的定義,因爲這對標籤裏面的內容將來是在此jsp被編譯爲servlet的時候放在了_jspService()方法裏面的,這個方法就是服務器向客戶端輸出內容的地方,它本身就是一個方法,所以如果你在它裏面定義方法的話,那麼就相當於是在類的方法裏面嵌套定義了方法,這在java裏面是不允許的。但是你可以在裏面定義自己的私有變量,因爲方法裏面也可以定義變量,也可以調用方法,但是唯獨不可以再定義方法了。
<%!%>是用來定義成員變量屬性和方法的,<%%>主要是用來輸出內容的,因此如果涉及到了成員變量的操作,那麼我們就應該使用<!%%>,而如果是涉及到了輸出內容的時候,就使用<%%>。

 
以上在介紹<%%>各種形式的用法時也粗略地講了一下JSTL這種jsp標準標籤庫和EL表達式。
大家也看到了,velocity不需要引人什麼就能在頁面中加入邏輯判斷、迭代顯示、數據顯示,因爲它自帶了一些標籤,jsp需要引人JSTL,所以感覺velocity要比jsp方便一些,但jsp還可以嵌入java代碼,會更加靈活,對js語句他們兩個都是支持嵌入的。velocity不需要引人什麼就能在頁面中加入邏輯判斷、迭代顯示、數據顯示,因爲它自帶了一些標籤,jsp需要引人JSTL,所以感覺velocity要比jsp方便一些,但jsp還可以嵌入java代碼,會更加靈活,對js語句他們兩個都是支持嵌入的。

 

 

 

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