Java 如何组织我的servlet?

Java 如何组织我的servlet?,java,tomcat,servlets,Java,Tomcat,Servlets,我正在看前面的问题,如: 这些线索中有相互矛盾的答案;有些人说每个页面使用一个servlet,另一些人说整个应用程序只使用一个servlet 我也有同样的问题。那么,我如何决定我的servlet是什么呢?如果我使用一个(或几个)“前端控制器”,如何解析请求以将它们委托给其他对象?例如,如果一个页面上有3个不同的表单,我如何区分它们的请求之间的差异?如何区分表单和来自不同页面的请求之间的差异?是否为每个表单+页面分配多个servlet映射?看看参数名?URL编码“请求类型”参数 这么多的做事方

我正在看前面的问题,如:

这些线索中有相互矛盾的答案;有些人说每个页面使用一个servlet,另一些人说整个应用程序只使用一个servlet

我也有同样的问题。那么,我如何决定我的servlet是什么呢?如果我使用一个(或几个)“前端控制器”,如何解析请求以将它们委托给其他对象?例如,如果一个页面上有3个不同的表单,我如何区分它们的请求之间的差异?如何区分表单和来自不同页面的请求之间的差异?是否为每个表单+页面分配多个servlet映射?看看参数名?URL编码“请求类型”参数

这么多的做事方法


另外,我不想使用Struts这样的框架——我想知道使用ServletAPI实现这一点的最佳方法。我使用的是Tomcat7。

前端控制器只是HTTP请求进入应用程序的网关。但这通常充当交通警察,将HTTP请求路由到知道如何处理它们的类

例如,Spring有一个DispatcherServlet,它将控制器映射到请求(通常通过URL)。控制器过去是一个接口,但现在控制器POJO也可以被注释

控制器接口有一个方法:HandlerRequest:

ModelAndView    handleRequest(HttpServletRequest request, HttpServletResponse response) 

它接收HTTP请求和响应并返回ModelAndView。

首先,在不采用现有servlet的情况下自行开发单个(前端控制器)servlet(例如Spring的
DispatcherServlet
、JSF的
FacesServlet
、Wicket的
WicketServlet
等)是一项相当艰巨的工作。但最终您会得到更简单、更好的可重用/可维护业务代码。在一个普通的Web应用程序上通常没有多个前端控制器servlet。应该只有一个

很难说你是否真的需要一个。如果你的webapp中毕竟只有3个web表单(因此也只有3个servlet),而且这种情况从长远来看永远不会改变,那么花上几天的时间在家里开发MVC框架或潜心学习现有的MVC框架可能是不值得的。很难说边界在哪里。但是,如果您可以确定所讨论的webapp将来需要扩展和/或增强,那么现在就采用MVC模式(即一个前端控制器servlet)比那时要好


至少,如果你打算在家中成长,那么你可以在中找到很多有用的见解。但是重用现有的框架最终会得到更好的维护,因为有更多的机会找到一个从上到下都了解该框架的人,这样他/她就不需要学习另一个框架,就可以维护你的Web应用了。

我两个都试过了,我不使用任何固定框架(不管是好是坏)。我的感觉是,当不同的servlet在结构上相当独立和模块化时,它们会更好,因此您可以将它们脱机进行升级或维护。当您处理同步问题时,尤其是处理数据库时,使用单个servlet会更好。但同样,您是判断如何对它们进行分区的最佳人选。我使用当我知道Servlet将访问数据库中完全不同的一组表时,请使用它。

谢谢,尽管我不想使用Spring。但是如果我自己这样做,我可以创建一个对象,该对象知道处理对象和请求URL之间的关系,并将其用作“调度程序”?因此,“登录”表单将转到“www.mysite.com/Login”,“联系我们”表单将转到“www.mysite.com/contact”,这两个表单都映射到前端控制器servlet,它使用调度器委托这些表单请求?我没有说“使用Spring”";我引用它作为一个例子。是的,你可以编写FrontController servlet、ViewResolver和Controller POJO等。但是如果你要做所有这些,你可能会想到一个web MVC框架——Spring的或Wicket的或其他什么。只有当你想了解轮子是如何工作的时候,才重新发明轮子。这是一个已经解决的问题很多次了。什么让你觉得你会做得更好?哈哈,谢谢-我怀疑我会做得更好,但我喜欢发明轮子…它帮助我理解事情。那很好-我会鼓励每个人自己至少做一次,这样他们就会理解和欣赏web MVC框架为他们做了什么。这正是你应该做的直到你得到它。然后我会找到一些东西,为我节省了样板工作。