Java Web程序设计——Servlet基础(三)

Java Web程序设计——Servlet基础(三)

差点忘了思维导图
Java Web程序设计——Servlet基础(三)_第1张图片

ServletConfig

什么是ServletConfig接口
  • 它是servlet的配置对象,作用就是获取与servlet的初始化参数
  • 它的子类是GenericServlet和HttpServlet
  • 它被实例化通过web服务器是实现的
ServletConfig接口常用的方法
  • getInitParameter(String name):获取Servlet的初始化参数值,根据encoding获取utf-8
  • getInitParameterNames():获取Servlet初始化参数的名称,获取encoding和username等名称
  • getServletContext() :得到ServletContext对象
  • getServletName():获取Servlet的名称,对应web.xml里面TextServlet02

举例如下:(以下是按顺序操作的步骤,具体不详细文字说明,过程请看前几篇文章)
Java Web程序设计——Servlet基础(三)_第2张图片
Java Web程序设计——Servlet基础(三)_第3张图片
详细内容:

package webFirst.servlet;

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

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class TextServlet02
 */
public class TextServlet02 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 1.得到ServletConfig对象
		ServletConfig config = this.getServletConfig();
		// 2.获取Servlet的名称,对应web.xml里面TextServlet02
		String servletName = config.getServletName();
		System.out.println("servlet的名称:"+servletName);
		// 3.获取Servlet的初始化参数
		String value = config.getInitParameter("encoding");
		System.out.println("初始化参数的值:"+value);
		// 4.获取Servlet初始化参数的名称
		Enumeration<String> er = config.getInitParameterNames();
		while(er.hasMoreElements()) {
			//获取初始化参数的名称
			String name = er.nextElement();
			//根据初始化参数的名称,获取对应的值
			String value1 = config.getInitParameter(name);
			System.out.println("初始化参数的名称:"+name);
			System.out.println("该名称对应的值:"+value1);
			
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.doGet(request, response);
	}

}

访问路径:
Java Web程序设计——Servlet基础(三)_第4张图片
发布,访问浏览器,http://localhost:8080/chapter/text02,在控制台能看到如下情况:说明ServletConfig对象可以获得web.xml文件中的参数信息
Java Web程序设计——Servlet基础(三)_第5张图片

ServletContext

  • ServletContext对象时在web服务器启动时就创建了,是web服务器创建的ServletContext对象,每一个web项目只有一个ServletContext对象。
  • ServletContext对象的作用:获取web应用程序的初始化参数,在web应用程序能共享数据,获取web项目下的资源文件
  • 得到ServletContext对象:1.通过ServletConfig对象:config.getServletContext();2.直接得到:getServletContext();
获取web项目的初始化参数
  • getInitParameter(String name):获取全局的初始化参数值
  • getInitParameterNames():获取全局初始化参数的名称

案列:
Java Web程序设计——Servlet基础(三)_第6张图片
详细内容:

package webFirst.servlet;

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

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class TextServlet03
 */
public class TextServlet03 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 1.得到ServletContext对象
		ServletContext context = this.getServletContext();
		// 2.获取全局的初始化参数
		Enumeration<String> er = context.getInitParameterNames();
		while(er.hasMoreElements()) {
			String name = er.nextElement();
			String value = context.getInitParameter(name);
			System.out.print("初始化参数的名称:"+name);
			System.out.println("   名称对应的值:"+value);
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.doGet(request, response);
	}

}

访问路径:
Java Web程序设计——Servlet基础(三)_第7张图片
发布,访问浏览器,http://localhost:8080/chapter/text03,在控制台可看到如下内容,说明通过ServletContext对象可以获取到web应用的初始化参数
Java Web程序设计——Servlet基础(三)_第8张图片

实现多个Servlet对象直接共享数据
  • 一个web项目只有一个ServletContext对象
  • ServletContext对象就是域对象,域对象在一定范围内能存值和取值

域对象相关的方法

  • 存值:void setAttribute(String key,object obj)
  • 取值:Object obj = getAttribute(key)
  • 删除值:void removeAttribute(key)

案列:
创建两个servlet,并且创建两个类
Java Web程序设计——Servlet基础(三)_第9张图片
Java Web程序设计——Servlet基础(三)_第10张图片
内容
Java Web程序设计——Servlet基础(三)_第11张图片
Java Web程序设计——Servlet基础(三)_第12张图片
发布访问浏览器,出现以下说明ServletContext对象所存储的数据可以被多个Servlet所共享
Java Web程序设计——Servlet基础(三)_第13张图片
Java Web程序设计——Servlet基础(三)_第14张图片

获取Web下面的资源文件
  • 通过ServletContext对象能够获取Web项目下面文件字节输入流,或者文件的绝对路径
  • 路径:普通Java项目:直接使用jdk编译Java文件,所以说文件的路径是相对于工作空间;web项目:运行在tomcat服务器上面的,所以说文件的路径是相对于tomcat服务器

案例1:普通Java下的文件路径写法

package demo;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;

public class Demo1 {

	public static void main(String[] args) throws Exception{
		// Property对象加载properties文件
		Properties por = new Properties();
		InputStream inStream = new FileInputStream("src/config.properties");
		por.load(inStream);
		String value = por.getProperty("key");
		System.out.println(value);
		

	}

}

案例2
Java Web程序设计——Servlet基础(三)_第15张图片
Java Web程序设计——Servlet基础(三)_第16张图片
内容
Java Web程序设计——Servlet基础(三)_第17张图片
访问浏览器,可出现如下
在这里插入图片描述

ServletContext接口常用的方法
  • InputStream in = getResourAsStream(String path):获取文件的自己输入流,路径是相对于tomcat服务器的路径
  • String realPath = getRealPath(path):获取文件的绝对路径,路径是相对于服务器端的路径

你可能感兴趣的:(Java Web程序设计——Servlet基础(三))