我有两个servlet(MainServlet和LoginServlet),MainServlet处理所有请求,并将其映射到/*
。 LoginServlet进程请求并映射到/ login。我有一个html文件/html/login.html。现在我想在显示http://localhost:8080/app/login时显示此html文件。
我正在使用LoginServlet doGet
方法httpServletRequest.getRequestDispatcher("login/login.html").include(httpServletRequest, httpServletResponse);
但此重定向请求MainServlet
。我无法将MainSerlvet
的网址映射从/*
更改为其他内容。
任何想法我如何才能达到上述目标? PS:如果问题不明确请告诉我。
答案 0 :(得分:1)
您已将MainServlet
映射到全局URL模式/*
,这对于servlet来说是一个非常糟糕的做法(这也包括CSS / JS / images /等静态资源!)。这也将拦截所有转发和包含的请求。您需要将MainServlet
映射到更具体的网址格式,例如/main/*
,/app/*
或类似的内容,并创建Filter
映射到/*
并将所有非/login
请求转发给MainServlet
String uri = ((HttpServletRequest) request).getRequestURI();
if (uri.startsWith("/login/")) {
// Just continue to login servlet.
chain.doFilter(request, response);
} else {
// Forward to main servlet.
request.getRequestDispatcher("/main" + uri).forward(request, response);
}
顺便说一句,使用RequestDispatcher#include()
显示视图也不完全正确。您应该使用RequestDispatcher#forward()
代替。