servlet应该执行多少个动作?

我是Web开发的新手,我只是想知道java servlet的最佳实践。 每个servlet应该只执行一个操作,即用于登录的servlet,用于注册的servlet等,还是应该通过传递不同的参数来告诉servlet执行哪个操作来组合类似的操作?

干杯

在诸如Struts之类的框架中,只有一个servlet(尽管可能有多个运行实例)。 该servlet将处理对各种URL的请求,并将它们从相关的动作处理程序中传递出去。

我最终只编写额外的servlet来提供不同的内容类型,例如图像渲染servlet。

您永远不应该传递参数来告诉servlet执行不同的操作。 您正在做的就是将两个servlet合并为一个,这将变得更难以管理。 您将需要为每个“动作”设置一个servlet。

要避免的一个例子是:

/应用/ Servlet1?行动=编辑

if (request.getParamater("action").equals("edit")) { //update fields } else if (request.getParamater("action").equals("view")) { //just query } 

当你想重新设计任何东西时,这往往会导致很多问题。 您将需要具有单独的servlet,因为它正在解耦您的逻辑,以便您可以轻松地更改它,而不是耦合它不应该与之相关的各种复杂的代码。 另外,请关注分离问题 。

修改/编辑:我现在要说这个(原来的答案要晚得多)……你可以保留“多个动作”的概念并把它放到一个servlet(控制器)中。 该控制器可以并且应该委托给各个动作处理程序。 我认为在关注点分离方面是相同的,并且比我原来的答案更清晰。 换句话说,不要在servlet中实现任何内容,仅将其用于路由。

我更喜欢servlet而不是更多。 您可以很好地将servlet用作单个入口点,就像在许多Web框架中一样。 单个servlet正在接收所有HTTP请求,并根据请求选择正确的操作。 这是基本的前端控制器模式,它创造了很多好处,比如可以很容易地创建集中式function,比如身份validation等。这里有更多相关信息: http : //java.sun.com/blueprints/corej2eepatterns/Patterns/FrontController.html

在许多servlet中具有function只会使不必要的事情复杂化。 但是请记住,如果您不能很好地划分和管理代码,那么只使用一个servlet也会造成很大的混乱。

每个servlet应该有一到四个动作,名为doDelete,doGet,doPost和doPut。 这些名称对应于HTTP方法名称DELETE,GET,POST和PUT。 他们一起构建了一个REST ful API。 如果使用此统一接口编写服务器资源,则将使用HTTP的全部function。

要获得RESTful API,请将资源视为具有一组标准操作的名词。 你最终会得到更多的Servlet(控制器)而不是像struts这样的框架,但每个servlet只有大量的动作。

许多框架将前端控制器模式与单个servlet一起使用,该servlet将请求分派给控制器或操作。 但是框架控制器或操作往往会复制servlet API的function。 servlet容器已经是一种前端控制器,它将请求分派给处理程序(servlet)。

如果您的Web应用程序足够复杂,操作数量可能超过您可以轻松处理的servlet数量,那么您可能会考虑使用Web框架来解决该问题。

你的servlet层应该只做几件事:

  1. 从请求中输入Yank
  2. 管理会话状态
  3. 向/从Business对象层调度对象
  4. 将数据推送到响应中
  5. 转发到视图
  6. 处理错误/输入/输出错误

几乎任何陷入servlet的东西都是个坏主意。

如果遵循一些简单的指导原则,一个简单的servlet可以调用输入处理器将数据从请求和可能在会话中的数据转换为适当的对象。 然后可以将该对象传递给BizObject层。 该层将返回可能存储在会话中的信息以及将传递给视图的某个对象。

我曾经为servlet服务方法强制执行40行规则。 如果你超过40行,我期待一个很好的解释。

我在一个80k线的java web应用程序上工作,它有两个servlet,都没有超过40行。 它处理了大约60个表格/州。

如果servlet中有更多代码,我认为在任何时候都不会更容易管理/维护/修改应用程序。