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

时间:2010-08-30 02:55:31

标签: java servlets web-applications

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

它似乎甚至不是特定于框架的,因为我在Spring MVC和Struts项目中看到过它。 这个“.do”扩展实践来自何处。为什么这样做而不是没有延期? 我觉得我错过了关于这个的Java世界备忘录。

我个人不喜欢延期。

3 个答案:

答案 0 :(得分:72)

据我所知,这个约定已经由Struts1传播。用户指南如下:

  

5.4.2 Configure the ActionServlet Mapping

     

注意:本节中的内容并非特定于Struts。该   servlet映射的配置是   在Java Servlet中定义   规格。本节介绍   最常用的配置方法   应用

     

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

     

前缀匹配意味着您想要的   所有启动的URL(在上下文之后)   路径部分)具有特定值   传递给这个servlet。这样的   条目可能如下所示:

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

表示请求URI为   匹配描述的/logon路径   早些时候可能看起来像这样:

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

其中/myapplication是上下文   您的应用程序所在的路径   展开。

     

另一方面,扩展映射,   将请求URI与操作匹配   servlet基于URI的事实   结束时间后跟一个   定义的字符集。对于   例如,JSP处理servlet是   映射到*.jsp模式,以便   它被调用来处理每个JSP页面   请求。 使用*.do   扩展(这意味着“做   某事“),映射条目会   看起来像这样:

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

和一个匹配的请求URI   前面描述的/logon路径可能会   看起来像这样:

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

警告 - 如果您定义更多内容,框架将无法正常运行   超过一个<servlet-mapping>元素   对于控制器servlet。

     

警告 - 如果您使用自1.1版以来的新模块支持,那么您   应该知道只有扩展   支持映射。

我认为这个约定已被保留(有时to not change URLs甚至在替换Struts1之后,有时只是因为人们对此感到满意。)

答案 1 :(得分:9)

通常的做法是将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服务器的负载均衡器上完成的。

答案 2 :(得分:-2)

只是安全提示!

最好为您的控制器使用一些不寻常的扩展,这样入侵者就需要花更多的时间来查找有关该网站的一些信息。

因此,如果您更改默认扩展名,加上框架中可能会显示您手牌的一些静态内容,您的MVC框架可能完全未知。

即使将更改扩展为phpaspx也不错。

确实,这是通过混淆来保证安全性,但这不是良好安全性的反面。在已经安全的系统之上隐藏安全性可能会有所帮助。通过混淆以及它们可以在互联网上使用时,有一些有趣的安全优缺点。