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文件:

  <servlet>
  	<servlet-name>Myservlet</servlet-name>
  	<servlet-class>com.hjw.Myservlet</servlet-class>
  	<!-- <load-on-startup>1</load-on-startup> -->
  	<!-- 为本servlet配置初始化参数 键值对方式-->
  	<init-param>
  		<param-name>user</param-name>
  		<param-value>admin</param-value>
  	</init-param>
  	<init-param>
  		<param-name>psw</param-name>
  		<param-value>123456</param-value>
  	</init-param>
  </servlet>

在servlet类里获取:

	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("init");
		System.out.println("ervletName:"+config.getServletName());
		//可以获取多个参数值
		Enumeration<String> 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标签里设置

  <context-param>
  	<param-name>zzz</param-name>
  	<param-value>yyy</param-value>
  </context-param>
  
  <servlet>
  	<servlet-name>MyFirstServlet</servlet-name>
  	<servlet-class>com.sf.hw.MyFirstServlet</servlet-class>
  	<!-- 配置优先调用哪个servlet 数字越小优先级越大 负数就相当于默认跟没配一样 -->
  	<!-- <load-on-startup>1</load-on-startup> -->
	
	<!-- 这里初始化的参数仅仅属于这个servlet,不属于其他servlet -->
	<init-param>
		<param-name>user</param-name>
		<param-value>MyFirstServlet_admin</param-value>
	</init-param>  	
	<init-param>
		<param-name>MyFirstServlet_psw</param-name>
		<param-value>123456</param-value>
	</init-param>
  	
  </servlet>
  
  <servlet>
  	<servlet-name>MySecondServlet</servlet-name>
  	<servlet-class>com.sf.hw.MySecondServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
 	<servlet-name>MyFirstServlet</servlet-name>
  	<url-pattern>/MyFirstServlet</url-pattern>
  </servlet-mapping> 
  
  <servlet-mapping>
 	<servlet-name>MySecondServlet</servlet-name>
  	<url-pattern>/MySecondServlet</url-pattern>
  </servlet-mapping> 
  
</web-app>

获取公共参数:

	@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);
	}
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值