There is simple custom implementations of design patterns for web applications using servlets, that have been mentioned on StackOverflow.
Folder structure
actions
----ActionFactory.java
----Action.java
----impl
--------HomePageActionImpl.java
--------CreateProductGetActionImpl.java
--------CreateProductPostActionImpl.java
----actionresults
--------ActionResult.java
--------impl
------------ForwardResult.java
------------RedirectResult.java
controller
----Controller.java
ActionFactory.java
CreateProductGetActionImpl.java
CreateProductPostActionImpl.java
ActionResult.java
ForwardResult.java
RedirectResult.java
Controller.java
Folder structure
actions
----ActionFactory.java
----Action.java
----impl
--------HomePageActionImpl.java
--------CreateProductGetActionImpl.java
--------CreateProductPostActionImpl.java
----actionresults
--------ActionResult.java
--------impl
------------ForwardResult.java
------------RedirectResult.java
controller
----Controller.java
ActionFactory.java
public class ActionFactory { public static Map actions = new HashMap<String, Action>( new HashMap<String, Action>() { { put("GET/", new HomePageActionImpl()); put("GET/createproduct", new CreateProductGetActionImpl()); put("POST/createproduct", new CreateProductPostActionImpl()); } }); public static Action getAction(HttpServletRequest request) { if (actions.containsKey(request.getMethod() + request.getRequestURI())) { return actions.get(request.getMethod() + request.getRequestURI()); } else { return actions.get("GET/error"); } } }Action.java
public interface Action { ActionResult execute(HttpServletRequest request, HttpServletResponse response) throws Exception; }HomePageActionImpl.java
public class HomePageActionImpl implements Action { public HomePageActionImpl(){} @Override public ActionResult execute(HttpServletRequest request, HttpServletResponse response) throws Exception { //... return new ForwardResult(""); } }
CreateProductGetActionImpl.java
public class CreateProductGetActionImpl implements Action { @Override public ActionResult execute(HttpServletRequest request, HttpServletResponse response) throws Exception { // ... return new ForwardResult("createproduct"); } }
CreateProductPostActionImpl.java
public class CreateProductPostActionImpl implements Action { @Override public ActionResult execute(HttpServletRequest request, HttpServletResponse response) throws Exception { try { // ... } catch (ValidationException e) { request.setAttribute("message", e.getMessage()); return new ForwardResult("createproduct"); } return new RedirectResult(""); } }
ActionResult.java
public interface ActionResult { void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; }
ForwardResult.java
public class ForwardResult implements ActionResult { protected final String jsp; public ForwardResult(String jsp) { this.jsp = jsp; } @Override public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (jsp == "") { request.getRequestDispatcher("/WEB-INF/home.jsp").forward(request, response); } else { request.getRequestDispatcher("/WEB-INF/" + jsp + ".jsp").forward(request, response); } } }
RedirectResult.java
public class RedirectResult extends ForwardResult { public RedirectResult(String location) { super(location); } @Override public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.sendRedirect(jsp); } }
Controller.java
public class Controller extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { Action action = ActionFactory.getAction(request); ActionResult result = action.execute(request, response); result.execute(request, response); } catch (Exception e) { throw new ServletException("Executing action failed.", e); } } }
No comments:
Post a Comment