@@ -15,15 +15,15 @@ ServletContext 定义了 Servlet 运行的 Web 应用视图,一个 Web 应用
1515ServletContext 必须支持编程式添加 Servlet、Filter 和 Listener,对框架开发者有用处。但是规定了这些方法只能在 ServletContextListener.contexInitialized 或 ServletContainerInitializer.onStartup 应用初始化的时候调用。
1616
1717``` java
18- addServlet(String servletName, String className)
19- addServlet(String servletName, Servlet servlet)
20- addServlet(String servletName, Class < ? extends Servlet > servletClass)
21- addFilter(String filterName, String className)
22- addFilter(String filterName, Filter filter)
23- addFilter(String filterName, Class < ? extends Filter > filterClass)
24- void addListener(String className)
25- void addListener(T t)
26- void addListener(Class < ? extends EventListener > listenerClass)
18+ addServlet(String servletName, String className);
19+ addServlet(String servletName, Servlet servlet);
20+ addServlet(String servletName, Class < ? extends Servlet > servletClass);
21+ addFilter(String filterName, String className);
22+ addFilter(String filterName, Filter filter);
23+ addFilter(String filterName, Class < ? extends Filter > filterClass);
24+ void addListener(String className);
25+ void addListener(T t);
26+ void addListener(Class < ? extends EventListener > listenerClass);
2727```
2828
2929这就是在注入内存马时我们需要先拿 Context 的原因(已经写在了 Servlet 规范里面啦),所以针对实现了 Servlet 规范的 Web 容器都是一个套路,并且该反射调用哪些方法也写在里面了。不过在实现的时候却写了那么多代码的原因就是,其规定了这些方法只能在应用初始化的时候调用,我们注入内存马的时候已经是应用运行时了,那些代码实际上就是将方法内的具体实现重新用反射实现一遍。
0 commit comments