BAEL-305: Runnable demo application
This commit is contained in:
		
							parent
							
								
									442d9916fd
								
							
						
					
					
						commit
						9c5404ead8
					
				
							
								
								
									
										41
									
								
								enterprise-patterns/front-controller-pattern/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								enterprise-patterns/front-controller-pattern/pom.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" | ||||
|          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|     <modelVersion>4.0.0</modelVersion> | ||||
| 
 | ||||
|     <artifactId>front-controller-pattern</artifactId> | ||||
|     <packaging>war</packaging> | ||||
| 
 | ||||
|     <parent> | ||||
|         <artifactId>enterprise-patterns-parent</artifactId> | ||||
|         <groupId>com.baeldung.enterprise.patterns</groupId> | ||||
|         <version>1.0.0-SNAPSHOT</version> | ||||
|     </parent> | ||||
| 
 | ||||
|     <dependencies> | ||||
|         <dependency> | ||||
|             <groupId>javax.servlet</groupId> | ||||
|             <artifactId>servlet-api</artifactId> | ||||
|             <version>2.5</version> | ||||
|             <scope>provided</scope> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
| 
 | ||||
|     <build> | ||||
|         <plugins> | ||||
|             <plugin> | ||||
|                 <groupId>org.apache.maven.plugins</groupId> | ||||
|                 <artifactId>maven-compiler-plugin</artifactId> | ||||
|             </plugin> | ||||
|             <plugin> | ||||
|                 <groupId>org.apache.maven.plugins</groupId> | ||||
|                 <artifactId>maven-war-plugin</artifactId> | ||||
|                 <version>3.0.0</version> | ||||
|                 <configuration> | ||||
|                     <outputDirectory>${env.DEPLOYMENTS}</outputDirectory> | ||||
|                 </configuration> | ||||
|             </plugin> | ||||
|         </plugins> | ||||
|     </build> | ||||
| </project> | ||||
| @ -0,0 +1,45 @@ | ||||
| package com.baeldung.enterprise.patterns.front.controller; | ||||
| 
 | ||||
