如何修复无限重定向到Servlet?

时间:2016-05-15 18:27:54

标签: java jsp servlets

我有一个Servlet映射如下:

@WebServlet("/test/*")

这样,访问localhost:8080/test/1localhost:8080/test/99的所有内容都在同一个Servlet中处理并转发到localhost:8080/test/1/test.html

问题在于 - 我的转发属于同一个通配符规则test/* - 并导致无限循环。

我试图解决这个问题但没有运气。我一直在考虑添加某种计数器来跟踪调用Servlet的次数,但如果我想正确地重用Servlet,这只会限制我并产生另一个问题。

所有的帮助都表示赞赏,因为我整天都被困在这里。谢谢谢谢谢谢!

@WebServlet("/test/*")
public class WildcardTest extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println(request.getRequestURL());
            RequestDispatcher view = request.getRequestDispatcher("test.html");
            view.forward(request, response);    
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

分辨率: 我使用WEB-INF目录来存储你的html视图。您可以在不转到任何servlet映射的情况下转发。我认为这会解决它,但它仍然给我同样的问题。

 RequestDispatcher view = request.getRequestDispatcher("WEB-INF/views/login.html");

请求http://localhost:8080/test/test时的输出:

2016-05-15T21:12:37.798+0200|Info: http://localhost:8080/test/test
2016-05-15T21:12:37.798+0200|Info: http://localhost:8080/test/WEB-INF/views/login.html
2016-05-15T21:12:37.798+0200|Info: http://localhost:8080/test/WEB-INF/views/WEB-INF/views/login.html
2016-05-15T21:12:37.798+0200|Info: http://localhost:8080/test/WEB-INF/views/WEB-INF/views/WEB-INF/views/login.html
2016-05-15T21:12:37.798+0200|Info: http://localhost:8080/test/WEB-INF/views/WEB-INF/views/WEB-INF/views/WEB-INF/views/login.html

1 个答案:

答案 0 :(得分:1)

使用WEB-INF目录存储您的html视图。你可以转发那里而不需要任何servlet映射。