将特定的servlet映射为Tomcat中的默认servlet

我正在尝试实现一个获取原始请求的servlet,并决定处理它们,或将它们转发到另一个后端服务器。它类似于负载均衡器,其中接收到的请求被转发到(在我的情况下为2)目的地之一。目的地之一是远程的(在另一台主机上)。此外,这些请求可能来自根(http://mycompany.com/)。

由于我想获取原始请求,因此实现了自己的servlet(子类HttpServlet),并且效果很好。我的servlet看起来像:

public class MyProxyServlet extends HttpServlet {

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

processOrForward(req, resp);

}

// also doGet(), doHead(), ...

}

由于我要处理的服务可能会将请求发送到根,因此我想将我的servlet映射为默认servlet,从而接收任何没有显式servlet映射的请求。假设我的servlet的名称是“myservlet”,并且与另一个servlet“

foo”一起运行,我希望所有以http://mycompany.com/foo/ …

形式出现的请求都可以传递给foo,否则(例如,/,/ bar /…、/myservlet/…)更改为“myservlet”。

这是我的 web.xml

<web-app>

<servlet>

<servlet-name>ProxyServlet</servlet-name>

<servlet-class>com.mycompany.MyProxyServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>ProxyServlet</servlet-name>

<url-pattern>/*</url-pattern>

</servlet-mapping>

</web-app>

在上面的 web.xml中 ,对于url-pattern我尝试了

"/" and "/*" and empty (i.e., <url-pattern></url-pattern>), all behave the same -->

Requests to root (/)goes to tomcat's default servlet

Requests to /myservlet/... are handled by "myservlet"

Requests to /fubar/... are always 404

有没有一种方法可以将我的servlet设置为默认值。也就是说,任何未专门映射到Servlet的请求都会变为我的请求(甚至可以接受所有请求,因为我可以将此Servlet部署在其自己的容器中)。万一重要,我在Ubuntu12.10上使用Tomcat 7.0.30。

回答:

这对您应该有用。

摘自

回答:

12.2映射规范

在Web应用程序部署描述符中,以下语法用于定义映射:

  • 以字符开头/并以/*后缀结尾的字符串用于 。

  • *.前缀开头的字符串用作 。

  • 空字符串("")是一种

    ,即形式的请求http://host:port/<contextroot>/。在这种情况下,路径信息为/,而servlet路径和上下文路径为空字符串("")

  • 仅包含/字符的字符串表示应用程序的

    。在这种情况下,Servlet路径是请求URI减去上下文路径,并且路径信息为null。

  • 所有其他字符串仅用于 。

另外,请阅读《Head FirstServlets&JSP:通过Sun认证的Web组件开发人员考试(第二版)(引用)一书中的简短示例,以很好地解释这个解释:

三种类型的<url-pattern>元素

1)完全匹配

例:

<url-pattern>/Beer/SelectBeer.do</url-pattern>

  • 必须以斜杠(/)开头。
  • 可以有扩展名(如.do),但这不是必需的。

2)目录匹配

例:

<url-pattern>/Beer/*</url-pattern>

  • 必须以斜杠(/)开头。
  • 始终以斜杠/星号(/*)结尾。

3)延长比赛

例:

<url-pattern>*.do</url-pattern>

  • 必须以星号(*)开头(切勿以斜杠开头)。
  • 星号后必须带有点扩展名(.do,.jsp等)。

URL模式代表 逻辑/虚拟结构 ,即 。


如您在评论中所述,如果您愿意,

我希望host:port命中我的servlet,而不是默认的tomcat servlet

然后在此处查看解决方案:

如何使我的Web应用程序成为Tomcat默认应用程序

换句话说,您想要的是 的路径,这意味着Tomcat默认应用程序的应用程序上下文。

从以上链接引用:

在标准的Tomcat安装中,您会注意到在同一目录(CATALINA_BASE)/ webapps /下,有一个名为 的目录(即使在Windows下,大写字母也很重要)。。诀窍是将您的应用程序放在其位置。

以上是 将特定的servlet映射为Tomcat中的默认servlet 的全部内容, 来源链接: utcz.com/qa/423786.html

回到顶部