读取properties资源文件
分别读取这三个资源文件
resource1.properties
这个文件在resources目录下
它在程序编译完成之后所在的位置是
getResourceAsStream
方法的相对的目录是在servlet01这个目录下
所以我们要访问的是/WEB-INF/classes/resource1.properties
编写代码
@WebServlet(urlPatterns = "/hello1")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter writer = resp.getWriter();
ServletContext servletContext = getServletContext();
InputStream resource1Stream = servletContext.getResourceAsStream("/WEB-INF/classes/resource1.properties");
Properties properties1 = new Properties();
properties1.load(resource1Stream);
String re1 = properties1.getProperty("re1");
writer.println(re1);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
resource2.properties
这个文件在java目录下
但是发现程序编译完之后,在tagert目录里并找不到这个文件,原因如下
标准的Maven项目都会有一个resources目录来存放我们所有的资源配置文件,但是我们往往在项目中不仅仅会把所有的资源配置文件都放在resources中,同时我们也有可能放在项目中的其他位置,那么默认的maven项目构建编译时就不会把我们其他目录下的资源配置文件导出到target目录中,就会导致我们的资源配置文件读取失败,从而导致我们的项目报错出现异常,比如说尤其我们在使用MyBatis框架时,往往Mapper.xml配置文件都会放在dao包中和dao接口类放在一起的,那么执行程序的时候,其中的xml配置文件就一定会读取失败,不会生成到maven的target目录中,所以我们要在项目的pom.xml文件中进行设置,并且我建议大家,每新建一个maven项目,就把该设置导入pom.xml文件中,以防不测!!!
也就是默认的maven只会将resource文件夹中的资源文件复制到classpath,而java文件夹中的文件并不会被导出
解决方法:
修改pom.xml文件,添加下面的代码
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
意思就是讲src中的所有properties文件和xml文件排除在不导出的列表中,也就是他们可以被导出了
再次编译代码
出现了
于是乎,编写java代码
@WebServlet(urlPatterns = "/hello2")
public class Hello2Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter writer = resp.getWriter();
InputStream is = getServletContext().getResourceAsStream("WEB-INF/classes/com/kehao/servlet/resource2.properties");
Properties prop = new Properties();
prop.load(is);
writer.println(prop.getProperty("re2"));
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
访问properties文件成功
resource3.properties
这个文件在/WEB-INF目录下
它在程序编译完成之后所在的位置是
getResourceAsStream
方法的相对的目录是在servlet01这个目录下
所以我们要访问的是/WEB-INF/resource3.properties
编写代码
@WebServlet("/hello3")
public class Hello3Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter writer = resp.getWriter();
InputStream is = getServletContext().getResourceAsStream("/WEB-INF/resource3.properties");
Properties prop = new Properties();
prop.load(is);
writer.println(prop.getProperty("re3"));
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}