Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 7535d3f

Browse files
Added ImageServlet folder in the MVCPracticeAdvanced section of a small course on Java EE
1 parent 41bfd3b commit 7535d3f

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package ImageServlet;
2+
3+
import AirportSimulatorTwo.Service.ImageService;
4+
import jakarta.servlet.ServletOutputStream;
5+
import jakarta.servlet.annotation.WebServlet;
6+
import jakarta.servlet.http.HttpServlet;
7+
import jakarta.servlet.http.HttpServletRequest;
8+
import jakarta.servlet.http.HttpServletResponse;
9+
import lombok.SneakyThrows;
10+
11+
import java.io.InputStream;
12+
13+
@WebServlet("/Image/*")
14+
public class ImageServlet extends HttpServlet {
15+
private final ImageService imageService = ImageService.getInstance();
16+
@Override
17+
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
18+
String requestUri = req.getRequestURI();
19+
String imagePath = requestUri.replace("/Image","");
20+
21+
/*
22+
Если картинка на сервере есть, то мы возвращаем поток данных в
23+
response, перед этим установив тип передаваемого контента и
24+
собственно пишем данные в выходной поток методом writeImage,
25+
если же ее нет (файла нет) мы возвращаем 404 страницу.
26+
*/
27+
imageService.getImage(imagePath).
28+
ifPresentOrElse(image -> {
29+
resp.setContentType("application/octet-stream");
30+
writeImage(image, resp);
31+
}, () -> resp.setStatus(404));
32+
}
33+
/*
34+
Метод позволяет передать наш файл (картинку) от сервера к пользователю,
35+
т.е. преобразовывает входящий поток байт в исходящий из сервлета поток
36+
байт.
37+
*/
38+
@SneakyThrows
39+
private void writeImage(InputStream image, HttpServletResponse resp) {
40+
try(image; ServletOutputStream outputStream = resp.getOutputStream()){
41+
int currentByte;
42+
while ((currentByte = image.read()) != -1) {
43+
outputStream.write(currentByte);
44+
}
45+
}
46+
}
47+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /