目录

使用类加载器加载配置文件

ServletContext方式

读取web.xml配置


前言:

1 这是一个java读取配置文件的方法集合,只有常见的方式

2 围绕的内容大部分是读取properties文件

有时候我们会把一些不容易改变的内容或参数写在配置文件里,这样如果需要修改,

直接修改配置文件即可,可以实现分工合作,降低耦合性

使用类加载器加载配置文件

写一个简单的配置文件在src下

最为常见的方式

之所以使用类加载器,是因为项目运行后我们的配置文件的路径不好确定

 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{// 如果properties配置文件创建在src下面,那么运行的时候会复制一份在WEB-INF\classes里// 创建属性对象Properties proper1 = new Properties();// 发布到web工程里后,properties文件是在tomcat的webapps项目的WEB-INF的classes里// ClassLoader为类加载器,也就是类所存放的地方(这里不做详解)// 获取类加载器后直接加载配置文件,因为此时类加载器和配置文件是同一目录InputStream file1 = this.getClass().getClassLoader().getResourceAsStream("myConfig.properties");// 加载流,我们的配置文件是UTF-8编码,读取出来后可能乱码// 所以用InputStreamReader重新编码一下,如果配置文件不是UTF-8,则直接proper1.load(file1);proper1.load(new InputStreamReader(file1,"UTF-8"));//根据属性名获取属性值String myname = proper1.getProperty("name");System.out.println(myname);}

ServletContext方式

先利用ServletContext获取配置文件的路径,项目部署后,配置文件是项目下的WEB-INF/classes下

获取到目录后直接加载即可

 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{// 获取全局唯一的Context对象ServletContext serv1 = super.getServletContext();// 如果getRealPath参数填空,那么就是获取项目的绝对路径 d:\xxx\webapps\项目名\// 如果不为空,那么会和参数的路径拼接起来String path1 = serv1.getRealPath("WEB-INF/classes/myConfig.properties");System.out.println(path1);Properties proper1 = new Properties();InputStream file1 = new FileInputStream(path1);proper1.load(new InputStreamReader(file1,"UTF-8"));String myname = proper1.getProperty("name");System.out.println(myname);}

读取web.xml配置

web.xml也是一个xml,按道理可以通过dom4j来解析,但是servlet内部已经封装好了获取自身配置的方法

为什么要读取web.xml的内容

1 有时候项目是别人的,别人写了好几个数值,需要根据环境来部署相应的东西

    这时候如果开发人员把数值写到web.xml里,那么就需要我们读取并判断

2 还用于约束,假如别人发了一个类给我,需要我们在配置对应的xml

那么他的类里的代码就可以判断xml的某一个元素是不是等于null,等于null就代表xml有些东西没写,就可以提示出错

演示的web.xml

我们在<servlet>写了一些参数,需要用java读取出来

<?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_2_5.xsd"id="WebApp_ID" version="2.5"><display-name>TestWeb</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><servlet><servlet-name>MyServlet</servlet-name><servlet-class>servlet.TestServlet</servlet-class><!-- 填写参数 --><init-param><!-- 参数名和参数数值 --><param-name>address</param-name><param-value>天庭</param-value></init-param><init-param><param-name>name</param-name><param-value>地府</param-value></init-param></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/a</url-pattern></servlet-mapping>
</web-app>

ServletConfig 读取普通配置

public class TestServlet extends HttpServlet
{@Overridepublic void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{System.out.println("进入了doGet");//得到servlet的配置对象//getServletConfig这个方法是在GenericServlet类里的//而HttpServlet的父类便是GenericServlet,所以可以直接调用这个方法,或者加个superServletConfig config1 = super.getServletConfig();//获取servlet的名字,这个名字是web.xml里自己定义的名称servlet-name,不是类名String servletName = config1.getServletName();System.out.println(servletName);//获取init-param里参数的数值 String address1 = config1.getInitParameter("address");System.out.println("address=" + address1);System.out.println("===========================");// 获取所有参数名称Enumeration<String> ele1 = config1.getInitParameterNames();while (ele1.hasMoreElements()){String string = (String) ele1.nextElement();System.out.println(string + "   " + config1.getInitParameter(string));}}@Overridepublic void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{doGet(req, resp);}
}

ServletContext 读取上下文(全局)配置

每个web应用程序都只有一个context对象

ServletContext也可以获取参数,获取的是全局的参数

ServletContext是一个全局共享域,里面的数据所有动态资源都可以写入和获取,服务器启动的时候创建,

服务器关闭的时候销毁

演示web.xml

context-parm需要写在servlet外面,而init-parm是写在里面的

<!--  全局的参数 --><context-param><param-name>address</param-name><param-value>格蓝迪</param-value></context-param><servlet><servlet-name>MyServlet</servlet-name><servlet-class>servlet.TestServlet</servlet-class><!-- 填写参数 --><init-param><!-- 参数名和参数数值 --><param-name>address</param-name><param-value>天庭</param-value></init-param></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/a</url-pattern></servlet-mapping>
public class TestServlet extends HttpServlet
{@Overridepublic void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{//获取全局唯一的对象ServletContext servText=super.getServletContext();//获取全局的参数String param=servText.getInitParameter("address");System.out.println(param);}@Overridepublic void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{doGet(req, resp);}
}

当同时使用ServletConfig和ServletContext的时候,也就是说当全局参数名和局部参数名一样的时候

这时候使用ServletConfig,那么就是获取局部的参数,使用ServletContext就是获取全局的参数

未完待续

java读取配置文件详解相关推荐

  1. @PropertySource与@ConfigurationProperties多种方式读取配置文件详解,附带@PropertySources使用说明

    两个注解都可以读取properties文件或者xml文件,二者可以单独使用也可以结合使用. 一. @PropertySource结合@Value读取指定配置文件 1.准备一个properties文件放 ...

  2. JAVA框架——struts(一)struts快速入门,struts访问流程,struts配置文件详解,动态方法调用

    一. Struts2框架概述 是一种基于MVC模式的轻量级web框架.本质是一个Servlet.作为控制器建立模型与视图的数据交互.Struts2以WebWord为核心,采用拦截器的机制处理客户的请求 ...

  3. MyBatis复习笔记2:配置文件详解

    配置文件详解 属性(properties) MyBatis可以使用 properties 来引入外部 properties 配置文件的内容 resource:引入类路径下的资源 url:引入网络路径或 ...

  4. (转) SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解

    springboot采纳了建立生产就绪spring应用程序的观点. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.在一般情况下,我们不需要做太多的配置就能够让spring boot正 ...

  5. 【ZooKeeper】配置文件详解

    ZooKeeper的配置文件详解 zkServer.sh读取的默认配置文件是$ZOOKEEPER_HOME/conf/zoo.cfg.如果要用其它配置文件.如下传递配置文件参数: zkServer.s ...

  6. AndroidManifest.xml配置文件详解

    AndroidManifest.xml配置文件详解 . AndroidManifest.xml配置文件对于Android应用开发来说是非常重要的基础知识,本文旨在总结该配置文件中重点的用法,以便日后查 ...

  7. SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解

    springboot采纳了建立生产就绪Spring应用程序的观点. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.在一般情况下,我们不需要做太多的配置就能够让spring boot正 ...

  8. SpringBoot非官方教程 | 第二篇:SpringBoot配置文件详解

    springboot采纳了建立生产就绪Spring应用程序的观点. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.在一般情况下,我们不需要做太多的配置就能够让spring boot正 ...

  9. 代码检查规则:Java语言案例详解

    本节课程为<代码检查规则:Java语言案例详解>, 通常情况下Java的代码检查规则可以分为以下十类: 接下来,让我们具体来看看每个分类的内容. 一.源文件规范 该类规范主要从文件名.文件 ...

最新文章

  1. python定义字典列表_[Python基础]五、列表、元组和字典
  2. QT分页控件,开源,供大家使用
  3. zipsys驱动签名工具_全球首发 300系列主板USB WIN7 64位驱动 SMXDIY
  4. Ajax jquery的库的简化版本
  5. 偏最小二乘回归分析_线性回归特征归一化
  6. 微信小程序获取用户的头像和昵称
  7. java中 CopyOnWriteArrayList 的使用
  8. filezilla定时上传_FTP上传文件经常中断或超时的解决方案[完整篇]
  9. 对已存在的标签元素添加子元素
  10. 国家或地区内期货市场竞争格局的变迁
  11. 【ELT.ZIP】OpenHarmony啃论文俱乐部——浅析稀疏表示医学图像
  12. 做数据分析必看的书有哪些?
  13. 用python画皮卡丘-用python画一只可爱的皮卡丘
  14. Navigating to current location (/user) is not allowed
  15. 守护进程——解放本地PC
  16. C++ API 设计 10 第五章 设计风格
  17. 文件内容读取相关操作
  18. 同步fifo与异步fifo
  19. BSV上的高效 zk-SNARK:技术解释
  20. 2021年全球未来50强排行榜:16家公司来自中国,美国仅信息技术行业就有16家公司上榜(附年榜TOP50详单)

热门文章

  1. RGB彩色空间的不同转换公式 1
  2. 【转】模仿绘画风格的算法:A Neural Algorithm of Artistic Style
  3. Work20230417
  4. 快速转换:将音乐文件转换为MP3格式的步骤
  5. java常量final是什么_java:变量,常量和final关键字--基础篇
  6. 《梦幻西游H5》L inux搭建游戏服务器!
  7. 仿《广州从化区慢性病地理信息平台》项目研发总结
  8. python locust学习笔记
  9. 如何快速在Mac 安装 jq 命令行 JSON 解析器
  10. Mac必备效率软件|Alfred的基础使用教程