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

2022-09-02 04:21:50

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

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

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

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

  • 约定胜过配置
  • 除 Web 之外,没有 XML 配置.xml
  • 纯Java(没有Scala,没有Groovy,...)
  • 自然 REST 样式的 URL,如 /news/2011/july(没有 .do,没有 .jsp,...)
  • REST 感知
  • 它不应该强迫我在应用程序服务器上部署(例如,EJB应该是可选的)
  • 会话支持会很好,但不是强制性的
  • 像Rails一样的代码生成会很棒,但不是强制性的
  • 依赖关系最小,总体尺寸小
  • MVC会很好,但是
    • 我希望能够选择M部分,自己选择持久性库(没有捆绑)。
    • 没有为视图自动生成的代码,无论是HTML,Javascript还是CSS
    • 集成的模板语言会很好,但它应该是极简主义的(简单的控制流,对模板变量的访问)
    • 布局支持(即,您可以为类似视图指定通用模板)
    • 自由选择Javascript框架的视图

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


答案 1

Play Framework怎么样?

约定胜过配置

Play只有很少的配置文件。它的大部分结构是按照惯例进行的。例如,基本结构是这样的:

|
+---/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 样式的 URL,如 /news/2011/july(没有 .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

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

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

其他优点:

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

缺点:

  • 它是51MB不确定这是否有资格作为轻量级:/

答案 2

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


推荐