2012-08-24 71 views
8

在SO讨论中已经有几篇文章讨论这个架构是一个好主意还是坏主意。由于我们公司内部的许多原因,包括现有的编程人才,我们决定将Java用于后端,PHP用于前端。我们的目标是一样的东西......使用Java作为后端,PHP作为前端

爪哇 - 型号/控制器

PHP - 查看

我们正在努力建立一个原型的Glassfish和Apache之间的相互作用。我们仍在努力的一件事是当用户访问http://domain.com/login.html并且他们登录时,登录将被发送到存在某个地方的Glassfish控制器,如/login.java。我们可以做到这一点没有问题,但麻烦在于让该视图在该URL上呈现。

有没有人用PHP或任何其他技术做到这一点?

+0

就像那个古老的[Lovin'Spoonful](http://www.metrolyrics.com/did-you-ever-have-to-make-up-your-mind-lyrics-lovin-spoonful.html) :“你(应该)拿起一个,把另一个留下!” ;) – paulsm4

回答

2

我很抱歉地提出这个问题,但它似乎会让事情变得简单得多,只要使用其中一种语言即可。如果您正在使用PHP为您的视图添加更多逻辑,则可能需要查看Velocity。它允许您访问和创建变量,遍历列表,使用条件,定义宏,进行方法调用等。这看起来好像可能使事情变得更加简洁。但是,尽量保持模板尽可能多的逻辑通常是一个好主意。

如果你想使用PHP,因为这是必需的我会建议看看使用Web服务进行通信。看看Google Googles GSON库。将JSON对象映射到模型(反之亦然)是非常好的工具(在Java方面)。

在您的前端,也可能值得看看Backbone。这是一个工具,它可以很容易地模拟你的模型对象并将事件绑定到它们,或者将它们直接绑定到字段等。

+0

请勿使用Velocity。使用类似JSF的东西,甚至是JSP。速度是一种非常古老的模板语言,它也有许多缺点。 JSF在它背后有很好的支持,可以为你做很多事情。 – seangates

+0

真的吗?速度与直线JSTL相比有什么缺点? Velocity并不需要你以任何特定的方式修改/编写你的代码。你只要通过它,无论你想要什么对象,多数民众赞成它。您可以调用方法,设置变量,从模板中声明新的等等。并不是说你应该将所有这些逻辑放在模板中。但是Velocity允许你。 –

+0

从大多数情况来看,缺乏开发者支持。我问过许多Java开发者,他们使用了哪些模板,只有一个(过去3年)听说过。 – seangates

4

你有没有考虑在java中设置一个soap/rest服务器并让PHP与之交谈?我想这会比你想要达到的要简单得多。

+0

我在之前的工作中做过这样的工作,工作得很好。肥皂是一种痛苦,但很好的支持。如果你想冒险,你可以尝试一下jsonrpc实现。 – Jody

+0

- 这将是IPC或套接字通信实现之一。 – 2012-08-24 19:53:25

+2

我们确实使用Java Rest API(JSON)作为后端,PHP使用前端。这是一个很棒的体验,我们也可以为移动平台使用相同的后端。 – Gonzalo

1

我已经有两家公司使用Java的第一手经验服务层和PHP 客户端层技术堆栈,虽然它没有专门使用。为了清楚地分离这些图层,建立了一个定义良好的JSON REST API,以便每个图层都有一个它可以编码的合同。

Java的层中使用SpringMVC持久层在其之间,以产生具有良好定义的路由(即URL结构)为了使PHP层GET/PUT/POST/DELETE资源JSON视图。

关于登录问题,实际上有两个Java服务,一个专门用于登录/注销,另一个用于常规后端。

当访问/login,我认为这将是一个.php文件。将登录<form>提交给“登录”服务会导致添加会话Cookie,但也会生成加密的“用户ID”Cookie。然后可以使用加密的cookie来保护对产品的Java服务层的访问。从PHP到Java的每个REST请求都可以访问cookie,然后Java层可以解密“用户ID”,并在PHP REST调用有效时响应。Java层然后可以访问真实的用户ID,以便从持久性存储返回用户特定的数据。

+0

虽然大部分服务都很安静,但似乎登录不是,另外,登录依赖于PHP前端,所以我认为您在某种程度上失去了一些问题*。 – WhyNotHugo

+0

如果您有两个异构层,则使用Web服务很有意义。如果您使用的是Web服务,那么使用REST/JSON(而不是WS/SOAP)是有意义的。 ......但是......如果你没有不必要地在* FIRST *地方堆叠多个不同的层,它将会是* BEST *!恕我直言... – paulsm4

+0

登录不依赖于PHP。它只是一个涉及登录的外部Java服务。如何称之为产品的产品取决于他们,无论是来自PHP还是Java。一旦成功登录,就可以通过使用cookie来保护每个_product_资源。请注意,这不是** my **体系结构,我只是详细介绍了与我合作的技术堆栈的一些信息! – andyb

相关问题