01 import java.io.*;
02 import java.util.*;
03 import java.util.zip.*;
04 import javax.servlet.*;
05 import javax.servlet.http.*;
06
07 public class ViewFileCompress extends HttpServlet {
08
09 public void doGet(HttpServletRequest req, HttpServletResponse res)
10 throws ServletException, IOException {
11
12 OutputStream out = null;
13
14 /* Vyberieme vhodný typ kódovania založený na
15 hodnote parametra Accept-Encoding. Vyberieme GZIP ak hlavička
16 obsahuje "gzip". Alebo vyberieme ZIP ak hlavička
17 obsahuje "compress". Posledná varianta je bez kompresie. */
18
19 String encodings = req.getHeader("Accept-Encoding");
20 if (encodings != null && encodings.indexOf("gzip") != -1) {
21 res.setHeader("Content-Encoding", "gzip");
22 out = new GZIPOutputStream(res.getOutputStream());
23 }
24 else if (encodings != null && encodings.indexOf("compress") != -1) {
25 res.setHeader("Content-Encoding", "x-compress");
26 out = new ZipOutputStream(res.getOutputStream());
27 ((ZipOutputStream)out).putNextEntry(new ZipEntry("zip_name"));
28 }
29 else {
30 out = res.getOutputStream();
31 }
32
33 // získame odkaz na súbor
34 String file = req.getPathTranslated();
35
36 // ak nie je súbor, vrátime SC_FORBIDDEN
37 if (file == null) {
38 res.sendError(res.SC_FORBIDDEN);
39 return;
40 }
41
42 // získame a nastavíme typ súboru
43 String contentType = getServletContext().getMimeType(file);
44 res.setContentType(contentType);
45
46 // vrátime súbor využitím triedy interval.ServeFile
47 try {
48 ServeFile.returnFile(file, out);
49 }
50 catch (FileNotFoundException e) {
51 res.sendError(res.SC_NOT_FOUND);
52 return;
53 }
54 catch (IOException e) {
55 getServletContext().log("Problém s posielaním súboru", e);
56 }
57
58 out.close();
59 }
60 }
|