【问题标题】:proper logic of a java servlet interface? [duplicate]java servlet接口的正确逻辑? [复制]
【发布时间】:2016-12-27 19:24:35
【问题描述】:

我正在编写我的第一个 servlet(学术目的),但我不清楚使用 HTML 客户端进行接口的正确方法是什么。

如果客户端请求有多种类型,例如“我想要咖啡”、“我想要披萨”等(实际上我认为我只需要登录和数据发送/请求)但是,servlet 必须如何处理这些?考虑到一个 servlet 只有一个 get/post 方法。

A) 一个 servlet (serverAddr/myApp/myServlet),它使用参数检查接收到的请求并调用正确的函数(使用开关。听起来不太好)。

B) 每个请求都有特定用途的 servlet,例如“doCoffee”(serverAddr/myApp/coffee)、“doPizza”(serverAddr/myApp/pizza)等。 在这种情况下,我有许多构成 Web 应用程序的 servlet。

我希望已经解释了我的问题,谢谢。

【问题讨论】:

  • 视情况而定。如果它实际上是关于咖啡和披萨,那么 A 会更有意义。
  • 重要的不是 servlet 的数量。重要的是要有一个干净的 HTTP API(因此是干净的 URL),并有干净的、可维护的代码,其中两个不相关的用例不在同一个类中实现。如果只使用 servlet,两个 servlet 可能会更好。如果您设计或使用 Spring MVC 等基于动作的框架,那么基于 URL 分派到动作类的单个 servlet 具有许多优势。
  • 谢谢,很有帮助。

标签: java servlets


【解决方案1】:

你是对的:这两种解决方案(一个doGet() 方法处理多个用例和与用例一样多的 servlet)在一般情况下都不是好的设计。

这就是为什么很长一段时间以来,Java EE 应用程序不直接大量使用自己的 HttpServlet 实现,而是使用 Java EE UI 框架,这些框架允许在 Web 控制器中进行灵活设计。
后面,使用了框架提供的HttpServlet,但是我们不用担心,因为它已经可以使用了。他们的主要目标之一是处理所有样板、复杂和重复的代码,让开发人员能够灵活地设计他们的 Web 应用程序。

例如,JSF 1(不是最近的版本)允许使用 JSF backingbean 将 JSP 视图映射到几乎经典的 Java 对象,而不是仅使用单个 doGet() 方法来处理我们的需求的刚性 servlet。 在这个 backingbean 中,您可以像在经典 java 类中一样添加任何方法,并以 Java 经典方式从 JSP 中调用这些方法:myBean.myMethod()

大多数 Java EE UI 框架(SpringMVC、GWT、Struts 2 等)都允许这样做。

【讨论】:

  • 谢谢,但在这种情况下,我避免使用任何框架。
  • 在这种情况下,您必须重新发明轮子(这是耗时的)或根据简单而精确的逻辑规则选择不太糟糕的设计才能获得正确的设计。例如,将doGet() 方法与派发到经典类java 一起使用,这将是一个更灵活的控制器,具有处理相关用例所需的尽可能多的公共方法,并且使用doGet() 而无需派发来处理单个用例当用例被隔离时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
  • 2014-11-15
  • 1970-01-01
  • 2012-10-03
  • 2012-02-28
  • 2012-02-20
  • 1970-01-01
相关资源
最近更新 更多