Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在构建/打包/部署时禁用servlet,在运行时启用?_Java_Servlets_Wildfly 9 - Fatal编程技术网

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

Java 在构建/打包/部署时禁用servlet,在运行时启用?,java,servlets,wildfly-9,Java,Servlets,Wildfly 9,假设我有一个简单的“helloworld”类型的servlet,配置了注释@WebServlet(“/Hello”) 我想在构建/部署时禁用它,因此无法“调用”servlet。我该怎么做 然后,通过一个配置文件,我希望能够在运行时启用servlet,以便客户端可以使用它。我该怎么做 这两种方法都可能吗?不要通过注释定义servlet,而是在文件中进行定义。此文件的不同版本可能允许您启用或不启用servlet 应在生成和部署时选择要使用的web.xml版本。也许是通过Maven的个人资料或类似的方

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

我想在构建/部署时禁用它,因此无法“调用”servlet。我该怎么做

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


这两种方法都可能吗?

不要通过注释定义servlet,而是在文件中进行定义。此文件的不同版本可能允许您启用或不启用servlet


应在生成和部署时选择要使用的web.xml版本。也许是通过Maven的个人资料或类似的方式。查看下面的链接,了解一些相关的想法:

如果您想要真正的运行时控制,那么您可能需要进行一些自定义编码。一个过滤器(或者,我想,servlet本身)可以检查属性的值,并返回一个带有HTTP错误代码的响应(我想403可能会比较合适;404可能不太合适,但如果您想让它看起来好像servlet在该配置中不存在,它会工作……)

您不能通过标准API在运行时启用servlet。它最多只能在
web.xml
中的构建期间或部署期间启用。您最好的选择是始终启用它,并根据每个请求控制它。你可以用a来做这个

首先给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()部分。如果您实际上也无法理解这一点,那么请转到

,这肯定是我考虑过的一种可能性,但我对此不屑一顾,因为打包WAR文件时很容易从多个
web.xml
文件中选择一个,但我不知道是否可以在运行时选择,或者如何选择。