为什么Java Web应用程序使用.do扩展?它是从哪里来的?
我一直想知道为什么这么多Java开发人员使用“.do”作为他们的web控制器(MVC)资源的扩展。例如: 它甚至不像我在SpringMVC和Struts项目中看到的那样是特定于框架的。 这个“.do”扩展实践从何而来。为什么这样做而不是没有扩展? 我觉得我错过了关于这个的Java世界备忘录为什么Java Web应用程序使用.do扩展?它是从哪里来的?,java,servlets,web-applications,Java,Servlets,Web Applications,我一直想知道为什么这么多Java开发人员使用“.do”作为他们的web控制器(MVC)资源的扩展。例如: 它甚至不像我在SpringMVC和Struts项目中看到的那样是特定于框架的。 这个“.do”扩展实践从何而来。为什么这样做而不是没有扩展? 我觉得我错过了关于这个的Java世界备忘录 就个人而言,我不喜欢扩展。通常的做法是将struts servlet映射到web.xml中的*.do,以将URL传递到struts servlet。例如: <!-- Standard Action Se
就个人而言,我不喜欢扩展。通常的做法是将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服务器的负载平衡器上完成的。据我所知,Struts1已经传播了这种约定。《用户指南》是这样写的:
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>/do/*</url-pattern>
</servlet-mapping>
http://www.mycompany.com/myapplication/do/logon
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
http://www.mycompany.com/myapplication/logon.do
注意:本节中的材料并非特定于支柱。这个
servlet映射的配置是
在Javaservlet中定义
规范。本节介绍
配置
应用程序
有两种常见的解决方法
定义将被删除的URL
由控制器servlet处理--
前缀匹配与扩展
匹配。适当的映射条目
将对每种方法进行描述
下面
前缀匹配意味着您需要
开始(在上下文之后)的所有URL
路径部分)具有特定的值
可以传递给这个servlet。这样的
条目可能如下所示:
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>/do/*</url-pattern>
</servlet-mapping>
http://www.mycompany.com/myapplication/do/logon
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
http://www.mycompany.com/myapplication/logon.do
其中/myapplication
是上下文
应用程序运行的路径
部署
另一方面,扩展映射,
将请求URI与操作匹配
基于以下事实的servlet
以句号结尾,后跟
定义的字符集。对于
例如,JSP处理servlet是
映射到*.jsp
模式,以便
调用它来处理每个JSP页面
这是要求的使用*。执行
扩展(表示“do
something”)
,映射条目将
像这样:
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>/do/*</url-pattern>
</servlet-mapping>
http://www.mycompany.com/myapplication/do/logon
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
http://www.mycompany.com/myapplication/logon.do
警告-如果定义更多,框架将无法正常运行
多个
元素
对于控制器servlet
警告如果您使用的是1.1版之后的新模块支持,则
应该知道,只有扩展
支持映射
我认为这一惯例一直保持着(有时甚至在更换Struts1之后,有时只是因为人们对它感到满意)。只是一个安全提示
这是一个很好的做法,使用一些不寻常的扩展为您的控制器,这样入侵者将需要花费更多的时间来寻找一些信息的网站
因此,如果您更改默认扩展,再加上框架中一些可能暴露您的手的静态,那么您的MVC框架可能完全未知
甚至将扩展名更改为php
或aspx
也可能是个好主意
事实上,这是通过模糊处理实现的安全性,但这并不是良好安全性的反面。在一个已经安全的系统上通过模糊性来分层安全性可能会有所帮助。模糊处理的安全性有其有趣的优点和缺点,当它们都可以在互联网上使用时。我不知道它有多神奇。它的全部功能就是拥有一个主调度servlet,并可能进行一些URL重写,以避免使用/myservlet/前缀。参见Tuckey URL重写。我想是Struts 1。这么久以前我一定忘了。那些日子对Java Web开发人员来说并不太好。@Adam当时(~2001年),我对Struts1很满意。今天,使用它会让我哭泣。2001年我们很幸运拥有Struts 1!有了Struts 2,我们都可以快乐!为希望从“.do”迁移并具有友好URL的用户提供的友好说明。使用servlet路径而不是扩展ie/do/login,然后使用Tuckey筛选器URL重写来生成/do/login=>/login.True,URL重写(通过mod_重写或Tuckey的筛选器)就可以了。这很愚蠢,这是不可原谅的。这是默默无闻的安全。真的,这是混淆。默默无闻不是良好安全的对立面。拒绝泄露客户根本不需要知道的信息是一种良好的做法。在我的公司,我们删除了所有的Web服务器和应用服务器头,并用一个虚构的字符串替换它。即使是晦涩难懂的网站,漏洞扫描的数量也太多了,你能做的任何让自己成为目标的事情都是积极的。默认情况下,响应头足以找出问题所在。