diff --git a/patterns/front-controller/pom.xml b/patterns/front-controller/pom.xml new file mode 100644 index 0000000000..2dabf484e1 --- /dev/null +++ b/patterns/front-controller/pom.xml @@ -0,0 +1,45 @@ + + + 4.0.0 + + front-controller + war + + + patterns-parent + com.baeldung.patterns + 1.0.0-SNAPSHOT + .. + + + + + javax.servlet + javax.servlet-api + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org.apache.maven.plugins + maven-war-plugin + + + org.eclipse.jetty + jetty-maven-plugin + + + /front-controller + + + + + + diff --git a/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/FrontControllerServlet.java b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/FrontControllerServlet.java new file mode 100644 index 0000000000..9fb120399c --- /dev/null +++ b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/FrontControllerServlet.java @@ -0,0 +1,38 @@ +package com.baeldung.patterns.front.controller; + +import com.baeldung.patterns.front.controller.commands.FrontCommand; +import com.baeldung.patterns.front.controller.commands.UnknownCommand; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class FrontControllerServlet extends HttpServlet { + @Override + protected void doGet( + HttpServletRequest request, + HttpServletResponse response + ) throws ServletException, IOException { + FrontCommand command = getCommand(request); + command.init(getServletContext(), request, response); + command.process(); + } + + private FrontCommand getCommand(HttpServletRequest request) { + try { + Class type = Class.forName( + String.format( + "com.baeldung.patterns.front.controller.commands.%sCommand", + request.getParameter("command") + ) + ); + return (FrontCommand) type + .asSubclass(FrontCommand.class) + .newInstance(); + } catch (Exception e) { + return new UnknownCommand(); + } + } +} diff --git a/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/commands/FrontCommand.java b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/commands/FrontCommand.java new file mode 100644 index 0000000000..cc92731050 --- /dev/null +++ b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/commands/FrontCommand.java @@ -0,0 +1,32 @@ +package com.baeldung.patterns.front.controller.commands; + +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public abstract class FrontCommand { + protected ServletContext context; + protected HttpServletRequest request; + protected HttpServletResponse response; + + public void init( + ServletContext servletContext, + HttpServletRequest servletRequest, + HttpServletResponse servletResponse + ) { + this.context = servletContext; + this.request = servletRequest; + this.response = servletResponse; + } + + public abstract void process() throws ServletException, IOException; + + protected void forward(String target) throws ServletException, IOException { + target = String.format("/WEB-INF/jsp/%s.jsp", target); + RequestDispatcher dispatcher = context.getRequestDispatcher(target); + dispatcher.forward(request, response); + } +} diff --git a/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/commands/SearchCommand.java b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/commands/SearchCommand.java new file mode 100644 index 0000000000..21028b07f0 --- /dev/null +++ b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/commands/SearchCommand.java @@ -0,0 +1,21 @@ +package com.baeldung.patterns.front.controller.commands; + +import com.baeldung.patterns.front.controller.data.Book; +import com.baeldung.patterns.front.controller.data.BookshelfImpl; + +import javax.servlet.ServletException; +import java.io.IOException; + +public class SearchCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + Book book = new BookshelfImpl().getInstance() + .findByTitle(request.getParameter("title")); + if (book != null) { + request.setAttribute("book", book); + forward("book-found"); + } else { + forward("book-notfound"); + } + } +} diff --git a/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/commands/UnknownCommand.java b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/commands/UnknownCommand.java new file mode 100644 index 0000000000..9f24746598 --- /dev/null +++ b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/commands/UnknownCommand.java @@ -0,0 +1,11 @@ +package com.baeldung.patterns.front.controller.commands; + +import javax.servlet.ServletException; +import java.io.IOException; + +public class UnknownCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + forward("unknown"); + } +} diff --git a/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/Book.java b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/Book.java new file mode 100644 index 0000000000..5a15df92c4 --- /dev/null +++ b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/Book.java @@ -0,0 +1,15 @@ +package com.baeldung.patterns.front.controller.data; + +public interface Book { + String getAuthor(); + + void setAuthor(String author); + + String getTitle(); + + void setTitle(String title); + + Double getPrice(); + + void setPrice(Double price); +} diff --git a/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/BookImpl.java b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/BookImpl.java new file mode 100644 index 0000000000..0421ff5623 --- /dev/null +++ b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/BookImpl.java @@ -0,0 +1,46 @@ +package com.baeldung.patterns.front.controller.data; + +public class BookImpl implements Book { + private String author; + private String title; + private Double price; + + public BookImpl() { + } + + public BookImpl(String author, String title, Double price) { + this.author = author; + this.title = title; + this.price = price; + } + + @Override + public String getAuthor() { + return author; + } + + @Override + public void setAuthor(String author) { + this.author = author; + } + + @Override + public String getTitle() { + return title; + } + + @Override + public void setTitle(String title) { + this.title = title; + } + + @Override + public Double getPrice() { + return price; + } + + @Override + public void setPrice(Double price) { + this.price = price; + } +} diff --git a/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/Bookshelf.java b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/Bookshelf.java new file mode 100644 index 0000000000..21e3067133 --- /dev/null +++ b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/Bookshelf.java @@ -0,0 +1,15 @@ +package com.baeldung.patterns.front.controller.data; + +public interface Bookshelf { + + default void init() { + add(new BookImpl("Wilson, Robert Anton & Shea, Robert", "Illuminati", 9.99)); + add(new BookImpl("Fowler, Martin", "Patterns of Enterprise Application Architecture", 27.88)); + } + + Bookshelf getInstance(); + + boolean add(E book); + + Book findByTitle(String title); +} diff --git a/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/BookshelfImpl.java b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/BookshelfImpl.java new file mode 100644 index 0000000000..dd1fa4e523 --- /dev/null +++ b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/BookshelfImpl.java @@ -0,0 +1,24 @@ +package com.baeldung.patterns.front.controller.data; + +import java.util.ArrayList; + +public class BookshelfImpl extends ArrayList implements Bookshelf { + private static Bookshelf INSTANCE; + + @Override + public Bookshelf getInstance() { + if (INSTANCE == null) { + INSTANCE = new BookshelfImpl(); + INSTANCE.init(); + } + return INSTANCE; + } + + @Override + public Book findByTitle(String title) { + return this.stream() + .filter(book -> book.getTitle().toLowerCase().contains(title.toLowerCase())) + .findFirst() + .orElse(null); + } +} diff --git a/patterns/front-controller/src/main/resources/front controller.png b/patterns/front-controller/src/main/resources/front controller.png new file mode 100644 index 0000000000..bd475bf3f3 Binary files /dev/null and b/patterns/front-controller/src/main/resources/front controller.png differ diff --git a/patterns/front-controller/src/main/resources/front controller.puml b/patterns/front-controller/src/main/resources/front controller.puml new file mode 100644 index 0000000000..fbd4f416ef --- /dev/null +++ b/patterns/front-controller/src/main/resources/front controller.puml @@ -0,0 +1,22 @@ +@startuml + +class Handler { +doGet +doPost +} + +abstract class AbstractCommand { +process +} +class ConcreteCommand1 { +process +} +class ConcreteCommand2 { +process +} + +Handler .right.> AbstractCommand +AbstractCommand <|-- ConcreteCommand1 +AbstractCommand <|-- ConcreteCommand2 + +@enduml \ No newline at end of file diff --git a/patterns/front-controller/src/main/webapp/WEB-INF/jsp/book-found.jsp b/patterns/front-controller/src/main/webapp/WEB-INF/jsp/book-found.jsp new file mode 100644 index 0000000000..42e08b4a46 --- /dev/null +++ b/patterns/front-controller/src/main/webapp/WEB-INF/jsp/book-found.jsp @@ -0,0 +1,12 @@ + + + + Bookshelf: Title found + + +

