1、Servlet Context介绍
servltecontext接口是由web容器内部实现的,一个web应用对应一个servltecontext。它就类似一个servlte的公共环境,提供url,属性等给多个servlte使用。
servltecontext是web应用的url的,如www.xxx.com/youproject,这个youproject就是当下上下文路径,所有以它开头的请求都会被路由到与它相关的servltecontext的相关web应用上
2、servltecontext的接口范围
每一个web应用都有对应一个servltecontext,在 容器分布在多台虚拟机下时候,每个jvm的每个web都将有一个servltecontext实例。如果servlte,没有部署到web应用中,但还是会有一个默认的servltecontext,只不过。在分布式的容器中,默认的ServletContext是非分布式的且仅存在于一个JVM 中
3、初始化参数
在web.xml可以部署一些全局的参数,如作者信息,email等。
<context-param> <param-name>key</param-name> <param-value>value</param-value> </context-param>
然后就可以通过 servltecontext对象getInitParameter
getInitParameterNames
获取对应的配置4、配置方法
在3.0开始提供以编程式方法添加Servlet、Filter 、Listener和Servlet、Filter对应的url模式。这些方法只能在ServletContextListener的 contextInitialized(ServletContextEvent sce)或者ServletContainerInitializer 实现的 onStartup中进行调用设置Servlet、Filter 、Listener和Servlet、Filter对应的url模式
编程式添加Servlet
编程式添加servlte将会返回一个ServletRegistration 或 ServletRegistration.Dynamic 对象,可以配置 如 init-params, url-mapping 等 Servlet 的其他参数。一下是几个重载
addServlet(String servletName, String className)
addServlet(String servletName, Servlet servlet)
addServlet(String servletName, Class <? extends Servlet> servletClass)
<T extends Servlet> T createServlet(Class<T> clazz)
以上几个方法是添加servlet的
public class contextList implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { // TODO Auto-generated method stub ServletContext ser= sce.getServletContext(); //<T extends Servlet> T createServlet(Class<T> clazz) //addServlet(String servletName, Servlet servlet) HttpServlet servlet; try { servlet=ser.createServlet(addServlet.class); //得到这个servlet对象之后可以做一些操作 ServletRegistration.Dynamic dyn0=ser.addServlet("createServlet", servlet); dyn0.addMapping("/addServlet","/addServlet2"); } catch (ServletException e) { // TODO Auto-generated catch block e.printStackTrace(); } //addServlet(String servletName, Class <? extends Servlet> servletClass) ServletRegistration.Dynamic dyn=ser.addServlet("addServlet", addServlet.class); dyn.addMapping("/addServlet","/addServlet2"); //addServlet(String servletName, String className) ServletRegistration.Dynamic dyn2=ser.addServlet("addServlet", "web4.addServlet"); dyn2.addMapping("/addServlet","/addServlet2"); } @Override public void contextDestroyed(ServletContextEvent sce) { // TODO Auto-generated method stub } }
ServletRegistration getServletRegistration(String servletName)
这个方法是通过传一个servlte名字,得到一个servlte对象的ServletRegistration,如果没有名字将返回null
Map<String, ? extends ServletRegistration> getServletRegistrations()
这个方法是得到一个已经注册了的 Servlet的ServletRegistration MAP集合
编程式filteraddFilter(String filterName, String className)
addFilter(String filterName, Filter filter)
addFilter(String filterName, Class <? extends Filter> filterClass)
<T extends Filter> T createFilter(Class<T> clazz)
同理和servlte添加方式和配置一样的
FilterRegistration getFilterRegistration(String filterName)
Map<String, ? extends FilterRegistration> getFilterRegistrations()
编程式添加Listener
void addListener(String className)
<T extends EventListener> void addListener(T t)
void addListener(Class <? extends EventListener> listenerClass)
<T extends EventListener> void createListener(Class<T> clazz)
以上几个添加的类必须是一下几个接口的实现类javax.servlet.ServletContextAttributeListener
javax.servlet.ServletRequestListener
javax.servlet.ServletRequestAttributeListener
javax.servlet.http.HttpSessionListener
javax.servlet.http.HttpSessionAttributeListener
javax.servlet.http.HttpSessionIdListener
public class contextList implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { // TODO Auto-generated method stub sce.getServletContext().addListener("web4.myListener"); } @Override public void contextDestroyed(ServletContextEvent sce) { // TODO Auto-generated method stub } }
5、上下文属性setAttribute
getAttribute
getAttributeNames
removeAttribute
上下文属性是全部的servlte都可以访问的。
Servlet Context
最新推荐文章于 2021-12-29 20:39:09 发布