【发布时间】:2013-02-19 00:04:11
【问题描述】:
是的,又一个用 java 编写的 url 缩短器,因为我想要自己的,为什么不呢。目前一切正常,只是不是我想要的方式。总之,整个项目中只有一个映射到“/”的servlet。没有涉及任何框架或任何花哨的东西,这只是一个基本的 Servlet“项目”。在 doPost 上创建了一个新的 shortUrl,您会收到一个 JSON 响应。在 doGet 上,如果 URL 是“/*{any_valid_short_url}”,则会发送重定向(如下)。
response.sendRedirect("longUrlString")
我遇到的问题是索引页面,当调用相同的 doGet 时,我检查请求的路径,如果它是“/”,那么目前,我使用 FileInputStream 并通过响应将 index.html 页面输出.getOutputStream(),在我看来这很 hacky。我想改用 requestDispatcher,但是当我尝试实现它时(如下),我进入了重定向循环,并且 servlet 容器(jetty 或 tomcat)堆栈溢出。
getServletContext().getRequestDispatcher("/index.html").forward(req, res);
我对这是如何完成的有什么误解吗?该项目目前托管在我的 github 页面上。 https://github.com/justinmburrous/ShortUrl
【问题讨论】:
-
getServletContext() 返回什么?你应该使用
req.getRequestDispatchter(...) -
糟糕...但仍然是同样的问题,堆栈溢出,由大量重定向引起。
-
请在您获得 RequestDispatcher 的位置发布代码。
-
当然,所以我已经更新并评论了什么是有效的(但很老套),以及新的请求调度程序尝试。我尝试了 index.html /index.html 的多种变体,并检查了它的位置。我也尝试过欢迎文件,但是像这样的 catch all servlet 有问题。 github.com/justinmburrous/ShortUrl/blob/request_dispatcher/src/…
标签: java tomcat servlets jetty stack-overflow