除了JSP之外,哪些Web框架,HTML模板语言提供编译时绑定



我知道JSP符合这个描述,但我正在寻找更现代的替代方案。

不幸的是,似乎大多数现代语言和框架都是动态类型的,即使是基于 Java 的语言和框架。

相关问题(JSP是这里唯一的答案):是否有任何用于JVM的Web框架,在编译时检查了数据绑定?

这是一个相当古老的问题,但我有一个答案,因为我已经实现了静态胡子库来提供基于 mustache 语法的类型安全模板引擎。

它在编译时检查语法错误和类型错误(如缺少属性)。它需要零构建配置,因为它是标准注释处理器。

模板

仍然是纯胡子模板,其中包含从用于渲染的普通 Java 类中提取的所有类型信息。

首先,JSP在Java企业版的2.1版本上;换句话说,它比大多数语言更现代。

现在,如果想要获得高科技,那么在编译时使用java.lang.instrument自己检查所有bean的类型怎么样? 扫描您的映射和(您选择的任何语言)模板,并逐个检查字段名称 = 某某类型。 http://docs.oracle.com/javase/7/docs/api/java/lang/instrument/package-summary.html

我必须提前道歉,因为我不太明白这个问题,但是......我扔掉我使用过和喜欢的 2 个模板引擎名称,也许他们会满足您的需求。

灰尘

胡子

这是一个有趣的问题。我假设从数据库中存储和检索的数据需要静态类型检查,因为任何不是的数据都将在运行时而不是编译时生成。SQL(和大多数其他关系数据库)提供语言编写者所谓的静态类型检查,对存储的数据进行精细控制,因此似乎需要一个 Web 框架来确保存储的数据类型之间的严格映射以及它如何检索到框架中。

我有一些使用Hibernate和Spring Framework的经验,Spring Web MVC渲染模板并将数据存储在MySQL数据库中。

休眠的实体定义可能类似于以下内容:(有很多变体)

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@Table(name = "layoutItem", schema = "ivb")
public abstract class LayoutItem implements Serializable, DisplayItemInf {
  private static final long serialVersionUID = 1L;
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @Column(name = "id")
  private long id;
  @OneToOne(cascade = CascadeType.ALL)
  @JoinColumn(name="LayoutSize")
  private LayoutSize size;
  @OneToOne(cascade = CascadeType.ALL)
  @JoinColumn(name="LayoutPosition")
  private LayoutPosition position;
  @Column(name = "display")
  private int display;
  @Column(name = "styleItem")
  private String styleItem;
  private String CSSclass = "";
  public void addClass(String CSSclass) {
    this.CSSclass = CSSclass+" ";
  }
  ...other getter and setter definitions...
}

所有字段都被赋予静态数据类型,然后休眠将这些映射到 MySql 表中字段的相应类型。使用Spring的优点是它们提供了一个称为Spring Tool Suite的Eclipse版本,每次保存文件时,都会重新编译相关类并重新部署到本地运行的服务器。然后,如果到数据库的实体映射中出现任何问题,这将引发类型错误。Hibernate提供了许多控制类型的注释,并且与SQL提供的注释一样精细。

在该框架中创建了几个不同的层,其中数据访问层位于堆的底部,业务逻辑和网站表示位于较高位置。这种创建框架的分层方法意味着在执行业务逻辑之前,数据被严格地类型化到堆的底部,然后传递到类型更松散的MVC部分,以呈现到模板(例如JSP)并显示为网页。

我想,这种方法是否适合您的情况需要仔细评估。恕我直言,与Django(它也有实体,尽管没有严格映射)或Ruby On Rails(这里没有经验:)相比,Spring是一个相当重量级的解决方案。可能还有其他方法可以将Hibernate用于静态类型,JSP用于模板,尽管使用STS的好处绝对是Spring的一个加分项。Lift使用严格类型的Scala语言,也可以在JVM上运行,它不像Spring那么重,所以部署起来可能会更快。

如果你想在JVM之外冒险,你可以 Asp.Net 带有Razor视图的MVC,你可以要求的所有编译时检查,以及强类型视图。作为奖励,您将获得出色的智能感知和重构能力。

最新更新