是的,还有另一个用java编写的url缩短器,因为我想要自己的,因为为什么不呢。目前一切正常,只是不是我想要的方式。简而言之,在整个项目中只有一个servlet映射到“/”。没有涉及的框架,或任何花哨的东西,这只是一个基本的Servlet“项目”。在doPost上创建了一个新的shortUrl,你得到一个JSON响应。在doGet上,如果网址为“/ * {any_valid_short_url}”,则会发送重定向(如下所示)。
response.sendRedirect("longUrlString")
我遇到的问题是索引页面,当调用相同的doGet时,我检查请求的路径,如果它当前是“/”,我使用FileInputStream并通过响应流式传输index.html页面.getOutputStream(),在我看来非常黑客。我想使用requestDispatcher,但是当我尝试实现它时(下面)我进入一个重定向循环,并且servlet容器(jetty或tomcat)堆栈溢出。
getServletContext().getRequestDispatcher("/index.html").forward(req, res);
我是否有些错误理解如何做到这一点?该项目目前托管在我的github页面上。 https://github.com/justinmburrous/ShortUrl
答案 0 :(得分: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处理。 您应该将网址映射到更具体的范围。
答案 1 :(得分:0)
好的,我已经想到了这一点,感谢 How to access static resources when mapping a global front controller servlet on /*
我的github页面包含工作代码以及Filter,modified servlet和web.xml for。