Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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
Spring mvc 如何在spring boot中设置上下文参数_Spring Mvc_Jetty_Spring Boot - Fatal编程技术网

Spring mvc 如何在spring boot中设置上下文参数

Spring mvc 如何在spring boot中设置上下文参数,spring-mvc,jetty,spring-boot,Spring Mvc,Jetty,Spring Boot,在经典的web.xml类型配置中,您可以像这样配置上下文参数 web.xml ... <context-param> <param-name>p-name</param-name> <param-value>-value</param-value> </context-param> ... 。。。 p-名称 -价值观 ... 这是如何在spring boot中实现的。我有一个需要参数的过滤器 我正在使用@Enab

在经典的web.xml类型配置中,您可以像这样配置上下文参数

web.xml

...
<context-param>
  <param-name>p-name</param-name>
  <param-value>-value</param-value>
</context-param>
...
。。。
p-名称
-价值观
...
这是如何在spring boot中实现的。我有一个需要参数的过滤器


我正在使用
@EnableAutoConfiguration
,并且在我的pom中包含了
spring boot starter jetty

您实际上可以使用Java配置来实现这一点。如果您有需要某些参数的筛选器,只需将它们放在application.yml(或.properties)中,使用config类中的
@Value
注入它们,并在
FilterRegistrationBean
中注册它们

例如:

@Value("${myFilterParam}")
private String myFilterParam;

@Bean(name="myFilter")
public FilterRegistrationBean myFilter() {
    FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new MyFilter());
    filterRegistrationBean.setInitParameters(Collections.singletonMap("p-name", "p-value"));
    return filterRegistrationBean;
}
还有用于
过滤器注册bean的JavaDoc:

更新

您可以在
SpringBootServletInitializer#onStartup()
方法中为servlet上下文注册参数。您的应用程序类可以扩展
SpringBootServletInitializer
,您可以覆盖
onStartup
方法并在那里设置参数。例如:

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        servletContext.setInitParameter("p-name", "p-value");
        super.onStartup(servletContext);
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }

}
@Bean
public InitParameterConfiguringServletContextInitializer initParamsInitializer() {
    Map<String, String> contextParams = new HashMap<>();
    contextParams.put("p-name", "-value");
    return new InitParameterConfiguringServletContextInitializer(contextParams);
}

另一种选择是按照Andy Wilkinson的建议定义
ServletContextInitializer
bean。

您可以通过声明
ServletContextInitializer
bean来设置整个
ServletContext
的参数:

@Bean
public ServletContextInitializer initializer() {
    return new ServletContextInitializer() {

        @Override
        public void onStartup(ServletContext servletContext) throws ServletException {
            servletContext.setInitParameter("p-name", "-value");
        }
    };
}
更新:在Spring Boot 1.2中,不再需要使用
ServletContextInitializer
。现在,您可以在
应用程序中的一行中配置
ServletContext
上的参数。属性

server.context_parameters.p-name=-value

还可以在配置中定义InitParameterConfiguringServletContextInitializer。例如:

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        servletContext.setInitParameter("p-name", "p-value");
        super.onStartup(servletContext);
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }

}
@Bean
public InitParameterConfiguringServletContextInitializer initParamsInitializer() {
    Map<String, String> contextParams = new HashMap<>();
    contextParams.put("p-name", "-value");
    return new InitParameterConfiguringServletContextInitializer(contextParams);
}
@Bean
public InitParameterConfiguringServletContextInitializer initParamsInitializer(){
Map contextParams=new HashMap();
contextParams.put(“p-name”,“-value”);
返回新的InitParameterConfiguringServletContextInitializer(contextParams);
}

自Spring Boot 2.0.0以来,他们更新了添加上下文参数的方法:

server.servlet.context-parameters.yourProperty.

您可以看到有关此的更多更新

抱歉,我是想询问上下文参数,而不是init参数。我已经更新了问题以反映这一点。请查看文档中的application.properties选项。你可以在一行中解析其中的许多:)。你的答案来自于我正在做的关于如何使用Spring Boot定义过滤器列表的一些相当广泛的研究。我一直在记录我的研究。你愿意对此发表评论吗?以下是链接:@Andy如何以编程方式为Servlet2.5设置上下文参数?Spring Boot不支持Servlet2.5。