Fork me on GitHub

Servlet bridge

Intro

Ninja的设计本身不依赖于特定的Web容器技术. 您可以在任何servlet容器中运行Ninja-也可以作为Netty应用程序运行.

但是,实际上,Ninja倾向于在基于servlet的容器​​中运行99%. 雄猫,码头等. 许多用户确实希望有一个清晰的迁移路径.

您的组织可能已经有很多要重用的Servlet. 或您编写的过滤器,或您想要与Ninja结合的基于servlet的插件.

Servlet桥支持此用例,并且使Servlet技术和Ninja结合起来以实现两全其美的方法非常简单.

The Servlet bridge

向Ninja添加servlet和过滤器的最好方法是使用/conf/ServletModule.java上的Ninja的SevletModule .

public class ServletModule extends com.google.inject.servlet.ServletModule {

    @Override
    protected void configureServlets() {

        bind(LegacyServletFilter.class).asEagerSingleton();
        bind(NinjaServletDispatcher.class).asEagerSingleton();

        filter("/*").through(LegacyServletFilter.class);
        serve("/*").with(NinjaServletDispatcher.class);
    }

}

我们使用任意Servlet过滤器(LegacyServletFilter)来完全过滤忍者之外的内容. 当然,这是直接使用Ninja过滤器的更好方法. 但是,如果您拥有大型的旧版应用程序,则可以将两种技术结合起来以实现平稳过渡.

请注意:ServletFilter.java是可选的. 如果文件不存在,所有请求将由Ninja处理.

Note of caution

1)使用servlet和servlet过滤器确实很方便. 但是存在一个很大的危险:如果您不知道自己在做什么,那么最终可能会遇到无法扩展的框架. 请记住:Ninja是无状态的,不使用和Servlet会话. 如果您将Ninja与使用Servlet会话的Servlet结合使用,则您将无法再依靠Ninja应用程序轻松扩展这一事实.

为Ninja编写模块并使用Ninja的会话机制来规避该问题通常是一个更好的主意.

2)ServletModule仅在Ninja实际上在servlet容器中运行时才起作用. 如果您在Netty中运行Ninja,则将无法正常工作,因为Netty不了解Servlet规范.


by  ICOPY.SITE