从PHP切换到Java或.net


Switch from PHP to Java or .Net

我目前在LAMP上运行一个网站,我目前正在用Doctrine重构我的代码,从普通的php到Zend框架。我对设置很满意,但经常发现功能没有在现场发现错误,因为我已经重命名了功能。这是令人沮丧的,因为大部分时间都浪费在修补这些错误上。所以我决定从php切换到java的代码得到编译,所以只是错误不会去现场。使用java netbeans会更好。

但是因为我已经很多年没有接触j2ee了。什么是最好的替代我的上述设置在java中?

  • 选项1。Jsf 2 with Hibernate

  • 选项2。Seam

  • 3

    选项。春天

  • 选项4。Struts with Hibernate

我的服务器有24g ram和2核i7处理器和ssd驱动器在raid 0

如果使用java而没有任何性能问题,我的服务器将处理相同数量的访问者吗?

我喜欢的方式,我可以更新我的网站,而不会失去现场会话(登录用户)。我可以在Java中做同样的事情吗?根据我的经验,每次站点更新都会重新部署重置所有活动会话的应用程序。

我喜欢考虑。net,但是从我在大多数论坛上看到的,没有人推荐它?

亲切的问候

Zerone

你的问题不是从PHP切换到Java,你的问题是通过单元测试,特别是集成测试的良好测试覆盖率。从您所写的内容来看,最好的方法可能是了解一下Selenium,并尽可能地自动化测试。您需要一个完整的基础架构来部署到测试系统并在其上运行集成测试(Selenium),然后您就可以说一切正常。

Java的性能会更好,但是在这种情况下切换到Java似乎有些多余。也就是说,我会推荐一些基于Spring和Hibernate的东西。对于配置Java中的任何东西,Spring都是真正的天赐之物,Hibernate与Doctrine类似。

Apache Tapestry将为您的站点提供一个很好的表示工具包。它是一个很棒的模板库,比JSP更简洁。

对于同样的问题,Java有很多不同的解决方案。目前,在web上显示项目的主流Java解决方案是Java Server Faces。

较旧的(并不总是意味着更糟糕的)解决方案包括Struts、Apache Tapestry、Spring(部分)等。这些解决方案受益于成熟度、拥有已建立的追随者等。基本上,它们是很好的解决方案,因为人们已经知道他们失败的地方,并且已经知道如何解决它们。新的解决方案试图消除这些痛点,因此遭受新的痛点。你可以把它想象成直到你治好了骨折的手臂之后才注意到你的头痛。

Java会表现得更好,因为交付网页的代码已经在内存中了,所以它避免了一些需要时间的项目(进程生成、磁盘访问、web服务器到语言引擎的通信等)。还有其他PHP解决方案也尝试使用类似的技术来解决类似的问题;然而,PHP有不同的编码背景和风格。例如,Java不需要丢弃网页请求之间的任何状态,而PHP却需要这样做(并且经常使用一些库和变通方法来缓解)。

我的建议是使用Java,但是要意识到直接移植会带来很多不必要的开销。选择一个面向web的工具包(JavaServerFaces是最新的,是Java EE标准的一部分),从移植HTML网页的静态部分开始。按范围组织请求(请求的副作用应该持续多长时间),并使用Servlet标准将请求生成的工件存储在适当的应用程序、会话、请求等范围中。

在数据库方面,也有许多标准和解决方案可供选择。就我个人而言,由于您没有太多遗留问题,我会选择JPA。虽然它并不是一个100%完整的解决方案,但它将促使您使用一个接口,该接口可以随着时间的推移被更好的实现所取代,而无需重新编写应用程序。通过说明它不是100%完成,我的意思是您需要选择一个JPA提供程序作为默认提供程序,这可能无法满足您的实际生产需求。也就是说,默认提供者应该维持面向开发的工作,JPA的标准应该保护您在不同环境下运行代码时免受意外差异的影响。

无论您是希望将代码完全重构为Java EE多层体系结构,还是只想嵌入一个大型Servlet(服务器面是Servlet解决方案的一种类型),它可以做任何事情,这更多地取决于您希望构建代码的程度。这不是移植问题。也就是说,典型的Java解决方案相对于典型的PHP解决方案的最大好处是,Java体系结构设计得更快,并提供更多的开箱即用特性。如果您打算在不进行重新架构的情况下进行移植,那么最好找出PHP代码中的瓶颈并加以修复。

如果你不使用ajax,我更喜欢4 (struts + hibernate):

  • jsf需要一点重载经验(getter-methods必须是快速的等等)。

如果您使用ajax,我更喜欢3和1的组合

的问候彼得。