轻量级Java Web框架 - 特定要求

时间:2011-07-10 00:56:45

标签: java frameworks

我第一次遇到例如Ruby的Sinatra框架或PHP的Zend框架,我想知道Java中是否有足够的东西,这一切看起来都很臃肿。虽然周围有无数的框架,但到目前为止我还没有找到任何框架,我认为这种框架非常适合我想要实现的架构。

我想设计一个对Javascript很重要的Web应用程序,其中大多数应用程序逻辑都在客户端上实现,Java后端或多或少只能用作数据存储或执行复杂的计算。

我确实在这里查看了相关问题,但我找不到完美的答案,每个建议的解决方案都有一个不符合要求的怪癖。

所以这就是我要寻找的,一个具有以下功能的开源框架:

  • 约定优于配置
  • 除了web.xml
  • 之外没有XML配置
  • 纯Java(没有Scala,没有Groovy,......)
  • 自然的REST风格的网址,例如/ news / 2011/7月(没有.do,没有.jsp,...)
  • REST感知
  • 它不应该强迫我在应用服务器上部署(例如,EJB应该是可选的)
  • 会话支持很好,但不是强制性的
  • Rails中的代码生成会很棒但不是强制性的
  • 最小依赖项,总体规模较小
  • MVC会很好,但是
    • 我希望能够选择M部分,选择我自己的持久性库(没有捆绑)。
    • 没有自动生成的视图代码,HTML,Javascript和CSS
    • 集成模板语言会很好,但它应该是简约的(简单的控制流,访问模板变量)
    • 布局支持(即您可以为类似视图指定通用模板)
    • 为视图自由选择Javascript框架

基本上这意味着MVC框架为我做路由并为视图提供模板支持,但其余的是完全模块化的,没有魔力。是否有任何简约框架可以提供这种(或者至少是模块化的,以便以这种方式配置)?

3 个答案:

答案 0 :(得分:15)

Play Framework怎么样?

  

约定优于配置

播放只有很少的配置文件。其大多数结构是按惯例。 例如,基本结构如下:

|
+---/app - All executable artifacts go here (java files, conf files and view templates). 
|     |
|     +---/model  - Your model Java classes.
|     |
|     +---/view   - Your view templates.
|     |
|     +---/controller - Your controller classes
|     
|---/conf - Contains all configuration files for the application. Initially contains application configuration and routing table.
|     
|---/lib  - Libraries your appliaction needs. Added automatically to classpath.
|     
|---/log  
|     
|---/public - Public stuff are your static assets that your server gives directly
|     
|---/test
|     
|---/tmp  - All your temporarily compiled .class files are here
  

除了web.xml

之外没有XML配置

Play没有XML配置,包括没有web.xml。它有一个路由文件。请参阅下面的示例,它用于路由。

  

纯Java(没有Scala,没有Groovy,......)

它是纯Java,但您可以通过插件使用Scala或Groovy。

  
      
  • 自然的REST风格的网址,例如/ news / 2011/7月(没有.do,没有.jsp,...)
  •   
  • REST感知
  •   

来自网站:
  Play is a real "Share nothing" system. Ready for REST, it is easily scaled by running multiple instances of the same application on several servers.

事实上,以类似Rest的方式路由非常简单:

 # Play 'routes' configuration file…

 # Method   URL path         Controller

GET        /                Application.index
GET        /about           Application.about
POST       /item            Item.addItem
GET        /item/{id}       Item.getItem
GET        /item/{id}.pdf   Item.getItemPdf

一旦你习惯了玩游戏,不难猜出哪个会去哪里。

  
      
  • 它不应该强迫我在应用服务器上部署(例如,EJB应该是可选的)
  •   

没有。实际上,您可以通过保存文件进行部署。 EJB是完全可选的,.war.ear和其他形式的部署也是可选的。

  像Rails中的代码生成会很棒但不是强制性的

我认为它不会产生太多的代码,但我不是100%的代码。它会自动创建所有必需的文件夹并实例化一个基本的示例页面。我不知道Rails是否会产生其他任何东西......

  

MVC会很好,但是      - 我希望能够选择M部分,自己选择持久性库(没有捆绑)      - 没有自动生成的视图代码,HTML,Javascript和CSS      - 一个集成的模板语言会很好,但它应该是简约的(简单的控制流,

请参阅MVC in Play

  • 认为这是一个小小的反击点。 Play模型必须使用JPA或扩展Play附带的某些Model类。有关详细信息,请参阅Play framework-model
  • 虽然您可以在.html.css.js和其他文件中使用模板语言来创建动态网页,但它不会生成HTML。
  • 我有基于Groovy模板语言的内置模板语言,例如

    You have ${emails.unread ?: 'no'} ${emails.unread?.pluralize('email')} !

其他优点:

  • 编程非常有趣。
  • 我是否提到了允许您通过保存源文件重新部署应用程序的热交换?
  • 很棒的错误日志。

缺点:

  • 这是51MB不确定这是否符合轻量级:/

答案 1 :(得分:3)

Spring Roo:我发现很容易入手。它可以生成UI代码,但由您决定使用它。

答案 2 :(得分:3)

我过去在几个项目中使用了Stripes框架,听起来它符合所有/大部分标准,尤其是约定优于配置。没有XML配置 - 有一个stripes.properties文件具有一般的行为配置(它是类路径的一次性添加)。需要对web.xml进行一次编辑才能配置“Stripes Dispatcher”,它是一个将请求路由到其相应操作bean的Filter。自动发现ActionBeans,因此您在添加更多Action Bean时甚至不必更新web.xml。您的URL都是使用动作bean上的注释,其余支持,动态ActionBean绑定,服务器端验证以及通过简单类型的内置注释进行转换来设置的,并且能够为复杂类型创建自己的验证处理程序和转换器。适用于JSP和您的自定义JS / CSS库。文档和支持论坛非常棒。如果你按照他们的教程学习它会很快。