servlet url映射

时间:2011-12-15 09:01:21

标签: java-ee servlets servlet-filters

我有两个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:如果问题不明确请告诉我。

1 个答案:

答案 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()代替。