diff --git a/README.md b/README.md deleted file mode 100644 index 49cc885..0000000 --- a/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Home Task Week 9 - -The main goal of this hometask is to create web file manager using Servet API and Files NIO -It must have an ability to display directory contents (subdirectories and files), view (if it's possible), create and remove files. - -Several steps to do: - -1. Download latest [tomcat]{http://tomcat.apache.org/download-80.cgi} -2. Register javax.servlet-api-3.1.0.jar as a lib in your project -3. Create run [configuration]{http://devcolibri.com/4249} (2 point) -4. Implement unimplemented methods :) \ No newline at end of file diff --git a/src/com/geekhub/hw8/CreateFileServlet.java b/src/com/geekhub/hw8/CreateFileServlet.java index 940501f..8325644 100644 --- a/src/com/geekhub/hw8/CreateFileServlet.java +++ b/src/com/geekhub/hw8/CreateFileServlet.java @@ -6,12 +6,32 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; @WebServlet("/file/create") public class CreateFileServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - super.doGet(req, resp); + Path path = Paths.get(req.getParameter("name"), req.getParameter("fileName")); + req.setAttribute("name", path.getParent().toString()); + if(creteFile(path)){ + req.getRequestDispatcher("/dir/view").forward(req, resp); + }else{ + resp.sendError(HttpServletResponse.SC_FORBIDDEN); + } } + + private boolean creteFile(Path name){ + try { + Files.createFile(name); + return true; + } catch (IOException e) { + e.printStackTrace(); + return false; + } + } + } diff --git a/src/com/geekhub/hw8/RemoveFileServlet.java b/src/com/geekhub/hw8/RemoveFileServlet.java index a6322e6..8779e8a 100644 --- a/src/com/geekhub/hw8/RemoveFileServlet.java +++ b/src/com/geekhub/hw8/RemoveFileServlet.java @@ -6,12 +6,30 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; @WebServlet("/file/remove") public class RemoveFileServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - super.doGet(req, resp); + Path path = Paths.get(req.getParameter("name")); + req.setAttribute("name", path.getParent().toString()); + if(deleteFile(path)) + req.getRequestDispatcher("/dir/view").forward(req, resp); + else + resp.sendError(HttpServletResponse.SC_FORBIDDEN); } + + private boolean deleteFile(Path path){ + try { + return Files.deleteIfExists(path); + } catch (IOException e) { + e.printStackTrace(); + } + return false; + } + } diff --git a/src/com/geekhub/hw8/ViewDirectoryServlet.java b/src/com/geekhub/hw8/ViewDirectoryServlet.java index d915e71..ba4b55b 100644 --- a/src/com/geekhub/hw8/ViewDirectoryServlet.java +++ b/src/com/geekhub/hw8/ViewDirectoryServlet.java @@ -9,12 +9,14 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; +import java.nio.file.*; +import java.util.ArrayList; +import java.util.Base64; +import java.util.Iterator; +import java.util.List; @WebServlet(value = "/dir/view", initParams = { - @WebInitParam(name = "root", value = "D:\\") + @WebInitParam(name = "root", value = "E:\\") }) public class ViewDirectoryServlet extends HttpServlet { @@ -28,15 +30,66 @@ public void init(ServletConfig config) throws ServletException { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { StringBuilder sb = new StringBuilder(); + String reqParam = req.getParameter("name")!= null ? req.getParameter("name"): ROOT_PATH.toAbsolutePath().toString(); + if (!reqParam.equals(ROOT_PATH.toAbsolutePath().toString())) { + ROOT_PATH = Paths.get(req.getParameter("name")); + }else + ROOT_PATH = Paths.get("E:\\"); + if(reqParam != null){ + if(Files.exists(Paths.get(reqParam))) + if(!Files.isDirectory(Paths.get(reqParam))){ + req.getRequestDispatcher("/file/view").forward(req,resp); + } + } sb.append(""); - + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(""); + getParentFolder(sb); + for(Path path : getPaths()){ + appendLink(sb, path.getFileName().toString(), path); + } //TODO: Implement directory listing here - + sb.append(""); + sb.append("

Create file on this directory:

"); + sb.append("
\n" + + " \n" + + ""+ + " \n" + + " \n" + + "
"); sb.append(""); + resp.getWriter().write(sb.toString()); } private void appendLink(StringBuilder sb, String text, Path path) { //TODO: Implement link rendering based on path type (directory or file) + if(Files.isDirectory(path)) + sb.append("" +"--" + text + "" + "
"); + else + sb.append("" +"--" + text + " " + + " " + "Delete file" + "
"); + + } + + private void getParentFolder(StringBuilder sb){ + if(ROOT_PATH.getParent() != null) + sb.append("" + ROOT_PATH.getParent().toString() + "" + "
"); } + + private List getPaths() throws IOException { + List result = new ArrayList<>(); + try (DirectoryStream stream = Files.newDirectoryStream(ROOT_PATH)) { + for (Path entry: stream) { + result.add(entry); + } + } catch (DirectoryIteratorException ex) { + throw ex.getCause(); + } + + return result; + } + } diff --git a/src/com/geekhub/hw8/ViewFileServlet.java b/src/com/geekhub/hw8/ViewFileServlet.java index 263194b..223114c 100644 --- a/src/com/geekhub/hw8/ViewFileServlet.java +++ b/src/com/geekhub/hw8/ViewFileServlet.java @@ -5,14 +5,40 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.BufferedReader; +import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.Charset; +import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; @WebServlet("/file/view") public class ViewFileServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - super.doGet(req, resp); + StringBuilder sb = new StringBuilder(); + sb.append(""); + sb.append("

"); + sb.append(getFileData(req.getParameter("name"))); + sb.append("

"); + sb.append(""); + resp.getWriter().write(sb.toString()); } + + private String getFileData(String path){ + StringBuilder content = new StringBuilder(); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(path), "Cp1252"))) { + while(reader.ready()){ + content.append(reader.readLine() + "\n"); + } + } catch (IOException e) { + e.printStackTrace(); + } + return content.toString(); + } + }