gpt4 book ai didi

java - 在构建/打包/部署时禁用 servlet,在运行时启用?

转载 作者:搜寻专家 更新时间:2023-11-01 01:25:01 25 4
gpt4 key购买 nike

假设我有一个简单的“Hello world”类型的 servlet,配置了注解 @WebServlet("/hello")

我想在构建/部署时禁用它,这样就不可能“调用”servlet。我该怎么做?

然后,通过配置文件,我希望能够在运行时启用 servlet,以便客户端可以使用它。我该怎么做?

这两种可能吗?

最佳答案

您无法在运行时通过标准 API 启用 servlet。它最多只能在 web.xml 中的构建期间或在部署期间由 ServletContext#addServlet() 启用.您最好的选择是始终启用它并根据每个请求控制它。您可以使用 servlet filter为此。

首先给servlet起一个名字。

@WebServlet(urlPatterns="/hello", name="yourServlet")
public class YourServlet extends HttpServlet {
// ...
}

这样您就可以轻松地将过滤器直接映射到它,而不必担心 servlet 的 URL 模式。

@WebFilter(servletNames="yourServlet")
public class YourFilter implements Filter {
// ...
}

在您的过滤器中,只需根据您的配置文件设置决定是继续链,还是返回 404。

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if (isYourConfigurationFileSettingSet()) {
chain.doFilter(request, response);
} else {
((HttpServletResponse) response).sendError(HttpServletResponse.SC_NOT_FOUND);
}
}

根据目前提供的信息,isYourConfigurationFileSettingSet() 部分无法详细回答。如果您实际上也无法弄清楚,请前往 Where to place and how to read configuration resource files in servlet based application?

关于java - 在构建/打包/部署时禁用 servlet,在运行时启用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42648919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com