我一直想知道为什么这么多Java开发人员使用“.do”作为其Web控制器(MVC)资源的扩展。示例:http://example.com/register.do
它似乎甚至不是特定于框架的,因为我在Spring MVC和Struts项目中看到过它。 这个“.do”扩展实践来自何处。为什么这样做而不是没有延期? 我觉得我错过了关于这个的Java世界备忘录。
我个人不喜欢延期。
答案 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框架可能完全未知。
即使将更改扩展为php
或aspx
也不错。
确实,这是通过混淆来保证安全性,但这不是良好安全性的反面。在已经安全的系统之上隐藏安全性可能会有所帮助。通过混淆以及它们可以在互联网上使用时,有一些有趣的安全优缺点。