java如何修复对Servlet的无限重定向?
我有一个Servlet映射如下:
@WebServlet("/test/*")
因此,访问localhost:8080/test/1
或localhost: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 楼答案
使用
WEB-INF
目录存储html视图。您可以在不点击任何servlet映射的情况下转发到那里