Servlet中的ServletConfig对象、ServletContext对象的简单认识

ServletConfig

 

ServletConfig对象和配置文件相关。可以获得配置文件的信息,一般用于配置初始化参数。

配置初始化参数时,需要在web.xml文件的servlet标签中的init-param标签中。而且如果配置在该servlet标签中那么就只能从该servlet标签中获得初始化参数。比如下面代码就只能从ServletDemo6的servlet中获取初始化参数。

  <servlet>
    <servlet-name>ServletDemo6</servlet-name>
    <servlet-class>com.xml.servlet.ServletDemo6</servlet-class>
    <init-param>
      <param-name>username</param-name>
      <param-value>root</param-value>
    </init-param>
    <init-param>
      <param-name>password</param-name>
      <param-value>123</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>ServletDemo6</servlet-name>
    <url-pattern>/ServletDemo6</url-pattern>
  </servlet-mapping>

 

而当Servlet配置了这些初始化参数以后,web容器在创建Servlet实例对象时,会自动将这些参数封装到ServletConfig对象中,并且在调用servlet的init方法时,将ServletConfig对象传递给Servlet。从而,我们就可以通过ServletConfg对象得到当前Servlet的初始化参数。

关于如何获得初始化参数( 里面已经包含了ServletConfig的三种方法的举例:getServletName()、getInitParameter()、getInitParameterNames() )

    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException{
    	//获取ServletConfig对象,ServletConfig代表当前Servlet在配置中的信息
    	ServletConfig config = this.getServletConfig();
    	//获取配置文件中Servlet的名称
    	System.out.println("Servlet的名称"+config.getServletName());
    	
    	//获取初始化参数
    	String username = config.getInitParameter("username");
    	String password = config.getInitParameter("password");
    	System.out.println(username+" "+password);
    	
    	Enumeration<String> e = config.getInitParameterNames();
    	while(e.hasMoreElements()) {
    		String name = e.nextElement();
    		String value = config.getInitParameter(name);
    		System.out.println(name+" : "+value);
    	}    	
    }

 

ServletContext()

 

这是一个有点重要的对象。

那么,什么是ServletDemo对象呢?

WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。也就是说一个web工程只拥有一个Context对象,然而一个web工程下会拥有多个servlet程序啊。因此,所有的servlet程序共享一个Context对象。

(其实上面提到的ServletConfig对象也维护了ServletContext的引用。可以通过ServletConfig.getServletContext()来获得对象

类似于全局的特性让他也有一些用法:

1.获取WEB应用全局初始化参数

    在web.xml中配置context-param标签。常用于配置字符编码

<context-param>
	<param-name>encoding</param-name>
	<param-value>GBK</param-value>
</context-param>

    servlet中拿到全局初始化参数 

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//获取ServletContext对象
		ServletContext context = getServletContext();
		String encoding = context.getInitParameter("encoding");
		System.out.println(encoding);

             此处也可以通过枚举getInitParameterNames() 获得初始化参数,参考上面的ServletConfig
	}

 

2.实现数据的共享

	@Override
	public void init() throws ServletException {
		//获取ServletContext对象,存入数值
		//只有第一次访问时init才会调用,因此count也只会初始化一次
		getServletContext().setAttribute("count", 0);
	}
	
	/**
	 * 每一次访问都会执行这个方法
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//获取ServletContext对象
		ServletContext context = getServletContext();
		//取值
		Integer total = (Integer) context.getAttribute("count");
		//存值到域对象中
		context.setAttribute("count", ++total);
		
		//页面输出
		response.setContentType("text/html;Charset=UTF-8");
		response.getWriter().write("<h3>该网站一共被访问了"+total+"</h3>");
	}

 

3.读取资源文件

    需要指出的是read2()中的路径都是相对于tomcat中bin目录的路径,因为代码运行后就交给服务器进行编译处理,会在tomcat形成新的class文件,所以路径也在相对于tomcat的bin目录来选择。

	public void read1() throws IOException{
		//获取输入流,读取文件
		InputStream in = new FileInputStream("C:\\Java\\workplace\\ServletDemo2\\src\\db.properties");
		print(in);
	}
	
	public void read2() throws IOException {
		//ServletContext读取文件
		
/*		//不提倡该方法
		String path = getServletContext().getRealPath("/WEB-INF/classes/db.properties");
		System.out.println(path);
		InputStream in = new FileInputStream(path);*/
		
		InputStream in = getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
		print(in);
	}
	
	/**
	 * 
	 * @param in
	 * @throws IOException
	 */
	public void print(InputStream in) throws IOException {
		Properties pro = new Properties();
		//加载
		pro.load(in);
		//获取文件中的内容
		String username = pro.getProperty("username");
		String password = pro.getProperty("password");
		String desc = pro.getProperty("desc");
		
		System.out.println("用户名:"+username+"密码:"+password+"简介:"+desc);
	}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值