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.javapublic interface Action {
ActionResult execute(HttpServletRequest request, HttpServletResponse response) throws Exception;
}
HomePageActionImpl.javapublic 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