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

标签 tomcat servlets web-applications servlet-filters

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

应用名称:“公司”

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

现在我可以使用访问 Url 访问我的“公司”应用程序,但现在我想访问“公司”web 应用程序,如果我输入任何大小写,即(公司、公司、公司等)。

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

<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 filter,这样可以得到很多组合 处理大小写混合的应用程序名称。

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

最佳答案

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

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

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

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

关于tomcat - 处理 Url 中不区分大小写的应用程序名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34332193/

相关文章:

c# - Mondrian.war 在 mondrian-3.7 中丢失了吗?如何部署mondrian 3.7

servlets - jetty 6 index.html 欢迎页面无法正常工作

web-applications - Web应用程序中子域的优点/缺点

web-applications - 如何知道 Font Awesome 的内容专用区 (PUA)

java - Tomcat 6.0 上的 SSL

json - 在 tomcat Web 服务器中托管 apple-app-association-file

tomcat - 部署在 Tomcat 6 上的 WebObjects 5.4.3 导致随机 StackOverflowError

servlets - 使用 doGet 将根路径中的默认主页更改为 servlet

servlets - Servlet 与 Bean

java - BlazeDS vs GraniteDS - 2 年后