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语句他们两个都是支持嵌入的。

 

 

 

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