Vir*_*eal 14 java tomcat servlets url-pattern
我正在尝试实现一个获取原始请求的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(), ...
}
Run Code Online (Sandbox Code Playgroud)
由于我想要处理的服务可以向root发送请求,我想将我的servlet映射为默认的servlet,从而接收任何没有显式servlet映射的请求.假设我的servlet名称是"myservlet",并且正在另一个servlet"foo"的一侧运行,我希望所有以http://mycompany.com/foo/ ... 形式发出的请求都被传递给foo,以及一切else(例如/,/ bar/...,/ myservlet/...)到"myservlet".看一下之前的帖子(例如,这里和这里的根映射,或者这里的 url重写),我以为我想出来了,但它不起作用.
这是我的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>
Run Code Online (Sandbox Code Playgroud)
在上面的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
Run Code Online (Sandbox Code Playgroud)
有没有办法将我的servlet变为默认值.即,任何未专门映射到servlet的请求都会出现(我甚至可以接收所有请求,因为我可以在自己的容器中部署这个servlet).如果重要,我在Ubuntu 12.10上使用Tomcat 7.0.30.
inf*_*k01 33
这应该对你有用.
第12章将请求映射到Servlet
12.2映射规范
在Web应用程序部署描述符中,以下语法用于定义映射:
以字符开头
/并以/*后缀结尾的字符串用于 路径映射.以
*.前缀开头的字符串用作扩展名映射.空字符串
("")是一种特殊的URL模式,它完全映射到应用程序的上下文根,即表单的请求http://host:port/<contextroot>/.在这种情况下,路径信息是/,并且servlet路径和上下文路径是空字符串("").仅包含
/字符的字符串表示应用程序的"默认"servlet.在这种情况下,servlet路径是请求URI减去上下文路径,路径信息为null.- 所有其他字符串仅用于完全匹配.
另外,请阅读Head First Servlets&JSP:Passing the Sun认证Web组件开发人员考试(第2版)(引用)一书中的简短示例:
三种类型的
<url-pattern>元素1)完全匹配
例:
<url-pattern>/Beer/SelectBeer.do</url-pattern>
- 必须以斜杠(
/)开头.- 可以有扩展名(如.do),但不是必需的.
2)DIRECTORY匹配
例:
<url-pattern>/Beer/*</url-pattern>
- 必须以斜杠(
/)开头.- 始终以斜杠/星号(
/*)结尾.3)EXTENSION匹配
例:
<url-pattern>*.do</url-pattern>
- 必须以星号(
*)开头(绝对不带斜线).- 在星号之后,它必须有一个点扩展名(.do,.jsp等).
重要说明:
URL模式表示逻辑/虚拟结构,即指定的模式(路径)不需要物理存在.
UPDATE
如果您愿意,正如您在评论中所说,
我想要host:port来命中我的servlet,而不是默认的tomcat servlet
然后在这里看到解决方案:
如何使我的Web应用程序成为Tomcat默认应用程序
换句话说,您想要的是没有应用程序上下文的路径,这意味着Tomcat默认应用程序的应用程序上下文.
从以上链接引用:
在标准的Tomcat安装中,您会注意到在同一目录(CATALINA_BASE)/ webapps /下,有一个名为ROOT的目录 (即使在Windows下,大写也很重要).这是当前Tomcat默认应用程序的驻留,即用户调用时立即调用的应用程序
http://myhost.company.com[:port].诀窍是将您的应用程序放在适当的位置.
| 归档时间: |
|
| 查看次数: |
33689 次 |
| 最近记录: |