Servlet Context

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开始提供以编程式方法添加ServletFilter 、Listener和ServletFilter对应的url模式。这些方法只能在ServletContextListener的 contextInitialized(ServletContextEvent sce)或者ServletContainerInitializer 实现的 onStartup中进行调用设置ServletFilter 、Listener和ServletFilter对应的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()

这个方法是得到一个已经注册了的 ServletServletRegistration MAP集合


编程式filter

addFilter(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都可以访问的。








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值