【问题标题】:Url Shortener redirects to index.html网址缩短器重定向到 index.html
【发布时间】: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


【解决方案1】:

您需要使此检查范围更窄,因为对于所有请求,此条件都为真,因此所有请求都会一次又一次地转发到“index.html”

    if(requestedPath.equals("/")){

    //tried with multiple variations of /index.html, renamed to jsp, etc...
RequestDispatcher dispatcher = request.getRequestDispatcher("index.html");
dispatcher.forward(request, response);    
    }

编辑: 由于您的 servlet 被映射为默认 servlet,因此所有转发或请求都将由该 Servlet 处理。 您应该将 url 映射到更具体的范围。

RequestDispatcher - forward - produces infinite loop

【讨论】:

  • 我不确定我是否明白你在说什么。目前(这是在没有 RequestDispatcher 的主分支上),如果您请求 jburr.co,您将获得索引页面(通过 hacky 输出流),但是如果您请求 jburr.co/c,您将获得 cnn.com,一个测试页面 I刚刚添加。所以检查请求路径的 if() 正在正常工作。
【解决方案2】:

好的,感谢How to access static resources when mapping a global front controller servlet on /*

我的 github 页面包含工作代码以及过滤器、修改后的 servlet 和 web.xml。

【讨论】:

    猜你喜欢
    • 2013-02-06
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    相关资源
    最近更新 更多