0

是的,又一个用 java 编写的 url 缩短器,因为我想要自己的,为什么不呢。目前一切正常,只是不是我想要的方式。总之,整个项目中只有一个映射到“/”的servlet。没有涉及任何框架或任何花哨的东西,这只是一个基本的 Servlet“项目”。在 doPost 上创建了一个新的 shortUrl,您会收到一个 JSON 响应。在 doGet 上,如果 URL 是“/*{any_valid_short_url}”,则发送重定向(如下)。

response.sendRedirect("longUrlString")

我遇到的问题是索引页面,当调用相同的 doGet 时,我检查请求的路径,如果它是“/”,那么目前,我使用 FileInputStream 并通过 response.getOutputStream 将 index.html 页面输出( ),在我看来这很 hacky。我想改用 requestDispatcher,但是当我尝试实现它时(如下),我进入了重定向循环,并且 servlet 容器(jetty 或 tomcat)堆栈溢出。

getServletContext().getRequestDispatcher("/index.html").forward(req, res);

我对这是如何完成的有什么误解吗?该项目目前托管在我的 github 页面上。 https://github.com/justinmburrous/ShortUrl

4

2 回答 2

0

您需要使此检查范围更窄,因为对于所有请求,此条件都为真,因此所有请求都会一次又一次地转发到“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 - 产生无限循环

于 2013-03-05T11:20:49.210 回答
0

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

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

于 2013-03-05T22:56:25.430 回答