2013-03-04 54 views
0

是的,又一个用java编写的URL缩短器,因为我想要我自己的,并且因为为什么不。目前一切正常,只是不是我想要的。简而言之,整个项目中只有一个servlet映射到“/”。没有涉及的框架,或任何幻想,这只是一个基本的Servlet“项目”。在doPost上创建一个新的shortUrl,并获得JSON响应。在doGet上,如果URL是“/ * {any_valid_short_url}”,则发送重定向(在下面)。Url Shortener重定向到index.html

response.sendRedirect("longUrlString") 

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

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

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

+0

什么是getServletContext()返回?你应该使用'req.getRequestDispatchter(...)' – 2013-03-04 19:32:57

+0

糟糕...但仍然是由大量重定向导致的相同问题,堆栈溢出。 – 2013-03-04 21:47:58

+0

请发送代码,您将获得RequestDispatcher。 – 2013-03-04 21:54:46

回答

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处理。 您应该将网址映射到更具体的范围。

RequestDispatcher - forward - produces infinite loop

+0

我不知道我明白你在说什么。目前(这是在没有RequestDispatcher的主分支),如果你请求http://jburr.co/你得到的索引页(通过hacky输出流),但是如果你请求jburr.co/c你得到cnn.com ,我刚刚添加了一个测试页面。因此,检查请求路径的if()正常工作。 – 2013-03-05 19:13:56