在 Hasor 中可以直接使用 J2EE 的接口实现想要的功能,J2EE 的原始接口好处有两个

    • 使用框架的学习成本降低。
    • 可以不需要投入任何框架集成改造就可以将一系列经典的框架进来。

下面就在本章中介绍一下 Servlet 、Filter 、HttpSessionListener、ServletContextListener 的用法。

Servlet

使用 Servlet 如下所示:

  1. @MappingTo("/your_point.do")public class DemoHttpServlet extends HttpServlet{ protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { }}

然后注册 Servlet

  1. public class DemoModule extends WebModule {
  2. public void loadModule(WebApiBinder apiBinder) throws Throwable {
  3. // 扫描所有带有 @MappingTo 注解类
  4. Set<Class<?>> aClass = apiBinder.findClass(MappingTo.class);
  5. // 对 aClass 集合进行发现并自动配置控制器
  6. apiBinder.loadType(aClass);
  7. }
  8. }

Filter

使用 Filter 如下所示:

  1. public class MyFilter implements Filter {
  2. ...
  3. }

然后注册 Filter:

  1. public class StartModule extends WebModule {
  2. public void loadModule(WebApiBinder apiBinder) throws Throwable {
  3. ...
  4. apiBinder.jeeFilter("/*").through(MyFilter.class);
  5. ...
  6. }
  7. }

J2EE的Listener

J2EE 规范中定义了各种各样的 Listener 例如 javax.servlet.http.HttpSessionListener

这些 Listener 基本在 Hasor 中都是都是支持的,配置它们需要通过 SPI 的形式来注册。例如:

  1. public class MyHttpSessionListener implements HttpSessionListener {
  2. ...
  3. }
  4. public class StartModule extends WebModule {
  5. public void loadModule(WebApiBinder apiBinder) throws Throwable {
  6. ...
  7. apiBinder.bindSpiListener(HttpSessionListener.class, new MyHttpSessionListener());
  8. ...
  9. }
  10. }

目前 Hasor 已经支持的 J2EE Listener清单有:

接口
javax.servlet.http.HttpSessionListener
javax.servlet.ServletContextListener
javax.servlet.ServletRequestListener