我知道,这取决于webapp。但在正常情况下,你做了什么:一个servlet,它服务于不同的页面(比如一个具有不断变化的内容的独立应用程序),或者每个页面都有一个servlet。
以博客为例。有一个包含最新博客条目的起始页面,一个用于显示一个博客条目和一个存档的文章视图。您是使用三个不同的servlet实现此功能,还是将其分配给函数。至少有很多东西是共享的,比如http-headers。
那么,你的经历是什么,最有效的是什么?
答案 0 :(得分:11)
通常,您将根据用例创建一个servlet。 Servlet就像您的应用程序的控制器。当您从用户识别交互时,然后实现servlet来控制该交互。
也就是说,如果您使用普通的servlet / JSP来构建站点。如果您使用像struts这样的框架,您会发现它们实现了前端控制器模式,并使用单个servlet来接收所有请求,并将这些请求转发给实现用户请求的实际逻辑的操作类。这是很难自己做的,但这是一个很好的做法...这就是为什么这么多人使用这些框架的原因。
简而言之,您将为每个webapp创建许多servlet,因为每个webapp都会暴露几个用例。
[编辑]重新阅读您的问题,似乎您使用术语网站来表示页面或视图。同样,这取决于该观点上发生的事情。例如,要显示最新的博客条目,您可以拥有一个servlet,用于构建数据库中的条目列表以供显示。如果用户单击某个条目,则另一个servlet可以检索该单个条目以供查看,依此类推。主要是,每个动作都是一个用例,因此是一个不同的servlet。
答案 1 :(得分:8)
大多数Web框架使用调度程序servlet(例如:Spring MVC)来处理将请求路由到适当的类/控制器。
当你开始拥有大量页面时,这种方法效果最好,因为你有一种更加用户友好的方式(关于web.xml)来声明/管理一个处理http请求及其url的类。示例(再次使用spring mvc):
@Controller
public class MyController {
@RequestMapping("/viewPosts")
public void doViewPosts(HttpRequest r, HttpResponse res) {
//...
}
}
此外,拥有一个调度程序servlet可以使代码流集中。
答案 2 :(得分:3)
取决于。
在我的最新项目中,我实现了一个servlet,它委托给几个类似servlet的对象,这些对象以依赖注入方式实例化。例如,我的servlet(伪代码)中有类似的东西:
for(Handler handler : handlers) {
if(handler.handle(request, response)) {
return;
}
}
其中Handler是一个带有布尔句柄(请求,响应)方法的接口。我从容器中获取处理程序(无论是Spring还是更轻量级的东西)。
原因是我真的很喜欢依赖注入,而且很难在Servlets中实现它;对于提供Web组件依赖注入的大多数框架,我真的不太感到宾至如归 - 我喜欢servlet的简单性。
如果没有这个,我会选择多个servlet,尽管有一个权衡;你有一个庞大的web xml有很多(和很多)servlet映射,或者你有一个非常复杂的servlet(除非你使用像我的d-i方法)。