如何构建Java Web应用程序

5
很快我将为一家公司启动一个Web项目,现在需要选择一种技术来构建应用程序。我正在考虑使用Java,因此我想找到一个框架来帮助我构建应用程序(我习惯于使用PHP框架,如CakePHP和CodeIgniter)。
我不明白的是似乎存在很多不同目标的框架和技术。Action框架、Component框架……我能用其中一个做什么,不能用另一个做什么?似乎Java Web应用程序应该通过混合许多不同的技术来开发,因此我有点迷失了……
我已经看过了不同的Java框架,例如JSF、Stripes、Struts2、Tapestry、Wicket和Spring。关于后者,我不太清楚这个框架的不同部分是什么,它能为我做什么,以及它不能做什么。我可以从Spring中获取什么,我不需要什么……
因此:我需要构建Java Web应用程序需要什么?
我已经使用JSF为基本的CRUD应用程序编写过代码,但我正在尝试寻找更适合我的需求的东西。我们将要构建的应用程序将是社区平台和商家网站,需要保护敏感数据。
关于ORM,我想我会选择Hibernate……
此外,我听说过Maven或Ant,它们能以什么方式帮助我?
任何建议/指导将不胜感激:-) 提前致谢。
编辑:我的需求是:
- 文档完整/易于获得帮助/尽可能简单... - 越多Java越好 - Ajax友好/轻松构建漂亮的UI... - 国际化 - 作为一名学生,技能的市场性可能很重要...
要构建的应用程序既是社区网站又是电子商务网站。详细规格尚未完成。

如果您能简要描述您的需求,那么人们就可以为您提供建议,以便更贴近您的需求。 - Artem Barger
5个回答

9
这是一个非常棘手的问题,由于最近我也处在你的情况下,我会尽力提供一些见解。基本上,Java有很多框架可供选择,没有人能真正告诉你哪个最适合你,我们可以做的是给你一些技术的概述。
以下是我在寻找与您相同答案时遇到的一些内容。
Java有一堆技术试图提供全栈解决方案。这些技术可以分解为其他技术,但在使用它们时却能很好地配合使用。
基本上,Web应用程序有3个层次:表示层、业务层和数据层。表示层是前端,即用户所看到的。通常可以混合匹配这三个层次的技术。例如,您可以使用Stripes前端与Spring框架进行IOC,并使用Hibernate作为ORM。
有许多出色的技术可用于表示层,包括Spring-MVC、STRUTS、Stripes、Wicket、JSF/SEAM和Tapestry等。其中大多数使用JSTL的JSP作为视图,除了wicket之外,它实际上通过使用Java“组件”(POJOS)完全将HTML与逻辑分离开来。这两种方法都有优点和缺点。wicket方法的好处是您具有静态类型检查和完全分离的HTML,因此可以将其交给设计师。
对于业务层,一般人们使用某种反转控制框架(IOC)进行依赖注入(DI)。流行的IOC框架是Spring和Seam,它们有关联技术,如Spring-security,并且通常得到其他技术的支持。Google Guice似乎很受欢迎,用于直接DI框架。
最后,对于数据层,大多数人倾向于使用Hibernate或JPA。还有其他的,但我没有任何经验,也不能提供更多信息。
Tapestry是另一个试图成为全栈的框架,从我的理解来看,它采用了类似wicket的方法(或者我猜Wicket采用了类似Tapestry的方法)。Grails是另一个使用Groovy构建在Spring和Hibernate之上的全栈框架。如果您喜欢Rails,Grails非常不错。
这些技术大多都有很多信息可用,并且非常活跃的邮件列表/IRC聊天室。您需要做的就是查看它们,然后决定哪种方法适合您。没有人能告诉您会喜欢什么。
如果您想要推荐,我希望有一天使用Wicket/Guice/Hibernate堆栈。

3

我最喜欢的肯定是Spring。新的Spring MVC 2.5易于快速设置,有很多注释可以帮助您以声明方式连接控制器,这样可以省去很多打字时间。它还与Spring容器集成,这是我最喜欢的轻量级J2EE替代容器。我通常将SpringMVC与简单的JSP结合使用,但还有很多其他视图技术可供选择。对于持久性,我通常使用Hibernate。值得一提的是,可以看看类似于没有Groovy的Grails的Spring ROO。Spring Security提供了一种漂亮而简单的声明性安全方法,并整合了大量身份验证技术。

Maven和Ant都是构建工具,而Maven还处理依赖关系。您只需设置描述符来描述所需的库及其版本要求,Maven将为您下载所有库及其依赖项。但它强制执行某些项目布局。对于Ant,有Ivy可以处理依赖关系。


我认为Maven并不强制要求你遵循任何特定的项目布局,只是如果你不这样做,你就需要更多的配置而非约定。 - Andrew Swan
我听说你可以用超过非平凡数量的配置来改变项目布局以及依赖关系。我并不真的喜欢Maven,或者其他任何项目依赖管理工具。它们似乎最终都需要比手动处理依赖更多的工作。 - fforw

2
我建议你看一下Grails。Grails是一个基于经过验证的Java框架(如Spring、Hibernate等)堆栈和使用Groovy语言构建的“按约定编码”的Web应用程序框架。
Grails的优点在于,你只需要很少了解Spring、Hibernate等就可以开始使用。但是,如果必要的话,你仍然可以访问这些框架的全部功能。

1
我想尽可能多地使用Java :) - Sylvain
1
Groove基本上是Java加入了一些功能...你可以在框架所需的核心类之外的任何地方使用纯Java,它可以与Groovy无缝集成。 - Michael Borgwardt

2
绝对应该使用Spring作为后端;他们的免费支持论坛有一个很好的社区(您也可以支付更正式的支持)。
关于您决定使用Hibernate,您可能希望编写反对JPA的代码,以便将应用程序与Hibernate分离(这是几个JPA实现之一)。
如果您想要一个Ajax前端,不妨看看ZK框架;它非常容易使用,无需学习JavaScript,并避免使用像DWR这样的管道库。

1

他人建议使用Spring是一个很好的主意。因为每个框架都解决了稍微不同的问题,你会发现实际上需要同时使用多种不同的框架。

我建议您在入门之前先花些时间熟悉每个框架或技术,但最终您可能希望将它们一起使用。例如,您可能需要使用Struts + Spring + Hibernate设置。配置它们可能会令人头痛。

因此,我建议您使用AppFuse,它可以通过生成基本应用程序和基本功能来帮助您。这是一个巨大的时间节省器。当然,您还需要了解为您配置的不同框架,因此这不是一个魔法解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接