处理 URL 中不区分大小写的应用程序名称

Posted

技术标签:

【中文标题】处理 URL 中不区分大小写的应用程序名称【英文标题】:Handling Case Insensitive Application name in the Url 【发布时间】:2016-03-23 18:43:12 【问题描述】:

我正在开发托管在 Tomcat 上的 Java WebApplication。我在 Tomcat 上托管了以下 Web 应用程序:

应用程序名称:“公司”

访问网址:http://192.28.123.20:8085/Companies

现在我可以使用访问 URL 访问我的“公司”应用程序,但现在我想访问“公司”网络应用程序,如果我输入任何情况,即(公司、公司、公司等)。

我知道我们可以使用“ROOT”来处理上述要求,为此我需要在 ROOT 中有一个 servlet 过滤器,并在“web.xml”中有一个 Url 映射,如下所示:

<filter>
    <display-name>BaseFilter</display-name>
    <filter-name>ContextFilter</filter-name>
    <filter-class>sample.context.filter.BaseFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>BaseFilter</filter-name>
    <url-pattern>/companies</url-pattern>
    <url-pattern>/comPAnies</url-pattern>
    <url-pattern>/ComPaNIes</url-pattern>
    <url-pattern>/companies/</url-pattern>
    <url-pattern>/comPAnies/</url-pattern>
    <url-pattern>/ComPaNIes/</url-pattern>
  </filter-mapping>

上面的 url-pattern 映射是点击 ROOT 文件夹中的 Servlet 过滤器,像这样我可以得到很多组合来 处理混合大小写的应用程序名称。

任何人都可以告诉我,我是否遵循了处理需求的正确方法? 如果有任何其他方式来处理这种混合大小写要求,请建议我。

【问题讨论】:

【参考方案1】:

假设您的应用程序的上下文根是 /*,您可以将过滤器映射设置为 /*,然后在调用过滤器时您可以这样做:

if (request.getServletPath().toUpperCase().equals("COMPANIES") 
      request.getRequestDispatcher("/Companies").forward(request.response)

关键是过滤器要运行容器,必须为入站请求找到一个有效的目标。为了确保这一点,您可以添加一个默认 servlet(映射为“/*”的 servlet)。如果此 servlet 被调用,则将请求转发到您的欢迎页面。

另请注意,代码 sn-p 不允许在请求中包含任何路径信息,因此如果您需要允许,请从 request.getPathInfo() 获取路径信息并将其添加到“/Companies”你得到请求调度程序。

【讨论】:

由于一些后台请求正在进行,我不能使用“/*” 所以“公司”是上下文根?

以上是关于处理 URL 中不区分大小写的应用程序名称的主要内容,如果未能解决你的问题,请参考以下文章

c#中不区分大小写的XML解析器

VBA代码在MS Access中不区分大小写的过滤器

Rails 模型中不区分大小写的搜索

grails中不区分大小写的搜索

Entity Framework 7 中表和属性的不区分大小写的名称

SQL语句中模糊查询中不区分大小写怎么写?如:select × from table where number like‘%PK%’