gpt4 book ai didi

java - REST spring 服务和 JQUERY Web 集成最佳实践

转载 作者:行者123 更新时间:2023-11-30 04:01:47 24 4
gpt4 key购买 nike

关于使用 spring-mvc(REST 服务)和 jQuery 设计系统的最佳方式。我认为存在以下几种方法。

  1. 一个 war 文件,其中包含 spring 服务和 jQuery 内容,通过这种方法,我们拥有可与 spring-mvc 一起使用的所有域对象,我们可以创建初始 jsp 页面,然后使用 jQuery 调用刷新一些元素服务。
  2. 两个 war 文件,一个包含 spring 服务,另一个包含 spring-mvc 内容和 jquery,在这种情况下,页面的创建可以由 jsp 页面完成,也可以通过 jquery 调用我们的服务来刷新元素,但是要使这可能我们需要有一个在第二次 war 中使用的通用域对象库,并且在一些需要创建的 Controller 中内部使用restTemplate(听起来像重复的代码)。
  3. 有一个运行REST服务的war文件和另一个“包”,没有任何java或spring的东西,只有jquery,这意味着所有调用和信息检索都必须使用jquery完成,初始jsp页面创建不能用这个完成选项和所有内容都是通过 REST 服务获取的。 (无需使用内部 Controller 通过java调用服务)

想了想,我意识到一和二有以下缺点。

  • 将服务和 Web 内容放在同一个 War 文件中听起来像是一个在 SOA 中思考的坏主意,这场 War 的移动将导致移动不需要的 jquery 和 Web 内容。
  • 将 jsp 和 jquery 混合起来听起来不是一个好主意,但我认为这是一种常见的做法(我想知道为什么?),使用这个我认为我们需要在第二次 war 中创建一些 Controller 来最初创建网页,使用restTemplate 获取初始信息,然后使用jquery 调用更新或刷新。感觉有一个 Controller 只是为了将数据检索到服务,为什么不直接......

I just want to implement the third approach but the question is: there is any disadvantages that I’m not seeing or any advice that I should know before use that approach? Also there is any suggestion to handle this kind of systems it will be great to hear something from you, coming from java and jquery developers

最佳答案

我同意您的观点,即版本 3 为您提供了最大的灵 active ,并且是您在设计世界中通常看到的。

将其余部分和前端完全视为独立的应用程序。如果做得正确,您可以拥有一个非常强大且具有适当敏捷性的应用程序。

  • 版本 1:在初始 Controller 调用中加载页面,并使用 jquery 进行后续服务调用。所有代码都存在于一个包中。

    缺点是耦合紧密。现在,您的 API 语言受到限制,并且不再为您的数据和服务提供基于服务的方法。

    我发现这个版本主要应用于应用程序开发人员更关心异步前端调用而不是基于 SOA 的语言时。

  • 版本 2:进行一场包含 Spring 服务的 war ,以及一场针对 JS 的 war 。

    可以通过使用 jar 而不是另一个服务器应用程序来解决此方法的问题。虽然这种方法很常用,但缺点仍然是依赖外部包装。

    使用包含所有代码的 jar 来访问数据库并创建与 Controller 用于序列化和响应 Web 请求的代码分开的域对象,创建了一种非常干净的方式来管理 api,但这会带来复杂性和使用版本 3 可以避免额外的组件。它还提供与版本 1 中相同的奇怪行为。

    我见过开发纯 API 应用程序的团队采用这种方法。我还没有看到在也需要前端组件的团队中这样做。在这些情况下使用了方法一或三。

  • 版本 3:创建一个仅处理前端职责的应用程序 创建一个处理服务器端职责的应用程序。

在版本 2 和版本 3 中,将服务调用与 http 调用分开。让它们与众不同,因为它允许模块化。

例如,我们需要响应http请求

@Controller
class MyController{
@Autowired
private MyService service;
@GET
public String getData(String dataId){
return service.getData(dataId);
}
}

我们需要响应 Activity 的 mq 请求

 Message m = queueReceiver.receive();
if (m instanceof DataRequest) {
DataRequest message = (DataRequest) request;
queueSender.send(service.getData(request.getDataId())); //service call
} else {
// Handle error
}

此外,它还使您能够管理与服务端不同的 http 端需要处理的内容。

@GET
public String getData(HttpRequest request, String dataId){
if(!this.handleAuth(request)){
throw new 403();
}
try{
return service.getData(dataId);
catch(Exception e){
throw new WrappedErrorInProperHttpException(e);
}
}

这允许您的服务层处理仅对这些服务有意义的任务,而无需处理所有 http 垃圾。并让您可以处理与服务层分离的所有 HTTP 垃圾。

关于java - REST spring 服务和 JQUERY Web 集成最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21805739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com