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 {
String path = getServletContext().getRealPath("/img/1.jpg");
InputStream inputStream1 = new FileInputStream(path);
response.getWriter().println(path);
InputStream inputStream2 = request.getServletContext().getResourceAsStream("/img/1.jpg");
response.getWriter().println(inputStream2.toString());
ServletOutputStream outputStream = response.getOutputStream();
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 目录下。
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");
InputStream inputStream = LocationServlet.class.getResourceAsStream("/db.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