Java Url缩短器重定向到index.html

Java Url缩短器重定向到index.html,java,tomcat,servlets,jetty,stack-overflow,Java,Tomcat,Servlets,Jetty,Stack Overflow,是的,还有一个用java编写的url缩短器,因为我想要我自己的,因为为什么不。目前一切正常,只是不是我想要的方式。简而言之,在整个项目中只有一个servlet映射到“/”。没有涉及任何框架,也没有任何花哨的东西,这只是一个基本的Servlet“项目”。在doPost上,会创建一个新的短URL,并得到一个JSON响应。在doGet上,如果URL为“/*{any_valid_short_URL}”,则发送重定向(如下) 我遇到的问题是索引页面,当调用同一个doGet时,我会检查请求的路径,如果它是“

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

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

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

有没有什么事情是我不理解的?该项目当前位于我的github页面上

您需要将此检查范围缩小,因为对于所有请求,此条件为true,因此对于所有请求,都会一次又一次地转发到“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映射到更具体的范围


好的,多亏了


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

getServletContext()返回什么?您应该使用
req.getRequestDispatcher(…)
Oops。。。但是仍然存在同样的问题,堆栈溢出,这是由大量的重定向引起的。请在获取RequestDispatcher的地方发布代码。当然,我已经更新并评论了正在工作的内容(但有黑客行为),以及新的请求分派器尝试。我尝试了index.html/index.html的多种变体,并检查了它的位置。我还尝试了welcome文件,但是像这样的一个catch-all servlet出现了问题。我不确定我是否明白你在说什么。目前(这是在主分支上,没有RequestDispatcher),如果您请求获取索引页(通过hacky输出流),但是如果您请求jburr.co/c,则获取cnn.com,这是我刚刚添加的测试页。因此,检查请求路径的if()正在正常工作。
    if(requestedPath.equals("/")){

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