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%"> 班级:
<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>
...
<c:if test="${requestScope.searchResult==0}">
<h5 align=center>无此数据</h5>
</c:if>
...
</body>
</html>
如上可见,jsp中可以镶嵌java代码。
1.编译器指示(page指令) <%@ 编译器指示 %> ,就是导入包page和标签库taglib ,例如
<%@ taglib uri="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标签库需要引人。
4.程序代码段/小型指令 <% 程序代码片段 %> ,就是在写普通的java代码。
<%!%>里面定义的属性是成员属性,相当于类的属性,方法相当于是全局的方法,相当于是类里面的方法.但是它是不可以进行输出的,因为它只是进行方法的定义和属性的定义。
<%%>这个里面可以进行属性的定义,可以输出内容,但是它不可以进行方法的定义,因为这对标签里面的内容将来是在此jsp被编译为servlet的时候放在了_jspService()方法里面的,这个方法就是服务器向客户端输出内容的地方,它本身就是一个方法,所以如果你在它里面定义方法的话,那么就相当于是在类的方法里面嵌套定义了方法,这在java里面是不允许的。但是你可以在里面定义自己的私有变量,因为方法里面也可以定义变量,也可以调用方法,但是唯独不可以再定义方法了。
<%!%>是用来定义成员变量属性和方法的,<%%>主要是用来输出内容的,因此如果涉及到了成员变量的操作,那么我们就应该使用<!%%>,而如果是涉及到了输出内容的时候,就使用<%%>。
以上在介绍<%%>各种形式的用法时也粗略地讲了一下JSTL这种jsp标准标签库和EL表达式。
大家也看到了,velocity不需要引人什么就能在页面中加入逻辑判断、迭代显示、数据显示,因为它自带了一些标签,jsp需要引人JSTL,所以感觉velocity要比jsp方便一些,但jsp还可以嵌入java代码,会更加灵活,对js语句他们两个都是支持嵌入的。