Servlet3.0 对于 ServletContext 进行了功能增强,可以对 Servlet、Filter 及 Listener 进行动
态注册。所谓动态注册是指,Web 应用在运行过程中通过代码对 Servlet、Filter 或 Listener
进行注册。
为了系统安全考虑,这个动态注册是有限制的:只能在应用启动时进行,而不能在应用
运行过程中的进行注册。这个应用启动时间点,可以通过 ServletContextListener 监听器来把
握。
动态注册 Servlet 的 API
addServlet
原型:ServletRegistration.Dynamic addServlet(String servletName, String className)
意义:javax.servlet.ServletContext 接口的方法。将指定名称指定类的 Servlet 动态添加到应用
中。这里的参数 servletName 与 className,相当于在 web.xml 中对 Servlet 注册时的与。其返回值为动态 Servlet 注册对象 Dynamic,其为
ServletRegistration 接口的内部接口,并且还是 ServletRegistration 接口的子接口。所以其返
回类型也可以说是 ServletRegistration 接口对象。
该方法还有两个重载的方法,意义相同,只不过参数不同而已。
createServlet
原型:T createServlet(java.lang.Classclazz) throws ServletException
意义:javax.servlet.ServletContext 接口的方法。创建 Servlet 类,然后可以作为 addServlet()
的参数。用法示例:
Class servletClass = Class.forName(“com.bjpowernode.servlets.SomeServlet”);
SomeServlet servlet = servletContext.createServlet(servletClass);
setInitParameter
原型:boolean setInitParameter(String name, String value)
意义:javax.servlet.ServletRegistration.Dynamic 接口的方法。用于设置 Servlet 注册时的初始
化参数。需要注意,这里设置的初始化参数不同于 web.xml 中 Servlet 注册时的,
不能通过 Servlet 的 getInitParameter()获取。必须通过 Servlet 注册对象 ServletRegistration 的
获取初始化参数的方法 getInitParameter()或 getInitParameters()获取。