Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于简单文本的类似JSP的模板_Java_Jsp_Text Files_Template Engine - Fatal编程技术网

Java 用于简单文本的类似JSP的模板

Java 用于简单文本的类似JSP的模板,java,jsp,text-files,template-engine,Java,Jsp,Text Files,Template Engine,我有一个程序,目前有大量的代码,我想设计出来。这段代码获取大量文本文件,并将其通过一个有趣的书面解释器来生成一个纯文本文件报告,该报告将继续发送到其他系统。理论上,这允许非程序员能够修改报告,而不必了解Java和解释器的内部工作原理。在实践中,任何微小的更改都可能需要进入解释器并对其进行调整(而且特定于领域的语言甚至对其他程序员也不友好) 我想重新设计这个代码。作为一名主要的web程序员,当我想到“非程序员能够修改报告…”时,首先想到的是“非程序员能够修改报告…”,我用网页代替了报告,并对自己说

我有一个程序,目前有大量的代码,我想设计出来。这段代码获取大量文本文件,并将其通过一个有趣的书面解释器来生成一个纯文本文件报告,该报告将继续发送到其他系统。理论上,这允许非程序员能够修改报告,而不必了解Java和解释器的内部工作原理。在实践中,任何微小的更改都可能需要进入解释器并对其进行调整(而且特定于领域的语言甚至对其他程序员也不友好)

我想重新设计这个代码。作为一名主要的web程序员,当我想到“非程序员能够修改报告…”时,首先想到的是“非程序员能够修改报告…”,我用网页代替了报告,并对自己说:“啊哈!Jsp。”这将给我一个很好的方法,你看到的几乎是你所得到的方法,以及taglibs和java脚本(尽管后者可能不受欢迎)而不是笨拙地编写DSL语句

虽然可以使用
jspc
将jsp编译成java(应用程序的另一部分在jboss服务器上运行EJB,因此
jspc
并不遥远),它使用的样板代码尝试将输出连接到servletcontext中的pagecontext。这将涉及诱使代码认为它在web容器中运行(不是不可能的,而是一个kluge),然后删除标题

是否有一种不同的java模板化方法(或库)可用于打印到文本文件?到目前为止,我所看到的每一种方法似乎都是针对web进行优化的,或者是紧密耦合到特定的应用程序服务器(并且是为web工作而设计的).

试一试。它非常简单,并且不假设它是在web应用程序的上下文中运行的


这完全是主观的,但我认为对于非程序员来说,它的语法比JSP和标记库更容易理解。

所以您需要一个精简版的JSP

看看这个(JSTP)是否适合您


如果你想在公司里成为一名真正的踏板设定者,你可以创建一个Grails应用程序来实现这一点,并使用Groovy模板(可能与Quartz插件一起用于调度),如果有很多现有代码需要替换,这可能有点难卖,但我喜欢它

如果你想安全下注,那么(同样出色的)速度必须是:


您可能想要检查,它具有良好的性能(比velocity快2到3倍)和优雅的语法(.net Razor-like),并且是专门为Java程序员设计的

模板,从用户列表中生成以“,”分隔的用户名字符串

@args List<User> users

@for (User user: users) {
   @user.getName() @user_sep
}
使用字符串插值模式调用模板

// pass render args by name
Map<String, Object> renderArgs = ...
String s = Rythm.render("/path/to/my/template.txt", renderArgs);

// or pass render arguments by position
String s = Rythm.render("/path/to/my/template.txt", "arg1", 2, true, ...);
User user = ...;
String s = Rythm.render("Hello @name", user.getName());
public class Address {
   public String unitNo;
   public String streetNo;
   ...
   public String toString() {
      return Rythm.toString("@_.unitNo @_.streetNo @_.street, @_.suburb, @_.state, @_.postCode", this);
   }
}
ToString模式

// pass render args by name
Map<String, Object> renderArgs = ...
String s = Rythm.render("/path/to/my/template.txt", renderArgs);

// or pass render arguments by position
String s = Rythm.render("/path/to/my/template.txt", "arg1", 2, true, ...);
User user = ...;
String s = Rythm.render("Hello @name", user.getName());
public class Address {
   public String unitNo;
   public String streetNo;
   ...
   public String toString() {
      return Rythm.toString("@_.unitNo @_.streetNo @_.street, @_.suburb, @_.state, @_.postCode", this);
   }
}
自动ToString模式(遵循apache commons lang的ReflectionStringBuilder,但速度更快)

文档位于。在GAE上运行的完整演示应用程序:

请注意,演示和文档是为play!Framework的play Ryth插件创建的,但大部分内容也适用于纯Ryth模板引擎

源代码:

  • Ryth模板引擎:
  • 播放Rythm插件:

为了给我自己和未来的读者提供参考,非程序员永远不会编写任何模板。程序员必须做所有事情。此报告是从一个非常大的java应用程序的内部生成的。将其从该应用程序的内部移走不是一个选项。在Grails中,您还可以编写java(不仅仅是Groovy)但我明白你的意思。