Servlet 定位资源文件的方式


Servlet 定位资源文件

在这里插入图片描述

1. web 目录下的资源

  • 如果要查找 web 目录下的资源,应该使用 ServletContext 去查找。
    • getRealPath("/"); 获取资源的绝对路径,获得流需要再调用方法;
    • getResourceAsStream("/路径"); 直接返回资源的输入流,但不能获得资源的绝对路径。
  • LocationServlet(println):
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

@WebServlet("/locationServlet")
public class LocationServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1. 找到目标文件(如果是web目录下的资源,要使用ServletContext去查找)
        // getRealPath("/");//获取资源的绝对路径
        String path = getServletContext().getRealPath("/img/1.jpg");
        InputStream inputStream1 = new FileInputStream(path);
        response.getWriter().println(path);
        
        // getResourceAsStream("/路径");//直接返回资源的输入流
        InputStream inputStream2 = request.getServletContext().getResourceAsStream("/img/1.jpg");
        response.getWriter().println(inputStream2.toString());

        //2. 获取Response的输出流
        ServletOutputStream outputStream = response.getOutputStream();

        //3. 边读取目标文件的数据边输出,向浏览器输出该文件
        byte[] buf = new byte[1024];
        int length = 0;
        while ((length = inputStream2.read(buf)) != -1) {
            outputStream.write(buf, 0, length);
        }

        inputStream2.close();
    }
}

2. web 目录外的资源

  • 如果要查找是 src下面的内容,应该使用类路径去查找。
  • class.getResourceAsStream("/db.properties"); 定位到了 classes 目录:
    在这里插入图片描述
  • Web 项目发布以后是没有 src 目录的,src 目录下的代码都编译后存放在了 classes 目录下。
  • LocationServlet:
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Properties;

@WebServlet("/locationServlet")
public class LocationServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        //如果是读取src下面的内容,要使用类路径
        //注意:如果需要使用类路径,一定要使用Class对象的getResourceAsStream的方法。
        //类路径: 查找类路径
        InputStream inputStream = LocationServlet.class.getResourceAsStream("/db.properties");//这个/则代表了classes目录
        //加载到ProPerties中
        Properties properties = new Properties();
        properties.load(inputStream);

        //输出到浏览器
        PrintWriter out = response.getWriter();
        out.write("用户名:" + properties.getProperty("username") + "<br/>");
        out.write("密码:" + properties.getProperty("password"));
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

原文链接:https://qwert.blog.csdn.net/article/details/105602818

发布了401 篇原创文章 · 获赞 416 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Regino/article/details/105602818