代码之家  ›  专栏  ›  技术社区  ›  Adam Gent

为什么JavaWebApp使用?扩展吗?它是从哪里来的?

  •  107
  • Adam Gent  · 技术社区  · 14 年前

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

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

    我个人不喜欢延期。

    3 回复  |  直到 6 年前
        1
  •  71
  •   Philip Rego    6 年前

    据我所知,该公约已由Struts1传播。用户指南如下所示:

    5.4.2 Configure the ActionServlet Mapping

    注: 本节中的材料不特定于支柱。这个 servlet映射的配置为 Java Servlet中定义的 规范。本节介绍 配置 应用。

    有两种常见的方法 定义将 由控制器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 以句点结尾,后跟 定义的字符集。为了 例如,JSP处理servlet是 映射到 *.jsp 模式使 它被调用来处理每个JSP页面 这是要求的。 使用 *.do 扩展(意味着“做 “某物” ,映射项将 看起来像这样:

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

    以及一个与 登录 前面描述的路径可能 看起来像这样:

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

    警告 -如果定义更多,框架将无法正确运行 比一 <servlet-mapping> 要素 对于控制器servlet。

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

    我认为这个公约已经被遵守了(有时 to not change URLs 甚至在更换了Struts1之后,有时仅仅是因为人们对它很满意)。

        2
  •  9
  •   silverjam    6 年前

    在web.xml中将struts servlet映射到*.do以将URL传递给struts servlet是一种常见的实践。例如:

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

    除了惯例之外,真的没有别的理由。如果您不使用扩展名,那么您需要做一些魔法来处理图像和其他静态内容,这种方式不会将它们发送到您的sevlet。这通常在前端Web服务器的负载平衡器上完成。

        3
  •  -2
  •   Alireza Fattahi    6 年前

    只是个安全提示!

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

    因此,如果您更改了默认扩展,加上您的框架中的一些静态信息(这些信息可能会显示您的手),那么您的MVC框架可能是完全未知的。

    甚至将扩展名更改为 php aspx 可能是个好主意。

    好吧,这确实是混淆安全,但这并不是良好安全的反面。在一个已经安全的系统上通过模糊来分层安全可能会有所帮助。有一些有趣的优点和缺点,通过模糊的安全,当他们都可以在互联网上使用。