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() %>
-
<% } %>
<%@ 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.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();
-}