如何在没有部署描述的情况下在Java EE中定义欢迎页面



在简单的Java EE 8 Web应用程序中,并且由于部署描述符不是强制性的,并且由于ServletFilter可以在用@WebListener注释的ServletContextListener中注册,因此我如何定义无需依赖web.xml文件的欢迎页面列表吗?

很难证明负面,但我认为答案是您仍然需要使用EE 8的欢迎文件的部署描述符,这等于Servlet 4.0。

我无法确定证明这一点,但是通过仔细阅读 10.10欢迎文件 JSR-369(Servlet 4.0规范)的详细介绍,这是对欢迎如何欢迎的,这是强烈建议的列表工作:

如果Web容器收到有效的部分请求,则Web容器 必须检查部署中定义的欢迎文件列表 描述符。 欢迎文件列表是部分URL的有序列表 没有落后或领先/。Web服务器必须附加每个欢迎 用在部署描述符中指定的顺序中的文件 部分请求并检查战争中的静态资源是否是 映射到该请求URI。如果找不到匹配,则必须 再次将每个欢迎文件附加在" 部署到部分请求的描述符,并检查Servlet是否是 映射到该请求URI。网络容器必须将请求发送到 与战争相匹配的第一个资源。容器可以发送 请求以前向,重定向或 容器特定的机制,与直接无法区分 要求。

如果以描述的方式找不到匹配的欢迎文件, 容器可以以合适的方式处理请求。

特别是请注意第一个和最后的句子;该规范没有提及开发人员可用的替代方法。在欢迎列表中没有任何比赛的情况下,容器本身决定该怎么做。

因此,尽管部署描述符并非总是强制性的,但即使您想获得欢迎文件,也是必须的。讨论您何时需要部署描述符:

如果没有Web应用程序,则不需要包含Web.xml 包含任何servlet,过滤器或侦听器组件或正在使用 注释要声明相同。换句话说 仅包含静态文件或JSP页面不需要Web.xml 在场。

这些有关Servlet 3.0欢迎列表的帖子也可能很感兴趣:

  • servlet 3.0注释

  • 如何定义和在Servlet 3.0的Web.xml- less?

使用Servlet类上的@WebServlet注释。

您可以将其用作@WebServlet("/Path"),以使Servlet在您的domain/context-root/path。

如果要让Servlet出现在多个URL中,则可以使用@WebServlet(urlPatterns={"/Path/*", "/APath", "/"}

有关注释的更多详细信息,请参见http://www.codejava.net/java-ee/servlet/webservlet-antovlet-annotation-examples。

您可以添加一个servlet滤波器,该滤镜映射到url'/&quot'仅转到您所需的欢迎文件:

import java.io.IOException;
import javax.inject.Inject;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
@WebFilter(filterName = "WelcomeFilter", urlPatterns = { "/" })
public class WelcomeFilter extends Object implements Filter {
    @Inject
    ServletContext context;
    public WelcomeFilter() {
        super();
    }
    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
        context.getRequestDispatcher("/welcome-file.html").forward(req, resp);
        chain.doFilter(req, resp);
    }
}

相关内容

  • 没有找到相关文章

最新更新