小编MMW*_*MMW的帖子

如何在Spring Boot应用程序中配置Servlet初始化参数

我有一个使用Spring MVC的Spring引导应用程序(版本1.2.1RELEASE),我需要在JspServlet上设置开发初始化参数。在web.xml中,其外观如下所示:

<servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        ...
        <init-param>
            <param-name>development</param-name>
            <param-value>false</param-value>
        </init-param>
         ...
</servlet>
Run Code Online (Sandbox Code Playgroud)

我以为我可以做这样的事情:如何像在web.xml中那样配置spring-boot servlet?,但我不认为可以用新的JspServlet()替换新的MeteorServlet()并继续前进,因为我确定需要使用有效的ServletConfig调用JspServlet.init(ServletConfig config)。而且,当然,如果我在初始化时没有进行适当的尝试,该应用程序就会给我一个空指针异常(之所以发生,是因为私有的瞬时JspRuntimeContext rctxt;为空):

java.lang.NullPointerException: null
    at org.apache.jasper.servlet.JspServlet.periodicEvent(JspServlet.java:361)
    at org.apache.catalina.core.StandardWrapper.backgroundProcess(StandardWrapper.java:679)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1377)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1381)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1349)
    at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

此外,通过实现TomcatEmbeddedServletContainerFactory并提供一个Servlet来覆盖ServletConfig的init方法和getInitParameter方法,我们有一种真正的技巧来做到这一点,但它有点令人讨厌,所以我希望有更好的方法。任何指导将不胜感激。

最后,读取此init-param的代码在org.apache.jasper.EmbeddedServletOptions类中,并且似乎仅查找ServletConfig init参数,因此我无法将其指定为上下文参数(我认为)诸如server.context-parameters.name = value之类的很棒的东西。

String development = config.getInitParameter("development");
if (development != null) {
    if (development.equalsIgnoreCase("true")) {
        this.development = true;
    } else if (development.equalsIgnoreCase("false")) {
        this.development = false;
    } else {
        if (log.isWarnEnabled()) {
            log.warn(Localizer.getMessage("jsp.warning.development"));
        }
    }
Run Code Online (Sandbox Code Playgroud)

}

而且,如果我仍然尝试点击该应用程序,则会出现以下错误:

java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(String.java:646) …
Run Code Online (Sandbox Code Playgroud)

java spring servlets spring-mvc spring-boot

5
推荐指数
1
解决办法
6505
查看次数

标签 统计

java ×1

servlets ×1

spring ×1

spring-boot ×1

spring-mvc ×1