将特定的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