import java.io.IOException; import java.io.PrintWriter; import java.nio.file.FileAlreadyExistsException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Set; import java.util.TreeSet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ListManagerServlet extends HttpServlet { /** * les adresse mails */ private Set addresses = new TreeSet<>(); /** * Le chemin où nous stockons le fichier de sauvegarde. Celui est initialisé de telle sorte * que le fichier n'est pas positionné sur une url accessible depuis le web. */ private Path filePath; @Override public void init() throws ServletException { String fileName = getInitParameter("addressfile"); System.err.println(fileName); // par défaut le répertoire de travail est le "home", ce qui peut être correct. Les lignes suivantes permettent de positionner // le fichier "au dessus" des fichiers accessibles par le web. Path p = Paths.get(getServletContext().getRealPath("/")).getParent(); filePath = Paths.get(p.toString(), fileName); System.err.println(p); System.err.println(filePath); try { if (filePath.toFile().exists()){ addresses = new TreeSet<>(Files.readAllLines(filePath)); } else{ Files.createFile(filePath); } } catch (IOException e2) { e2.printStackTrace(); } System.err.println(addresses); } protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); res.setHeader("pragma", "no-cache"); PrintWriter out = res.getWriter(); out.print("List Manager"); out.print("

Members:


"); out.print("Enter your email address:
"); out.print(""); out.print(""); out.print("
"); out.close(); } protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { String email = req.getParameter("email"); String msg = null; if (email == null) { res.sendError(res.SC_BAD_REQUEST, "No email address specified."); return; } switch (req.getParameter("action")) { case "subscribe": if (addresses.add(email)) { msg = "Address " + email + " has been subscribed."; } else { res.sendError(HttpServletResponse.SC_BAD_REQUEST, "Address " + email + " was already subscribed."); return; } break; case "unsubscribe": if (addresses.remove(email)) { msg = "Address " + email + " has been removed."; } else { res.sendError(HttpServletResponse.SC_BAD_REQUEST, "Address " + email + " was not subscribed."); return; } break; default: break; } res.setContentType("text/html"); res.setHeader("pragma", "no-cache"); PrintWriter out = res.getWriter(); out.print("List Manager"); out.print(msg); out.print("
Show the list"); out.close(); } /** * On profite du cycle de vie la servlet * @see javax.servlet.GenericServlet#destroy() */ @Override public void destroy() { super.destroy(); try { System.err.println("saving addresses"); Files.write(filePath, addresses); } catch (IOException e) { e.printStackTrace(); } } }