Jakarta ee servlet url映射

Jakarta ee servlet url映射,jakarta-ee,servlets,servlet-filters,Jakarta Ee,Servlets,Servlet Filters,我有两个servlet(MainServlet和LoginServlet),MainServlet处理所有请求及其映射到/*。LoginServlet处理请求,并将其映射到/login。我有一个html文件/html/login.html。现在我想在点击时显示这个html文件 在LoginServlet doGet方法中,我正在执行httpServletRequest.getRequestDispatcher(“login/login.html”).include(httpServletRequ

我有两个servlet(MainServlet和LoginServlet),MainServlet处理所有请求及其映射到
/*
。LoginServlet处理请求,并将其映射到/login。我有一个html文件/html/login.html。现在我想在点击时显示这个html文件

LoginServlet doGet
方法中,我正在执行
httpServletRequest.getRequestDispatcher(“login/login.html”).include(httpServletRequest,httpServletResponse)

但此请求将重定向到
MainServlet
。我无法将
mainservet
的url映射从
/*
更改为其他内容

你知道我怎样才能达到上述目标吗?
PS:如果问题不清楚,请告诉我。

您已经将
MainServlet
映射到了一个全局URL模式
/*
,这对于servlet来说是一个非常糟糕的实践(这还包括CSS/JS/images/等静态资源!)。这还将拦截所有转发和包含的请求。您需要将
MainServlet
映射到更具体的URL模式上,例如
/main/*
/app/*
或类似的模式,并创建一个映射到
/*
过滤器,并将所有非
/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()

您指出您的html文件位于“/html/login.html”,但看起来您得到的是“login/login.html”的请求调度程序。这是您的问题中的一个输入错误吗?否则,这可能至少是问题的一部分。