2

我需要ELResolver为 Google App Engine 项目注册一个自定义项。

因为它必须在收到任何请求之前注册,如 Javadoc 所指定

在应用程序收到客户端的任何请求后注册 ELResolver 是非法的。如果在该时间之后尝试注册 ELResolver,则会引发 IllegalStateException。

我正在使用 ServletContextListener:

public class RegisterCustomELResolver implements ServletContextListener { 

    @Override 
    public void contextInitialized(ServletContextEvent sce) { 
        ServletContext context = sce.getServletContext(); 
        JspApplicationContext jspContext = 
            JspFactory.getDefaultFactory().getJspApplicationContext(context); 
        jspContext.addELResolver(new MyELResolver()); 
    } 

    ... 
}

问题是JspFactory.getDefaultFactory()返回总是空的。我已经填写了错误报告。任何解决方法的想法?

4

1 回答 1

4

我不确定哪个 servletcontainer GAE 使用“幕后”(Jetty?Tomcat?),但这在 Tomcat 6.x 中可以识别为一个错误。JspRuntimeContext一种解决方法是在获取工厂之前强制加载自己:

Class.forName("org.apache.jasper.compiler.JspRuntimeContext");

看看这个或类似的黑客是否有帮助。

于 2010-03-31T11:59:15.110 回答