| import com.baeldung.enterprise.patterns.front.controller.commands.FrontCommand; | ||||
| import com.baeldung.enterprise.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 { | ||||
|             return (FrontCommand) getCommandClass(request) | ||||
|               .asSubclass(FrontCommand.class) | ||||
|               .newInstance(); | ||||
|         } catch (Exception e) { | ||||
|             throw new RuntimeException("Failed to get command!", e); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private Class getCommandClass(HttpServletRequest request) { | ||||
|         try { | ||||
|             return Class.forName( | ||||
|               String.format( | ||||
|                 "com.baeldung.enterprise.patterns.front.controller.commands.%sCommand", | ||||
|                 request.getParameter("command") | ||||
|               ) | ||||
|             ); | ||||
|         } catch (ClassNotFoundException e) { | ||||
|             return UnknownCommand.class; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,22 @@ | ||||
| package com.baeldung.enterprise.patterns.front.controller.commands; | ||||
| 
 | ||||
| import com.baeldung.enterprise.patterns.front.controller.data.Book; | ||||
| import com.baeldung.enterprise.patterns.front.controller.data.Bookshelf; | ||||
| 
 | ||||
| import javax.servlet.ServletException; | ||||
| import java.io.IOException; | ||||
| 
 | ||||
| public class BookCommand extends FrontCommand { | ||||
|     @Override | ||||
|     public void process() throws ServletException, IOException { | ||||
|         Book book = Bookshelf.getInstance() | ||||
|           .findByTitle(request.getParameter("title")); | ||||
|         if (book != null) { | ||||
|             request.setAttribute("book", book); | ||||
|             forward("book-found"); | ||||
|         } else { | ||||
|             request.setAttribute("books", Bookshelf.getInstance().getBooks()); | ||||
|             forward("book-notfound"); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,32 @@ | ||||
| package com.baeldung.enterprise.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); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,11 @@ | ||||
| package com.baeldung.enterprise.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"); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,40 @@ | ||||
| package com.baeldung.enterprise.patterns.front.controller.data; | ||||
| 
 | ||||
| public class Book { | ||||
|     private String author; | ||||
|     private String title; | ||||
|     private Double price; | ||||
| 
 | ||||
|     public Book() { | ||||
|     } | ||||
| 
 | ||||
|     public Book(String author, String title, Double price) { | ||||
|         this.author = author; | ||||
|         this.title = title; | ||||
|         this.price = price; | ||||
|     } | ||||
| 
 | ||||
|     public String getAuthor() { | ||||
|         return author; | ||||
|     } | ||||
| 
 | ||||
|     public void setAuthor(String author) { | ||||
|         this.author = author; | ||||
|     } | ||||
| 
 | ||||
|     public String getTitle() { | ||||
|         return title; | ||||
|     } | ||||
| 
 | ||||
|     public void setTitle(String title) { | ||||
|         this.title = title; | ||||
|     } | ||||
| 
 | ||||
|     public Double getPrice() { | ||||
|         return price; | ||||
|     } | ||||
| 
 | ||||
|     public void setPrice(Double price) { | ||||
|         this.price = price; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,32 @@ | ||||
| package com.baeldung.enterprise.patterns.front.controller.data; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| 
 | ||||
| public class Bookshelf { | ||||
|     private static Bookshelf INSTANCE = new Bookshelf(); | ||||
|     private List<Book> books = new ArrayList<>(); | ||||
| 
 | ||||
|     public static Bookshelf getInstance() { | ||||
|         if (INSTANCE.books.size() == 0) { | ||||
|             INSTANCE.init(); | ||||
|         } | ||||
|         return INSTANCE; | ||||
|     } | ||||
| 
 | ||||
|     private void init() { | ||||
|         books.add(new Book("Wilson, Robert Anton & Shea, Robert", "Illuminati", 9.99)); | ||||
|         books.add(new Book("Fowler, Martin", "Patterns of Enterprise Application Architecture", 27.88)); | ||||
|     } | ||||
| 
 | ||||
|     public Book findByTitle(String title) { | ||||
|         return books.stream() | ||||
|           .filter(book -> book.getTitle().equalsIgnoreCase(title)) | ||||
|           .findFirst() | ||||
|           .orElse(null); | ||||
|     } | ||||
| 
 | ||||
|     public List<Book> getBooks() { | ||||
|         return books; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,6 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 5.0//EN" | ||||
|         "http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd"> | ||||
| <jboss-web> | ||||
|     <context-root>/front-controller/</context-root> | ||||
| </jboss-web> | ||||
| @ -0,0 +1,4 @@ | ||||
| <p>Our Bookshelf contains this title:</p> | ||||
| <h2>${book.getTitle()}</h2> | ||||
| <p>Author: ${book.getAuthor()}</p> | ||||
| <input type="submit" value="Buy it: ${book.getPrice()}$"> | ||||
| @ -0,0 +1,2 @@ | ||||
| <p>Our Bookshelf doesn't contains this title:</p> | ||||
| <h2>${param.get("title")}</h2> | ||||
| @ -0,0 +1 @@ | ||||
| <p>Sorry, this command is not known!</p> | ||||
| @ -0,0 +1,11 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5"> | ||||
|     <servlet> | ||||
|         <servlet-name>front-controller</servlet-name> | ||||
|         <servlet-class>com.baeldung.enterprise.patterns.front.controller.FrontControllerServlet</servlet-class> | ||||
|     </servlet> | ||||
|     <servlet-mapping> | ||||
|         <servlet-name>front-controller</servlet-name> | ||||
|         <url-pattern>/</url-pattern> | ||||
|     </servlet-mapping> | ||||
| </web-app> | ||||
							
								
								
									
										35
									
								
								enterprise-patterns/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								enterprise-patterns/pom.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" | ||||
|          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|     <modelVersion>4.0.0</modelVersion> | ||||
| 
 | ||||
|     <groupId>com.baeldung.enterprise.patterns</groupId> | ||||
|     <artifactId>enterprise-patterns-parent</artifactId> | ||||
|     <packaging>pom</packaging> | ||||
|     <modules> | ||||
|         <module>front-controller-pattern</module> | ||||
|     </modules> | ||||
| 
 | ||||
|     <parent> | ||||
|         <groupId>com.baeldung</groupId> | ||||
|         <artifactId>parent-modules</artifactId> | ||||
|         <version>1.0.0-SNAPSHOT</version> | ||||
|     </parent> | ||||
| 
 | ||||
|     <build> | ||||
|         <pluginManagement> | ||||
|             <plugins> | ||||
|                 <plugin> | ||||
|                     <groupId>org.apache.maven.plugins</groupId> | ||||
|                     <artifactId>maven-compiler-plugin</artifactId> | ||||
|                     <version>3.5.1</version> | ||||
|                     <configuration> | ||||
|                         <source>1.8</source> | ||||
|                         <target>1.8</target> | ||||
|                     </configuration> | ||||
|                 </plugin> | ||||
|             </plugins> | ||||
|         </pluginManagement> | ||||
|     </build> | ||||
| </project> | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user