Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集。不过Properties有特殊的地方,就是它的键和值都是字符串类型。 代码如下:
package cn.zhangheng.filter; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import java.util.Properties; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; /** * 我的过滤器 * * @author zhangheng * @date 2016年8月16日上午10:14:40 * */ public class MyFilter implements Filter { public static Logger LOG = Logger.getLogger(MyFilter.class); public static Properties p = new Properties(); public void destroy() { // 只有在web服务器销毁的时候才会执行 LOG.info("结束过滤。。。"); System.out.println("-----只执行一次---"); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { LOG.info("执行过滤。。。"); String servletContextPath = request.getServletContext().getContextPath(); System.out.println(servletContextPath); HttpServletRequest request1 = (HttpServletRequest) request; String url = request1.getRequestURI(); if (!url.contains("login.do")) { filterChain.doFilter(request, response); } } /* * 初始化时执行 可以获取web.xml中的参数 (non-Javadoc) * * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) */ public void init(FilterConfig filterConfig) throws ServletException { LOG.info("初始化过滤。。。"); String filterName = filterConfig.getFilterName(); String param1 = filterConfig.getInitParameter("firstParamName"); String param2 = filterConfig.getInitParameter("secondParamName"); System.out.println("filterName = " + filterName + ";param1 = " + param1 + ";param2 = " + param2); Enumeration<String> s = filterConfig.getInitParameterNames(); while (s.hasMoreElements()) { String string = (String) s.nextElement(); System.out.println(string); } // 获取xml InputStream in = MyFilter.class.getResourceAsStream("/para.properties"); try { p.load(in);//这个方法可以从.properties属性文件对应的文件输入流中,加载属性列表到Properties类对象 LOG.info(p.getProperty("name") + p.getProperty("age"));//这两个方法是分别是获取和设置属性信息。 // 追加 FileOutputStream out = new FileOutputStream("/b.properties", true); p.setProperty("phone1", "1232451"); p.store(out, "追加信息");//这个方法将Properties类对象的属性列表保存到输出流中。如果comments不为空,保存后的属性文件第一行会是#comments,表示注释信息;如果为空则没有注释信息。注释信息后面是属性文件的当前保存时间信息。 } catch (IOException e) { e.printStackTrace(); } finally { p.clone(); } } }