我正在尝试实现一个自定义的 Grizzly HttpHandler,但尝试简单地从传入请求中提取路径信息失败了。请参阅下面的最小示例:
public class PathInfoTest {
public static void main(String[] args) throws IOException {
final HttpServer httpServer = new HttpServer();
final NetworkListener nl = new NetworkListener(
"grizzly", "localhost", 8080);
httpServer.addListener(nl);
httpServer.getServerConfiguration().addHttpHandler(
new HandlerImpl(), "/test");
httpServer.start();
System.in.read();
}
private static class HandlerImpl extends HttpHandler {
@Override
public void service(Request request, Response response)
throws Exception {
System.out.println(request.getPathInfo());
System.out.println(request.getContextPath());
System.out.println(request.getDecodedRequestURI());
System.out.println(request.getHttpHandlerPath());
}
}
我认为这会告诉 Grizzly,URL 以“/test”开头的所有传入请求都应该由 处理HandlerImpl
,这似乎到目前为止有效。但是,在对 执行 GET 时http://localhost:8080/test/foo
,此代码将以下内容打印到stdout
:
null
/test
/test/foo
null
我主要关心的是第一个null
,它应该是路径信息。我希望它出现foo
在这个例子中,而不是null
. 有人可以向我解释一下:
- 为什么两者都有,
getHttpHandlerPath()
并在这个例子中getPathInfo()
返回?null
- 另外,我怀疑后者是第一个的结果,对吗?
- 如何在 Grizzly 中获取 URL 的“未路由”部分?