javaWEB总结(4):ServletContext对象方法

前言:之前每次学到ServletContext对象都会抗拒,跳着学,后面才发现有很多不懂的原理都在这个对象里面,后悔莫及,所以今天特地把他单放在一篇文章里,算是对他的忏悔。


1.什么是ServletContext对象?如何获取?

(1)ServletContext对象代表当前WEB应用,可以说是当前WEB应用的大管家,可以从中获取当前WEB应用的各个方面信息。

(2)ServletContext对象可由ServletConfig的getServletContext方法获取。


2.ServletContext的API



方法很多,只介绍比较重要的几个方法


3.项目结构


比之前多了两个测试文件(用来测试,只要名称对应就可以)


4.HelloServlet.java

package com.dao.chu;

import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * 
 * Title: HelloServlet Description:实现Servlet接口的类 </p>
 */
public class HelloServlet implements Servlet {
	
	//在控制台打印中,用来分割ServletContext对象方法
	private final static String notic ="=========================ServletContext对象方法===================================";
	//在控制台打印中,用来分割HelloServlet类
	private final static String helloServlet ="=========================helloServlet类===================================";
	
	
	@Override
	public void destroy() {
		System.out.println("destroy...");
	}

	@Override
	public ServletConfig getServletConfig() {
		System.out.println("getServletConfig...");
		return null;
	}

	@Override
	public String getServletInfo() {
		System.out.println("getServletInfo...");
		return null;
	}

