您的位置:首页 > Web前端 > JavaScript

jsp和velocity的区别

2016-03-24 17:22 190 查看
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语句他们两个都是支持嵌入的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: