servletConfig和servletContext对象

ServletConfig:
所属的位置:servlet容器(tomcat)启动的时候会去实例化servlet这个类调用这个方法,public void init(ServletConfig config);

ServletConfig涵盖哪些方法:这个ServletConfig 参数实际上是个接口,里面有四种要实现的方法(见下),这个接口不需要sdk实现,也不需要servlet实现,它是通过toncat实现的。这个ServletConfig参数的部分参数值在web.xml可以找到
1.getServletName() 获取到当前这个servlet 在web.xml配置的名字
2.getServletContext() 获取当前web应用的ServletContext对象
3.getInitParameter() 获取web.xml的配置的初始化参数值
4.getInitParameterNames() 获取web.xml的配置的所有初始化参数值的键的枚举

ServletConfig的作用:可以获取web.xml配置文件的本servlet 的初始化参数值
web.xml文件:

  
  	Myservlet
  	com.hjw.Myservlet
  	
  	
  	
  		user
  		admin
  	
  	
  		psw
  		123456
  	
  

在servlet类里获取:

	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("init");
		System.out.println("ervletName:"+config.getServletName());
		//可以获取多个参数值
		Enumeration names = config.getInitParameterNames();
		while(names.hasMoreElements()){
			String key = names.nextElement();
			String value = config.getInitParameter(key);
			System.out.println("key:" + key + "\t" + "value:" + value);
		}
//		this.servletContext = config.getServletContext();		
	}

这里初始化的参数仅仅属于这个servlet,不属于其他servlet,如果要设置多个servlet共有的参数,见下:
context-param标签里设置

  
  	zzz
  	yyy
  
  
  
  	MyFirstServlet
  	com.sf.hw.MyFirstServlet
  	
  	
	
	
	
		user
		MyFirstServlet_admin
	  	
	
		MyFirstServlet_psw
		123456
	
  	
  
  
  
  	MySecondServlet
  	com.sf.hw.MySecondServlet
  
  
  
 	MyFirstServlet
  	/MyFirstServlet
   
  
  
 	MySecondServlet
  	/MySecondServlet
   
  

获取公共参数:

	@Override
	public void init(ServletConfig config) throws ServletException {
		this.servletContext	= config.getServletContext();
		
	}
	
	@Override
	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
		// 获取公共的参数值
		HttpServletResponse httpRes = (HttpServletResponse) res;
		res.getWriter().println(servletContext.getInitParameter("zzz"));
	}

为什么要把初始化参数写到web.xml里不写到servlet里,原因是发布到tomcat里的项目会编译成class文件,无法获取到值。再者,不能把用户的账号密码写死在java文件里,最好写在配置文件里,即使打包发布了这个配置文件还是可以修改的。

servletContext:(Context域对象,整个作用域是web应用)
servletContext也是接口,代表当前web应用的。当web容器启动的时候,会对web应用创建对应的servletContext对象。可以通过servletConfig.getservletConfig() 获取servletContext对象。

servletContext作用:一个web应用中的所有servlet对象共享一个servletContext,所以使用它可以进行servlet之间的通信。另外整个web应用的类、servlet都可以利用它共享数据。

servletContext常用的方法:
1.void setAttribute(string,object);
2.Object getAttribute(String name);
3.void removeAttribute(String name);

2个servlet如何实现通信:假如把第一个servlet的内容传递给第二个servlet

1.定义两个servlet类,同时在web.xml 进行servlet的配置,另外在第一个servlet设置传递的内容,使用servletContext的setAttribute()

	@Override
	public void init(ServletConfig config) throws ServletException {
		//获取上下文
		this.servletContext	= config.getServletContext();
		
		//获取该servlet指定的参数
		String user = config.getInitParameter("user");
		System.out.println(user);
		
		//利用this.servletContext实现servlet之间的通信
		this.servletContext = config.getServletContext();
		this.servletContext.setAttribute("aaaa", "1111");
	}

2.在第二个servlet 的init()方法里设置获取servletContext,然后再次通过利用这个上下文用getAttribute()获取传递的内容

private ServletContext servletContext;//全局变量

	@Override
	public void init(ServletConfig config) throws ServletException {
		// TODO Auto-generated method stub
		this.servletContext = config.getServletContext();
		
	}

	@Override
	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
		// 获取第一个servlet设置的参数
		String str = (String) this.servletContext.getAttribute("aaaa");
		HttpServletResponse hsr = (HttpServletResponse) res;
		hsr.getWriter().write(str);
	}
	

你可能感兴趣的:(servletConfig和servletContext对象)