1 importjava.io.BufferedReader;2 importjava.io.IOException;3 importjava.io.InputStream;4 importjava.io.InputStreamReader;5 importjava.io.UnsupportedEncodingException;6 importjava.util.Enumeration;7 importjava.util.Iterator;8 importjava.util.Properties;9 importjava.util.Set;10
11 importjavax.servlet.ServletContext;12 importjavax.servlet.ServletException;13 importjavax.servlet.annotation.WebServlet;14 importjavax.servlet.http.HttpServlet;15
16 @WebServlet(urlPatterns={"/PropertiesServlet"},loadOnStartup=1)17 public class PropertiesServlet extendsHttpServlet {18
19 private static final long serialVersionUID = 1L;20
21 publicPropertiesServlet() {22 super();23 }24
25 public void init()throwsServletException{26
27 //获取 ServletContext
28 ServletContext context = this.getServletContext();29 //获取 ServletConfig30 //ServletConfig servletConfig = this.getServletConfig();31
32 //获取所有初始化参数的名称
33 Enumeration enumer =context.getInitParameterNames();34 //Enumeration initParameterNames = servletConfig.getInitParameterNames();//同样是获取所有初始化参数的名称35 //enumer = initParameterNames;
36
37 while(enumer.hasMoreElements()) {38 String name =enumer.nextElement();39 String value = context.getInitParameter(name);//通过参数名获取参数值
40 System.out.println(name + ":" +value);41 }42
43
44 //通过 ServletContext 获取资源文件输入流 InputStream 的三种方式45 //URL url = context.getResource("WEB-INF/classes/jdbc.properties");46 //InputStream is1 = url.openStream();47
48 //String path = context.getRealPath("WEB-INF/classes/jdbc.properties");49 //File file = new File(path);50 //InputStream is2 = new FileInputStream(file);
51
52 InputStream is3 = context.getResourceAsStream("WEB-INF/classes/jdbc.properties");//方便53
54 //获取 ClassLoader 的三种方式55 //ClassLoader classLoader1 = this.getClass().getClassLoader();56 //ClassLoader classLoader2 = Thread.currentThread().getContextClassLoader();57 //ClassLoader classLoader3 = ClassLoader.getSystemClassLoader();58
59 //通过 ClassLoader 获取 InputStream60 //InputStream is = classLoader3.getResourceAsStream("jdbc.properties");61
62 //InputStream is4 = ClassLoader.getSystemResourceAsStream("jdbc.properties");//方便
63
64 Properties prop = newProperties();65
66 //Java在网络传输中使用的编码是"ISO-8859-1",如果配置文件有中文,可能出现乱码问题67 //解决方案:1.native2ascii.exe将中文转成Unicode编码;2.将InputStream封装成Reader68 //InputStream字节流无法读取中文,把InputStream转换成Reader字符流,将字节解码为字符来读取中文
69 InputStreamReader isr = null;70 try{71 isr = new InputStreamReader(is3, "UTF-8");72 } catch(UnsupportedEncodingException e) {73 e.printStackTrace();74 }75 //其中UTF-8,用于明确指定解码字符流的字符集76 //不指定则默认使用OS的,这会造成同一份配置文件同一份代码,在linux和windows上、英文windows和中文windows之间的表现都不一致77 //这个参数应该和具体读取的properties文件的编码格式匹配78
79
80 //建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)81 //如果不缓冲的话会通过read方法一次又一次的访问文件
82 BufferedReader bf = newBufferedReader(isr);83
84 //将内容读到 Properties 里
85 try{86 prop.load(bf);87 } catch(IOException e) {88 //TODO Auto-generated catch block
89 e.printStackTrace();90 }91
92 String user = prop.getProperty("姓名");93 System.out.println(user);94
95 //获取所有Property 的 Name
96 Set set =prop.stringPropertyNames();97 Iterator it =set.iterator();98 while(it.hasNext()) {99 String name =it.next();100 String value = prop.getProperty(name);//通过name获取value
101 System.out.println(name + ":" +value);102 }103 }104 }