JET(Java Emitter Templates)一种语法和思想都和jsp非常相似的代码生成模板技术。他是EMF代码生成中使用的技术。模板技术的思想都是描述某个东东的大体样子,然后加上一些参数和条件控制语句来生成目标的的东东。JET在.jetXx文件中定义要生成代码的结构,然后编译生成java文件,使用生成java代码来输出目标的代码。(其中Xx代表要生成代码的文件类型,例如像生成java代码则后缀名为.jetjava)这个过程和jsp非常相似,jsp相当于.jetXxx,而jsp编译成的servlet则和.jetXxx模板编译生成的java文件一样。.jet和jsp类似也有隐含变量:argument, stringBuffer,它代表输入参数。
下面看一个例子来说明这个过程:
我们定义能够生成一个像别人问好,而这个人可以参数话来定制:
首先创建一个java工程,然后New > Other... > Java Emitter Templates > Convert Projects to JET Projects,就转化成jet project了,然后生成了template文件夹,在里面来写模板(.jetXx)和骨架(.skeleton)。
<%@ jet package="hello" class="GreetingTemplate" %>
Hello, <%=argument%>!
当我们保存完整个模板的时候,我们发现在hello包中,自动translate成一个GreetingTemplate类:
package hello;
public class TranslationDemoTemplate
{
protected final String NL = System.getProperties().getProperty("line.separator");
protected final String TEXT_1 = "Hello, ";
protected final String TEXT_2 = "!";
public String generate(Object argument)
{
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(TEXT_1);
stringBuffer.append(argument);
stringBuffer.append(TEXT_2);
return stringBuffer.toString();
}
}
我们发现这个思想和实现方法完全jsp相同,jsp是生成一大堆的out.println
我们在模版中加上一句:
<%@ jet package="hello" class="TranslationDemoTemplate" %>
Hello, <%=argument%>!
<% stringBuffer.append("Hello again!"); %>
结果翻译成jav类的代码在
<b>stringBuffer.append(TEXT_2);</b>
后面多了一个
<b>stringBuffer.append("Hello again!");</b>
然而这个翻译的过程可以被定制,默认的翻译过程使用了骨架:
public class CLASS
{
public String generate(Object argument)
{
return "";
}
}
我们可以通过这个骨架来定制生成的代码,如:我们希望生成的代码继承接口
public interface IGenerator {
String generate(Object argument);
}
那么只需要改变一下这个骨架:
在template文件夹中建一个generator.skeleton文件,代码如下:
public class CLASS implements IGenerator
{
/* (non-javadoc)
* @see IGenerator#generate(Object)
*/
public String generate(Object argument)
{
return "";
}
}
然后再模板中指定这个skeleton="generator.skeleton"
<%@ jet package="hello" class="GreetingTemplate" skeleton="generator.skeleton" %>
Hello, <%=argument%>!
The current time is <%=new java.util.Date()%>.
然后生成的代码如下:
package hello;
public class GreetingTemplate implements IGenerator
{
protected final String NL = System.getProperties().getProperty("line.separator");
protected final String TEXT_1 = "Hello, ";
protected final String TEXT_2 = "!" + NL + "The current time is ";
protected final String TEXT_3 = ".";
protected final String TEXT_4 = NL;
/* (non-javadoc)
* @see IGenerator#generate(Object)
*/
public String generate(Object argument)
{
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(TEXT_1);
stringBuffer.append(argument);
stringBuffer.append(TEXT_2);
stringBuffer.append(new java.util.Date());
stringBuffer.append(TEXT_3);
stringBuffer.append(TEXT_4);
return stringBuffer.toString();
}
}
jet可以同时用startTag和endTag来指明模板使用scriptlet, expression, or include directive开始和结束,这个对于生成jsp代码很有用:
<%@ jet package="tags.demo" class="JspTemplate" startTag="<$" endTag="$>" %>
<$ String paramName = (String) argument; /* This is an executed scriptlet */ $>
<$ if (paramName != null) { $>
<%= request.getParameter("<$=paramName$>") %> <!-- this is generated JSP -->
<$ } $>
生成的代码为:
<%= request.getParameter("button") %> <!-- this is generated JSP -->
jet可以向jsp一样使用<%@ include file="copyright.inc" %>来导入一段公用的模板。
jet可以使用条件控制scriptlet和内置的标签和jsp一样的<c:if><c:get>等
<% if (Calendar.getInstance().get(Calendar.AM_PM) == Calendar.AM) {%>
Good Morning
<% } else { %>
Good Afternoon
<% } %>
分享到:
相关推荐
标题中的“Jet标签自动生成代码”指的是在软件开发过程中,使用Eclipse插件JET(Java Emitter Templates)来自动化生成代码的过程。JET是一种模板引擎,它允许开发者通过定义模板来生成源代码,以此提高开发效率并...
### Eclipse EMF JET 自动代码生成技术入门详解 #### 一、引言 随着软件开发项目的日益复杂,代码重复利用率的问题越来越突出。为了解决这一问题,许多开发者开始采用自动代码生成技术来提高开发效率并减少人为错误...
2. **代码自动完成**:为常见的JET关键字和模型元素提供了自动补全功能,提高开发效率。 3. **错误检查和警告**:集成的验证机制可以在编写过程中即时发现并标记潜在的错误,帮助开发者及时修复问题。 4. **模板...
二是自动组卷模块,根据教师或系统的设定条件,自动生成满足要求的试卷。 #### 三、关键技术介绍 ##### 3.1 Visual Basic (VB) 语言简介 Visual Basic 是一种面向对象的编程语言,由微软公司开发。它以其简单易学...
- **算法设计**:采用随机数生成技术结合筛选条件实现随机出题。 - **性能优化**:通过缓存技术减少数据库访问次数,提高出题速度。 ##### 3.3 用户界面设计 - **控件选择**:根据功能需求选择合适的控件,如Label...
通过这样的过程,我们可以构建一个自动化工具,使得从Excel到Access的大规模数据迁移变得高效且可控。这个工具的实用性在于减少了手动操作的时间和错误,提升了数据处理的效率。 总的来说,"源代码-ExcelToAccess...
除了基础功能外,自动组卷系统还可以进一步拓展,如增加智能推荐题目的功能,引入AI技术提高组卷质量;支持多用户协作,实现资源共享;开发移动端应用,方便教师随时随地出卷。 综上所述,“VB+ACCESS自动组卷系统...
VB(Visual Basic)是微软公司开发的一种面向...这个VB+ACCESS自动组卷系统项目,通过源代码的学习,开发者不仅可以深入理解VB和ACCESS的集成应用,还能了解到数据库驱动的应用程序设计,对提高软件开发技能大有裨益。
综上所述,这个"ASP实用技术-网络数据库应用系统设计"的源代码涵盖了ASP与数据库交互的多个关键方面,是学习和理解ASP开发动态数据库应用的宝贵资源。通过深入研究这些代码,开发者不仅可以掌握ASP的基本语法,还能...
Java编程语言以其跨平台的特性深受开发者喜爱,但有时我们需要将Java程序打包成Windows系统可直接执行的....这个过程涉及到Java编程、图形渲染、打包工具使用以及用户体验的考量,是学习Java技术与应用的一个有趣实践。
一旦模型被定义,EMF就可以根据模型自动生成相应的Java代码,包括模型类、工厂、资源、序列化器等。这些生成的代码可以用于存储、加载和操作模型实例。 #### 三、EMF代码生成 EMF提供了强大的代码生成能力,能够...
在VB(Visual Basic)编程环境中,批量打印Access数据库中的数据是一项常见的需求,特别是在处理大量记录时,例如报表生成、数据分析等场景。以下是对这个主题的详细解析: 标题"vb批量打印access数据库中的数据源...
6. **报表生成**:通过Access的报表功能,自动生成各种统计报告,如班级平均分、优秀率等。 7. **源代码与论文**:提供的源代码可以帮助学习者理解ASP与数据库交互的实现细节,论文则可能阐述系统的架构设计、功能...
图书管理系统是一种常见的信息化解决方案,用于自动化图书的借阅、归还、查询等流程。基于ASP的图书管理系统主要包含以下几个核心模块: 1. **用户管理**:包括用户注册、登录、个人信息管理等功能,通常会涉及...
6. 报表和统计:自动生成各类报表,如考生名单、考试成绩汇总、排名等。 答辩PPT通常会包含系统设计的目标、背景分析、技术选型原因、系统架构、功能模块详解、实现过程、性能测试结果以及系统的优势和局限性等内容...
【ASP+ACCESS在线考试系统设计】是一个典型的Web应用程序开发案例,它结合了ASP(Active Server Pages)编程技术和Microsoft Access数据库管理系统的应用。该系统的主要目标是实现一个方便、高效的在线考试平台,...
ASP.NET是一种基于微软.NET框架的服务器端脚本环境,它专为Web应用程序设计,用于生成动态网页。在本项目中,“ASP+ACCESS美食网站”是一个使用ASP技术与Microsoft Access数据库结合构建的在线美食信息平台。这个...
- 报表生成模块:自动生成库存统计报告,方便数据分析。 - 权限控制:根据用户角色分配不同操作权限。 6. 实用价值: 这样的系统可以帮助企业管理库存,减少库存错误,提高效率,同时提供实时库存信息,以便于...
- Excelsior JET是一款商业的Java AOT(Ahead-of-Time)编译器,它可以将Java代码编译为原生机器代码,从而生成.exe文件。 - 使用AOT编译,程序运行速度更快,且不需要JVM。 6. **注意事项**: - 打包为.exe可能...
ASPACCESS期刊稿件处理系统是一个基于ASP技术和ACCESS数据库的在线稿件管理系统,主要应用于学术期刊的稿件收稿、审稿、编辑和发布流程。该系统旨在提高稿件处理效率,规范工作流程,便于作者、编辑和审稿人之间的...