	@Override
	public void init(ServletConfig servletConfig) throws ServletException {

		System.out.println("init...");

		// 获取参数名为user的参数值
		String userValue = servletConfig.getInitParameter("user");
		System.out.println("userValue is " + userValue);

		// 获取参数名为password的参数值
		String passwordValue = servletConfig.getInitParameter("password");
		System.out.println("passwordValue is " + passwordValue);

		// 获取servlet节点配置的所有初始化参数名组成的Enumeration
		Enumeration<String> parameterNames = servletConfig
				.getInitParameterNames();

		// 循环
		while (parameterNames.hasMoreElements()) {

			String name = (String) parameterNames.nextElement();
			// 打印所有循环出来的参数名
			System.out.println("name is " + name);

			// 用参数名来获取所有的参数值,并打印出来
			String value = servletConfig.getInitParameter(name);
			System.out.println("value is " + value);

		}

		/* 获取配置的servlet名称 */
		String servletName = servletConfig.getServletName();
		System.out.println("servletName: " + servletName);
		
		//=========================ServletContext对象方法=================================//
		
		System.out.println(notic);
		
		//获取ServletContext对象
		ServletContext servletContext = servletConfig.getServletContext();
		
		// 获取参数名为driver的参数值并打印
		String driverValue = servletContext.getInitParameter("driver");
		System.out.println("driverValue is "+driverValue);
		
		// 获取context节点配置的所有初始化参数名组成的Enumeration
		Enumeration<String> contextNames = servletContext.getInitParameterNames();
		
		while (contextNames.hasMoreElements()) {
			
			String contextParamName = (String) contextNames.nextElement();
			
			// 打印所有循环出来的参数名
			System.out.println("contextParamName is "+contextParamName);
			
			// 用参数名来获取所有的参数值,并打印出来
			String contextParamValue = servletContext.getInitParameter(contextParamName);
			System.out.println("contextParamValue is "+contextParamValue);
			
			
		}

		//获取文件在服务器部署的绝对路径
		String realPath = servletContext.getRealPath("/note.txt");
		System.out.println("realPath is "+realPath);
		
		//获取当前web应用的跟路径
		String contextPath = servletContext.getContextPath();
		System.out.println("contextPath is "+contextPath);
		
		//通过ClassLoader得到输入流
		InputStream is1;
		try {
			ClassLoader loader = getClass().getClassLoader();
			is1 = loader.getResourceAsStream("jdbc.properties");
			System.out.println("is1 is "+is1);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		//通过servletContext的getResourceAsStream得到输入流
		try {
			InputStream is2 = servletContext.getResourceAsStream("/WEB-INF/classes/jdbc.properties");
			System.out.println("is2 is "+is2);
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	@Override
	public void service(ServletRequest arg0, ServletResponse arg1)
			throws ServletException, IOException {
		System.out.println("service...");

	}

	public HelloServlet() {
		//控制台加分隔符
		System.out.println(helloServlet);
		
		System.out.println("HelloServlet's constructor..");
	}

}

5.SecondHelloServlet.java
package com.dao.chu;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;


/**
 * 
 * Title: HelloServlet
 * Description:第二个实现Servlet接口的类
 * </p>
 */
public class SecondHelloServlet implements Servlet{
	
	//在控制台打印中,用来分割SecondHelloServlet类
	private final static String secondHelloServlet ="=========================secondHelloServlet类===================================";

	@Override
	public void destroy() {
		System.out.println("second destroy..");
		
	}

	@Override
	public ServletConfig getServletConfig() {
		System.out.println("second getServletConfig..");
		return null;
	}

	@Override
	public String getServletInfo() {
		System.out.println("second getServletInfo..");
		return null;
	}

	@Override
	public void init(ServletConfig arg0) throws ServletException {
		System.out.println("second init..");
		
	}

	@Override
	public void service(ServletRequest arg0, ServletResponse arg1)
			throws ServletException, IOException {
		System.out.println("second service..");
	}
	
	public SecondHelloServlet(){
		//控制台加分隔符
		System.out.println(secondHelloServlet);
		
		System.out.println("SecondHelloServlet's constructor..");
	}

}

6.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	
    <!-- 配置当前WEB应用的初始化参数 -->
    <context-param>
        <param-name>driver</param-name>
        <param-value>com.mysql.jdbc.Driver</param-value>
    </context-param>
    
     <context-param>
        <param-name>jdbcUrl</param-name>
        <param-value>jdbc:mysql://daochuwenziyao</param-value>
    </context-param>
    
	<!-- 配置和映射servlet -->
	<!-- helloServlet -->
	<servlet>
	    
	    <!-- servlet注册的名字 -->
	    <servlet-name>helloServlet</servlet-name>
	    <!-- servlet的全类名 -->
	    <servlet-class>com.dao.chu.HelloServlet</servlet-class>
	    
	    <!-- 配置servlet的初始化参数 ,要放在load-on-startup节点 前面-->
	    <init-param>
	        <!-- 参数名 -->
	    	<param-name>user</param-name>    
	    	<!-- 参数值 -->
	    	<param-value>root</param-value>
	    </init-param>
	    <init-param>
	        <param-name>password</param-name>
	        <param-value>123456</param-value>
	    </init-param>
	    
	    <!-- load-on-startup节点 -->
	    <load-on-startup>0</load-on-startup>
	    
	</servlet>
	
	<servlet-mapping>
	    
	    <!-- 需要和某一个servlet子节点的servlet-name 子节点的文本节点一致 -->
	    <servlet-name>helloServlet</servlet-name>
	    <!-- 映射的具体访问路径:/代表当前WEB应用的根目录 -->
	    <url-pattern>/hello</url-pattern>
	    
	</servlet-mapping>
	
	<!-- secondHelloServlet -->
	<servlet>
	    
	    <!-- servlet注册的名字 -->
	    <servlet-name>secondHelloServlet</servlet-name>
	    <!-- servlet的全类名 -->
	    <servlet-class>com.dao.chu.SecondHelloServlet</servlet-class>
	    <!-- load-on-startup节点 -->
	    <load-on-startup>1</load-on-startup>
	    
	</servlet>
</web-app>


7.控制台输出



我们只需看“ServletContext对象方法”中的输出即可


8.总结:
在ServletContext中有以下几个重要的方法:
(1)初始化变量方法getInitParameter和getInitParameterNames:ServletConfig和ServletContext对象都有初始化参数的方法,方法相同但是领域不同。ServletConfig为局部初始化参数,只能在当前配置的servlet中获取,而ServletContext为全局初始化参数,只要在当前web应用中就可以获取;
(2)getRealPath方法:获取文件在服务器部署的绝对路径;
(3)getContextPath方法:获取当前web应用的跟路径,后面会经常用到;
(4)getResourceAsStream方法,获取输入流,与通过ClassLoader得到输入流不同的是传递的参数为服务器部署的绝对路径。


附:

本次示例代码:点击打开链接



为了尊重原作者,下面粘贴佟刚老师视频的地址:

点击打开链接




转载于:https://www.cnblogs.com/tongrui/p/6193833.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值