为什么Java webapps使用.do扩展名? 它从哪里来的?

我一直想知道为什么如此多的Java开发人员使用“.do”作为其Web控制器(MVC)资源的扩展。 例如: http : //example.com/register.do

它甚至不像我在Spring MVC和Struts项目中看到的那样是框架特定的。 这个“.do”扩展练习是从哪里来的。 为什么这样做,而不是没有扩展? 我觉得我错过了这个Java世界的备忘录。

我个人更喜欢没有扩展。

据我所知,这个惯例已经被Struts1传播了。 用户指南如下所示:

5.4.2configurationActionServlet映射

注意:本节中的内容并不特定于Struts。 Servlet映射的configuration在Java Servlet规范中定义。 本节介绍configuration应用程序的最常用方法。

有两种常见的方法来定义控制器servlet将要处理的URL – 前缀匹配和扩展匹配。 下面将描述每种方法的适当映射条目。

前缀匹配意味着您希望将具有特定值的所有URL(在上下文path部分之后)开始传递给此servlet。 这样的条目可能看起来像这样:

<servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>/do/*</url-pattern> </servlet-mapping> 

这意味着与之前描述的/logonpath匹配的请求URI可能如下所示:

 http://www.mycompany.com/myapplication/do/logon 

/myapplication是应用程序部署的上下文path。

另一方面,扩展映射基于URI以周期后跟一组定义的字符结束的事实将请求URI与动作servlet匹配。 例如,JSP处理servlet映射到*.jsp模式,以便调用它来处理请求的每个JSP页面。 要使用*.do扩展(这意味着“做某事”) ,映射条目将如下所示:

 <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> 

并且与前面描述的/logonpath匹配的请求URI可能如下所示:

 http://www.mycompany.com/myapplication/logon.do 

警告 – 如果为控制器servlet定义了多个<servlet-mapping>元素,则框架将无法正常运行。

警告 – 如果从1.1版开始使用新的模块支持,则应该知道只支持扩展映射。

而且我认为这个惯例已经被保留了(有时甚至在更换Struts1之后也不会改变URL ,有时仅仅是因为人们对它感到满意)。

将struts servlet映射到web.xml中的* .do以将URL传递到struts servlet是常见的做法。 例如:

 <!-- Standard Action Servlet Mapping --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> 

除此以外,没有任何理由。 如果你不使用扩展,你需要做一些魔法来处理图像和其他静态内容,而不是以你的sevlet的方式。 通常这是在一个面向Web服务器的负载平衡器上完成的。

只是一个安全提示!

为您的控制器使用一些不寻常的扩展是一个很好的做法,这样入侵者需要花费更多的时间来find关于该站点的一些信息。

所以如果你改变了默认的扩展名,再加上一些可能会暴露你的手的静态框架,那么你的MVC框架可能是完全未知的。

即使更改扩展到phpaspx可能是个好主意。