我有一个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
答案 0 :(得分:1)
使用WEB-INF
目录存储您的html视图。你可以转发那里而不需要任何servlet映射。