我一直想知道为什么这么多Java开发人员使用".do"作为其Web控制器(MVC)资源的扩展.示例:http://example.com/register.do
它似乎甚至不是特定于框架,因为我在Spring MVC和Struts项目中看到过它.这个".do"扩展实践来自何处.为什么这样做而不是没有延期?我觉得我错过了关于这个的Java世界备忘录.
我个人不喜欢延伸.
据我所知,这个约定已经由Struts1传播.用户指南如下:
5.4.2配置ActionServlet映射
注意: 本节中的材料并非特定于Struts.servlet映射的配置在Java Servlet规范中定义.本节介绍配置应用程序的最常用方法.
定义将由控制器servlet处理的URL有两种常用方法 - 前缀匹配和扩展匹配.下面将描述每种方法的适当映射条目.
前缀匹配意味着您希望将具有特定值的所有URL(在上下文路径部分之后)传递给此servlet.这样的条目可能如下所示:
action /do/* 这意味着与
/logon
前面描述的路径匹配的请求URI 可能如下所示:http://www.mycompany.com/myapplication/do/logon
/myapplication
部署应用程序的上下文路径在哪里.另一方面,扩展映射基于URI以句点结束,后跟定义的字符集的事实,将请求URI与动作servlet匹配.例如,JSP处理servlet被映射到
*.jsp
模式,以便调用它来处理所请求的每个JSP页面.要使用*.do
扩展(这意味着"做某事"),映射条目将如下所示:action *.do 和匹配
/logon
前面描述的路径的请求URI 可能如下所示:http://www.mycompany.com/myapplication/logon.do警告 - 如果
为控制器servlet 定义多个元素,则框架将无法正常运行.
警告 - 如果从1.1版开始使用新模块支持,则应注意仅支持扩展映射.
而且我认为这个约定已被保留(有时即使在替换Struts1之后也不会更改URL,有时候只是因为人们对它感到满意).
通常的做法是将struts servlet映射到web.xml中的*.do,以将URL传递给struts servlet.例如:
action *.do
除了惯例之外没有其他理由.如果你不使用扩展,你需要做一些魔法来处理图像和其他静态内容,而不会将它们发送到你的sevlet.通常,这是在前端Web服务器的负载均衡器上完成的.