Java 在servlet规范3.0下传递servlet配置参数

Java 在servlet规范3.0下传递servlet配置参数,java,jakarta-ee,tomcat,servlet-filters,servlet-3.0,Java,Jakarta Ee,Tomcat,Servlet Filters,Servlet 3.0,当使用注释而不是web.xml文件时,如何处理通常可以从对象读取的servlet init/config参数?即 @WebFilter("/sample") public class MyServlet { public void init() throws ServletException { String value = getServletConfig().getInitParameter("key"); // or value =

当使用注释而不是web.xml文件时,如何处理通常可以从对象读取的servlet init/config参数?即

@WebFilter("/sample")
public class MyServlet {

    public void init() throws ServletException {
        String value = getServletConfig().getInitParameter("key");
        // or
        value = getServletContext().getInitParameter("key");
    }
}
或在过滤器的情况下:

public class MyFilter implements Filter {

    public void init (FilterConfig filterConfig) throws ServletException {
        filterConfig.getInitParameter("key");
    }

}
更新:我知道您可以在注释中硬编码配置参数,但我不想在代码中硬编码配置设置。例如,此servlet无法在两个应用程序之间共享:

@WebFilter("/sample", initParams = {@InitParam(name = "database_host", value = "blah.com")})
public class MyServlet {

    public void init() throws ServletException {
        String value = getServletConfig().getInitParameter("database_host");
    }
}

我想这就是你的意思

@Servlet(urlMappings={"/MyApp"}, initParams ={@InitParam(name="lang", value="english")})
public class MyServlet {

你可以参考这个

我想这就是你的意思

@Servlet(urlMappings={"/MyApp"}, initParams ={@InitParam(name="lang", value="english")})
public class MyServlet {
你可以参考这个

编辑:

要回答更新的问题,您有两个选项:

  • 使用基于
    web.xml
    的init参数的旧模式

  • 只需在另一个项目中创建servlet的虚拟扩展(子类),并分配新的init参数

  • 编辑:

    要回答更新的问题,您有两个选项:

  • 使用基于
    web.xml
    的init参数的旧模式

  • 只需在另一个项目中创建servlet的虚拟扩展(子类),并分配新的init参数


  • 硬编码服务器和/或依赖于应用程序的配置设置不是一种糟糕的做法吗?据我所知,注释正在取代先前通过
    xml
    文件完成的配置。彼此彼此。之前这是在
    web.xml
    文件中进行的,现在它在servlet本身中维护。将注释视为配置。使用注释的好处在于“所有相关信息现在都保存在同一个文件中,而不是浏览多个文件”。如果您出于某种特定原因想使用旧模式,它仍然是好的和有效的。硬编码服务器和/或依赖于应用程序的配置设置不是坏做法吗?据我所知,注释正在替换先前通过
    xml
    文件完成的配置。彼此彼此。之前这是在
    web.xml
    文件中进行的,现在它在servlet本身中维护。将注释视为配置。使用注释的好处在于“所有相关信息现在都保存在同一个文件中,而不是浏览多个文件”。如果您出于某种特定的原因想使用旧模式,它仍然是好的和有效的。硬编码服务器和/或依赖于应用程序的配置设置不是坏做法吗?包括web.xml(至少在tomcat中)停止注释工作。@Jacob:您的web.xml上指定的servlet版本是什么?硬编码服务器和/或依赖于应用程序的配置设置不是不好的做法吗?包括web.xml(至少在tomcat中)停止注释工作。@Jacob:您的web.xml上指定的servlet版本是什么?我认为这里没有任何中间立场,无论是使用web.xml还是注释。我认为这里没有任何中间立场,无论是使用web.xml还是注释。