Our Bookshelf contains this title:

+

${book.getTitle()}

+

Author: ${book.getAuthor()}

+ + + diff --git a/patterns/front-controller/src/main/webapp/WEB-INF/jsp/book-notfound.jsp b/patterns/front-controller/src/main/webapp/WEB-INF/jsp/book-notfound.jsp new file mode 100644 index 0000000000..2f8ac01755 --- /dev/null +++ b/patterns/front-controller/src/main/webapp/WEB-INF/jsp/book-notfound.jsp @@ -0,0 +1,10 @@ + + + + Bookshelf: Title not found + + +

Our Bookshelf doesn't contains this title:

+

${param.get("title")}

+ + diff --git a/patterns/front-controller/src/main/webapp/WEB-INF/jsp/unknown.jsp b/patterns/front-controller/src/main/webapp/WEB-INF/jsp/unknown.jsp new file mode 100644 index 0000000000..b52b2de8d5 --- /dev/null +++ b/patterns/front-controller/src/main/webapp/WEB-INF/jsp/unknown.jsp @@ -0,0 +1,9 @@ + + + + Bookshelf: Command unknown + + +

Sorry, this command is not known!

+ + diff --git a/patterns/front-controller/src/main/webapp/WEB-INF/web.xml b/patterns/front-controller/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..4abca2bb97 --- /dev/null +++ b/patterns/front-controller/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,15 @@ + + + + front-controller + com.baeldung.patterns.front.controller.FrontControllerServlet + + + front-controller + / + + diff --git a/patterns/src/main/java/com/baeldung/patterns/FrontControllerServlet.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/FrontControllerServlet.java similarity index 78% rename from patterns/src/main/java/com/baeldung/patterns/FrontControllerServlet.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/FrontControllerServlet.java index beba1d66e5..9d8a004265 100644 --- a/patterns/src/main/java/com/baeldung/patterns/FrontControllerServlet.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/FrontControllerServlet.java @@ -1,9 +1,9 @@ -package com.baeldung.patterns; +package com.baeldung.patterns.intercepting.filter; -import com.baeldung.patterns.commands.FrontCommand; -import com.baeldung.patterns.commands.UnknownCommand; -import com.baeldung.patterns.data.Bookshelf; -import com.baeldung.patterns.data.BookshelfImpl; +import com.baeldung.patterns.intercepting.filter.commands.FrontCommand; +import com.baeldung.patterns.intercepting.filter.commands.UnknownCommand; +import com.baeldung.patterns.intercepting.filter.data.Bookshelf; +import com.baeldung.patterns.intercepting.filter.data.BookshelfImpl; import javax.servlet.ServletConfig; import javax.servlet.ServletException; @@ -13,7 +13,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -@WebServlet(name = "front-controller", urlPatterns = "/index") +@WebServlet(name = "intercepting-filter", urlPatterns = "/") public class FrontControllerServlet extends HttpServlet { @Override public void init(ServletConfig config) throws ServletException { @@ -52,7 +52,7 @@ public class FrontControllerServlet extends HttpServlet { try { Class type = Class.forName( String.format( - "com.baeldung.patterns.commands.%sCommand", + "com.baeldung.patterns.intercepting.filter.commands.%sCommand", request.getParameter("command") ) ); diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/CheckoutCommand.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/CheckoutCommand.java similarity index 80% rename from patterns/src/main/java/com/baeldung/patterns/commands/CheckoutCommand.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/CheckoutCommand.java index be6dbe84bd..fda88c741e 100644 --- a/patterns/src/main/java/com/baeldung/patterns/commands/CheckoutCommand.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/CheckoutCommand.java @@ -1,6 +1,6 @@ -package com.baeldung.patterns.commands; +package com.baeldung.patterns.intercepting.filter.commands; -import com.baeldung.patterns.data.Order; +import com.baeldung.patterns.intercepting.filter.data.Order; import javax.servlet.ServletException; import javax.servlet.http.HttpSession; @@ -13,7 +13,7 @@ public class CheckoutCommand extends FrontCommand { HttpSession session = request.getSession(false); if (request.getMethod().equals("POST")) { session.removeAttribute("order"); - response.sendRedirect("index?command=Home&message=Thank you for buying!"); + response.sendRedirect("/?command=Home&message=Thank you for buying!"); } else { Order order = (Order) session.getAttribute("order"); Double total = order.getItems().entrySet().stream() diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/FrontCommand.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/FrontCommand.java similarity index 84% rename from patterns/src/main/java/com/baeldung/patterns/commands/FrontCommand.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/FrontCommand.java index efc0ee4612..a3c545703b 100644 --- a/patterns/src/main/java/com/baeldung/patterns/commands/FrontCommand.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/FrontCommand.java @@ -1,7 +1,7 @@ -package com.baeldung.patterns.commands; +package com.baeldung.patterns.intercepting.filter.commands; -import com.baeldung.patterns.filters.FilterManager; -import com.baeldung.patterns.filters.OnIntercept; +import com.baeldung.patterns.intercepting.filter.filters.FilterManager; +import com.baeldung.patterns.intercepting.filter.filters.OnIntercept; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/HomeCommand.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/HomeCommand.java similarity index 76% rename from patterns/src/main/java/com/baeldung/patterns/commands/HomeCommand.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/HomeCommand.java index f2358400b9..33e60b44b5 100644 --- a/patterns/src/main/java/com/baeldung/patterns/commands/HomeCommand.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/HomeCommand.java @@ -1,6 +1,6 @@ -package com.baeldung.patterns.commands; +package com.baeldung.patterns.intercepting.filter.commands; -import com.baeldung.patterns.data.Bookshelf; +import com.baeldung.patterns.intercepting.filter.data.Bookshelf; import javax.servlet.ServletException; import java.io.IOException; diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/LoginCommand.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/LoginCommand.java similarity index 93% rename from patterns/src/main/java/com/baeldung/patterns/commands/LoginCommand.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/LoginCommand.java index 1a7795eb3c..cbc8ad9498 100644 --- a/patterns/src/main/java/com/baeldung/patterns/commands/LoginCommand.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/LoginCommand.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.commands; +package com.baeldung.patterns.intercepting.filter.commands; import javax.servlet.ServletException; import javax.servlet.http.HttpSession; diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/LogoutCommand.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/LogoutCommand.java similarity index 79% rename from patterns/src/main/java/com/baeldung/patterns/commands/LogoutCommand.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/LogoutCommand.java index 82f4e753c9..3c9475d6af 100644 --- a/patterns/src/main/java/com/baeldung/patterns/commands/LogoutCommand.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/LogoutCommand.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.commands; +package com.baeldung.patterns.intercepting.filter.commands; import javax.servlet.ServletException; import javax.servlet.http.HttpSession; @@ -11,6 +11,6 @@ public class LogoutCommand extends FrontCommand { HttpSession session = request.getSession(false); session.removeAttribute("username"); session.removeAttribute("order"); - response.sendRedirect("index?command=Home"); + response.sendRedirect("/?command=Home"); } } diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/OrderCommand.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/OrderCommand.java similarity index 72% rename from patterns/src/main/java/com/baeldung/patterns/commands/OrderCommand.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/OrderCommand.java index 5926dfddb5..e53fcf78dd 100644 --- a/patterns/src/main/java/com/baeldung/patterns/commands/OrderCommand.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/OrderCommand.java @@ -1,9 +1,9 @@ -package com.baeldung.patterns.commands; +package com.baeldung.patterns.intercepting.filter.commands; -import com.baeldung.patterns.data.Book; -import com.baeldung.patterns.data.Bookshelf; -import com.baeldung.patterns.data.Order; -import com.baeldung.patterns.data.OrderImpl; +import com.baeldung.patterns.intercepting.filter.data.Book; +import com.baeldung.patterns.intercepting.filter.data.Bookshelf; +import com.baeldung.patterns.intercepting.filter.data.Order; +import com.baeldung.patterns.intercepting.filter.data.OrderImpl; import javax.servlet.ServletException; import javax.servlet.http.HttpSession; @@ -27,7 +27,7 @@ public class OrderCommand extends FrontCommand { Book book = bookshelf.get(isbn); order.add(book, quantity); session.setAttribute("order", order); - response.sendRedirect(String.format("index?command=Show&isbn=%s", isbn)); + response.sendRedirect(String.format("/?command=Show&isbn=%s", isbn)); } } } diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/SearchCommand.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/SearchCommand.java similarity index 77% rename from patterns/src/main/java/com/baeldung/patterns/commands/SearchCommand.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/SearchCommand.java index 30e401e83a..6c52f4f5a9 100644 --- a/patterns/src/main/java/com/baeldung/patterns/commands/SearchCommand.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/SearchCommand.java @@ -1,7 +1,7 @@ -package com.baeldung.patterns.commands; +package com.baeldung.patterns.intercepting.filter.commands; -import com.baeldung.patterns.data.Book; -import com.baeldung.patterns.data.Bookshelf; +import com.baeldung.patterns.intercepting.filter.data.Book; +import com.baeldung.patterns.intercepting.filter.data.Bookshelf; import javax.servlet.ServletException; import java.io.IOException; diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/ShowCommand.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/ShowCommand.java similarity index 75% rename from patterns/src/main/java/com/baeldung/patterns/commands/ShowCommand.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/ShowCommand.java index 3226d9969f..1ea5ca6edb 100644 --- a/patterns/src/main/java/com/baeldung/patterns/commands/ShowCommand.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/ShowCommand.java @@ -1,7 +1,7 @@ -package com.baeldung.patterns.commands; +package com.baeldung.patterns.intercepting.filter.commands; -import com.baeldung.patterns.data.Book; -import com.baeldung.patterns.data.Bookshelf; +import com.baeldung.patterns.intercepting.filter.data.Book; +import com.baeldung.patterns.intercepting.filter.data.Bookshelf; import javax.servlet.ServletException; import java.io.IOException; diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/UnknownCommand.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/UnknownCommand.java similarity index 81% rename from patterns/src/main/java/com/baeldung/patterns/commands/UnknownCommand.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/UnknownCommand.java index 71634e5263..427efe5aba 100644 --- a/patterns/src/main/java/com/baeldung/patterns/commands/UnknownCommand.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/UnknownCommand.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.commands; +package com.baeldung.patterns.intercepting.filter.commands; import javax.servlet.ServletException; import java.io.IOException; diff --git a/patterns/src/main/java/com/baeldung/patterns/data/Book.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/Book.java similarity index 82% rename from patterns/src/main/java/com/baeldung/patterns/data/Book.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/Book.java index ab417aa93b..4e98095c2c 100644 --- a/patterns/src/main/java/com/baeldung/patterns/data/Book.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/Book.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.data; +package com.baeldung.patterns.intercepting.filter.data; public interface Book { String getIsbn(); diff --git a/patterns/src/main/java/com/baeldung/patterns/data/BookImpl.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/BookImpl.java similarity index 94% rename from patterns/src/main/java/com/baeldung/patterns/data/BookImpl.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/BookImpl.java index adecfd1d3a..cd0c0924e2 100644 --- a/patterns/src/main/java/com/baeldung/patterns/data/BookImpl.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/BookImpl.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.data; +package com.baeldung.patterns.intercepting.filter.data; public class BookImpl implements Book { private String isbn; diff --git a/patterns/src/main/java/com/baeldung/patterns/data/Bookshelf.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/Bookshelf.java similarity index 89% rename from patterns/src/main/java/com/baeldung/patterns/data/Bookshelf.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/Bookshelf.java index 66a1da9272..26541de8e0 100644 --- a/patterns/src/main/java/com/baeldung/patterns/data/Bookshelf.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/Bookshelf.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.data; +package com.baeldung.patterns.intercepting.filter.data; import java.util.List; diff --git a/patterns/src/main/java/com/baeldung/patterns/data/BookshelfImpl.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/BookshelfImpl.java similarity index 91% rename from patterns/src/main/java/com/baeldung/patterns/data/BookshelfImpl.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/BookshelfImpl.java index a7cbda140d..5767af8e50 100644 --- a/patterns/src/main/java/com/baeldung/patterns/data/BookshelfImpl.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/BookshelfImpl.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.data; +package com.baeldung.patterns.intercepting.filter.data; import java.util.ArrayList; import java.util.List; diff --git a/patterns/src/main/java/com/baeldung/patterns/data/Order.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/Order.java similarity index 73% rename from patterns/src/main/java/com/baeldung/patterns/data/Order.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/Order.java index 6dc67e4e58..f4a32002d7 100644 --- a/patterns/src/main/java/com/baeldung/patterns/data/Order.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/Order.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.data; +package com.baeldung.patterns.intercepting.filter.data; import java.util.Map; diff --git a/patterns/src/main/java/com/baeldung/patterns/data/OrderImpl.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/OrderImpl.java similarity index 93% rename from patterns/src/main/java/com/baeldung/patterns/data/OrderImpl.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/OrderImpl.java index 73232ab11c..9f50e45082 100644 --- a/patterns/src/main/java/com/baeldung/patterns/data/OrderImpl.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/OrderImpl.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.data; +package com.baeldung.patterns.intercepting.filter.data; import java.util.HashMap; import java.util.Map; diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/AuthenticationFilter.java similarity index 86% rename from patterns/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/AuthenticationFilter.java index f5e03878ca..a2cac9d84c 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/AuthenticationFilter.java @@ -1,7 +1,7 @@ -package com.baeldung.patterns.filters; +package com.baeldung.patterns.intercepting.filter.filters; -import com.baeldung.patterns.commands.FrontCommand; -import com.baeldung.patterns.commands.LoginCommand; +import com.baeldung.patterns.intercepting.filter.commands.FrontCommand; +import com.baeldung.patterns.intercepting.filter.commands.LoginCommand; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/BaseFilter.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/BaseFilter.java similarity index 91% rename from patterns/src/main/java/com/baeldung/patterns/filters/BaseFilter.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/BaseFilter.java index 670039a62c..90d13a6eda 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/BaseFilter.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/BaseFilter.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.filters; +package com.baeldung.patterns.intercepting.filter.filters; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/EncodingFilter.java similarity index 90% rename from patterns/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/EncodingFilter.java index 2856bb1112..ef3f95382e 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/EncodingFilter.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.filters; +package com.baeldung.patterns.intercepting.filter.filters; import javax.servlet.*; import javax.servlet.annotation.WebFilter; @@ -6,7 +6,7 @@ import javax.servlet.annotation.WebInitParam; import java.io.IOException; @WebFilter( - servletNames = {"front-controller"}, + servletNames = {"intercepting-filter"}, initParams = {@WebInitParam(name = "encoding", value = "UTF-8")} ) public class EncodingFilter extends BaseFilter { diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/FilterChainImpl.java similarity index 91% rename from patterns/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/FilterChainImpl.java index 789fc003a0..80ddef785c 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/FilterChainImpl.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.filters; +package com.baeldung.patterns.intercepting.filter.filters; import javax.servlet.*; import java.io.IOException; diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/FilterManager.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/FilterManager.java similarity index 91% rename from patterns/src/main/java/com/baeldung/patterns/filters/FilterManager.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/FilterManager.java index ae945107fd..2f7b7ac703 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/FilterManager.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/FilterManager.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.filters; +package com.baeldung.patterns.intercepting.filter.filters; import javax.servlet.FilterChain; import javax.servlet.ServletException; diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/LoggingFilter.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/LoggingFilter.java similarity index 90% rename from patterns/src/main/java/com/baeldung/patterns/filters/LoggingFilter.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/LoggingFilter.java index f6ffc20585..0ebb397938 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/LoggingFilter.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/LoggingFilter.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.filters; +package com.baeldung.patterns.intercepting.filter.filters; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -11,7 +11,7 @@ import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import java.io.IOException; -@WebFilter(servletNames = "front-controller") +@WebFilter(servletNames = "intercepting-filter") public class LoggingFilter extends BaseFilter { private static final Logger log = LoggerFactory.getLogger(LoggingFilter.class); diff --git a/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/OnIntercept.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/OnIntercept.java new file mode 100644 index 0000000000..1a138f1e1c --- /dev/null +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/OnIntercept.java @@ -0,0 +1,5 @@ +package com.baeldung.patterns.intercepting.filter.filters; + +public interface OnIntercept { + void intercept(); +} diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/TemplateFilter.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/TemplateFilter.java similarity index 95% rename from patterns/src/main/java/com/baeldung/patterns/filters/TemplateFilter.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/TemplateFilter.java index 939d9ad84d..69c613fffe 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/TemplateFilter.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/TemplateFilter.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.filters; +package com.baeldung.patterns.intercepting.filter.filters; import javax.servlet.FilterChain; import javax.servlet.ServletException; diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/VisitorCounterFilter.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/VisitorCounterFilter.java similarity index 93% rename from patterns/src/main/java/com/baeldung/patterns/filters/VisitorCounterFilter.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/VisitorCounterFilter.java index 5c2358686b..5521b9faee 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/VisitorCounterFilter.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/VisitorCounterFilter.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.filters; +package com.baeldung.patterns.intercepting.filter.filters; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; diff --git a/patterns/src/main/resources/front_controller.png b/patterns/intercepting-filter/src/main/resources/front_controller.png similarity index 100% rename from patterns/src/main/resources/front_controller.png rename to patterns/intercepting-filter/src/main/resources/front_controller.png diff --git a/patterns/src/main/resources/front_controller.puml b/patterns/intercepting-filter/src/main/resources/front_controller.puml similarity index 100% rename from patterns/src/main/resources/front_controller.puml rename to patterns/intercepting-filter/src/main/resources/front_controller.puml diff --git a/patterns/src/main/resources/intercepting_filter.png b/patterns/intercepting-filter/src/main/resources/intercepting_filter.png similarity index 100% rename from patterns/src/main/resources/intercepting_filter.png rename to patterns/intercepting-filter/src/main/resources/intercepting_filter.png diff --git a/patterns/src/main/resources/intercepting_filter.puml b/patterns/intercepting-filter/src/main/resources/intercepting_filter.puml similarity index 100% rename from patterns/src/main/resources/intercepting_filter.puml rename to patterns/intercepting-filter/src/main/resources/intercepting_filter.puml diff --git a/patterns/src/main/webapp/WEB-INF/jsp/book-found.jsp b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/book-found.jsp similarity index 81% rename from patterns/src/main/webapp/WEB-INF/jsp/book-found.jsp rename to patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/book-found.jsp index 95a74b9e2e..4de1d3ca23 100644 --- a/patterns/src/main/webapp/WEB-INF/jsp/book-found.jsp +++ b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/book-found.jsp @@ -1,4 +1,4 @@ -<%@ page import="com.baeldung.patterns.data.Book" %> +<%@ page import="com.baeldung.patterns.intercepting.filter.data.Book" %> <%@ page import="java.util.List" %> @@ -10,12 +10,12 @@ <% for (Book book : (List) request.getAttribute("books")) { %>

<%= book.getTitle() %>

Author: <%= book.getAuthor() %>

-
+ - Go back... + Go back...
<% } %> <%@ include file="shopping-cart-hint.jsp"%> diff --git a/patterns/src/main/webapp/WEB-INF/jsp/book-notfound.jsp b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/book-notfound.jsp similarity index 100% rename from patterns/src/main/webapp/WEB-INF/jsp/book-notfound.jsp rename to patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/book-notfound.jsp diff --git a/patterns/src/main/webapp/WEB-INF/jsp/home.jsp b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/home.jsp similarity index 79% rename from patterns/src/main/webapp/WEB-INF/jsp/home.jsp rename to patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/home.jsp index e7bf1562ea..2c2d7c2f22 100644 --- a/patterns/src/main/webapp/WEB-INF/jsp/home.jsp +++ b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/home.jsp @@ -1,4 +1,4 @@ -<%@ page import="com.baeldung.patterns.data.Book" %> +<%@ page import="com.baeldung.patterns.intercepting.filter.data.Book" %> <%@ page import="java.util.List" %> @@ -6,7 +6,7 @@ Bookshelf: Home -
+
@@ -19,7 +19,7 @@

<%= book.getAuthor() %>:

<%= book.getTitle() %>

- More... + More... <% } %> <%@ include file="shopping-cart-hint.jsp"%> <%@ include file="visitor-counter.jsp"%> diff --git a/patterns/src/main/webapp/WEB-INF/jsp/login.jsp b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/login.jsp similarity index 89% rename from patterns/src/main/webapp/WEB-INF/jsp/login.jsp rename to patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/login.jsp index 6983fba949..619068bcae 100644 --- a/patterns/src/main/webapp/WEB-INF/jsp/login.jsp +++ b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/login.jsp @@ -6,7 +6,7 @@

Please input a username:

Login

-
+ "> diff --git a/patterns/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp similarity index 78% rename from patterns/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp rename to patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp index 9173c35711..7e0c051540 100644 --- a/patterns/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp +++ b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp @@ -1,4 +1,4 @@ -<%@ page import="com.baeldung.patterns.data.Order" %> +<%@ page import="com.baeldung.patterns.intercepting.filter.data.Order" %> <% if (session != null && session.getAttribute("order") != null) { %> <% Order order = ((Order) session.getAttribute("order")); %> <% if (order != null && order.getItems().size() > 0) { %> @@ -10,7 +10,7 @@ <% } else { %> <%= (order.getItems().size()) %> items. <% } %> - Checkout + Checkout

<% } %> <% } %> diff --git a/patterns/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp similarity index 80% rename from patterns/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp rename to patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp index 024a3bac3e..5f71d2e54e 100644 --- a/patterns/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp +++ b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp @@ -1,5 +1,5 @@ -<%@ page import="com.baeldung.patterns.data.Book" %> -<%@ page import="com.baeldung.patterns.data.Order" %> +<%@ page import="com.baeldung.patterns.intercepting.filter.data.Book" %> +<%@ page import="com.baeldung.patterns.intercepting.filter.data.Order" %> <%@ page import="java.util.Map" %> @@ -22,7 +22,7 @@

Total: <%= request.getAttribute("total") %>

- +
diff --git a/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/unknown.jsp b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/unknown.jsp new file mode 100644 index 0000000000..b52b2de8d5 --- /dev/null +++ b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/unknown.jsp @@ -0,0 +1,9 @@ + + + + Bookshelf: Command unknown + + +

Sorry, this command is not known!

+ + diff --git a/patterns/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp similarity index 60% rename from patterns/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp rename to patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp index 397364e2b3..de1c741fb1 100644 --- a/patterns/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp +++ b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp @@ -1,5 +1,5 @@ <% Integer counter = (Integer) request.getAttribute("counter"); %> <% if (counter != null && counter > 0) { %>
-

You are visitor #<%= counter %>. Logout

+

You are visitor #<%= counter %>. Logout

<% } %> diff --git a/patterns/pom.xml b/patterns/pom.xml index 1b7340304b..6797891353 100644 --- a/patterns/pom.xml +++ b/patterns/pom.xml @@ -4,60 +4,55 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 + com.baeldung.patterns + patterns-parent + pom + + front-controller + intercepting-filter + + com.baeldung parent-modules 1.0.0-SNAPSHOT + .. - com.baeldung.patterns - patterns - war - - - - javax.servlet - javax.servlet-api - 3.1.0 - provided - - - org.slf4j - slf4j-api - 1.7.21 - provided - - + + + + javax.servlet + javax.servlet-api + 3.1.0 + provided + + + - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - 1.8 - 1.8 - - - - org.apache.maven.plugins - maven-war-plugin - 3.0.0 - - false - - - - org.eclipse.jetty - jetty-maven-plugin - 9.3.11.v20160721 - - - / - - - - + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-war-plugin + 3.0.0 + + + org.eclipse.jetty + jetty-maven-plugin + 9.3.12.v20160915 + + + diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/OnIntercept.java b/patterns/src/main/java/com/baeldung/patterns/filters/OnIntercept.java deleted file mode 100644 index 73be3509f0..0000000000 --- a/patterns/src/main/java/com/baeldung/patterns/filters/OnIntercept.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.baeldung.patterns.filters; - -public interface OnIntercept { - void intercept(); -}