每个 Web 应用一个或多个 servlet?

2022-09-01 14:41:28

我知道,这取决于网络应用程序。但是在正常情况下,你该怎么办:一个servlet,它为不同的页面提供服务(比如一个内容不断变化的独立应用程序),或者为每个页面提供一个servlet。

以博客为例。有包含最新博客条目的起始页,用于显示一个博客条目和存档的文章视图。您是使用三个不同的 servlet 实现此目的,还是使用一个调度到函数的 servlet 来实现这一点。至少有很大一部分是共享的,比如http-headers。

那么,你有什么经验,什么最有效?


答案 1

通常,您将为每个用例创建一个 servlet。Servlet 的作用类似于应用程序的控制器。当您识别来自用户的交互时,请实现一个 servlet 来控制该交互。

也就是说,如果您使用普通的 servlet/JSP 来构建站点。如果您使用的是像 struts 这样的框架,您会发现它们实现了前端控制器模式,并使用单个 servlet 来接收所有请求并将这些请求转发到实现用户请求实际逻辑的操作类。这要自己做起来要困难得多,但这是一个很好的做法......这就是为什么这么多人使用这些框架的原因。

所以简短的答案是,您将为每个web应用程序创建许多servlet,因为每个web应用程序都会公开几个用例。

[编辑]重新阅读您的问题,似乎您正在使用术语“网站”来表示页面或视图。同样,这取决于该视图上正在发生的事情。例如,要显示最新的博客条目,您可以有一个 servlet,用于构造数据库中要显示的条目列表。如果用户单击某个条目,则另一个 servlet 可以检索该单个条目以供查看,依此类推。主要是,每个操作都是一个用例,因此是一个不同的servlet。


答案 2

大多数Web框架使用调度程序servlet(例如:Spring MVC),负责将请求路由到适当的类/控制器。

当你开始拥有大量页面时,这种方法效果最好,因为你有一种更加用户友好的方式(关于web.xml)来声明/管理处理http请求及其url的类。示例(再次弹簧 mvc):

@Controller
public class MyController {
 @RequestMapping("/viewPosts")
 public void doViewPosts(HttpRequest r, HttpResponse res) {
  //...
 }
}

此外,使用调度程序 servlet 可以使您的代码流保持集中。


推荐