servlet读取资源文件

读取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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值