Context
M - V - C
Layers: Servlet Engine
Layers: Enterprise System
M - V - C Navigation: Basic
M - V - C Navigation: Layered
Views
Separate Components.
Multiple Implementation Choices.
- Java Classes
- JavaServer Pages
- Struts
- XML/XSL/XSLT
Data Passed To Them, Not Generated.
Control
Multiple Strategies
Minimize Function
Desirable Function
- Maintain & Access Session State
- Determine User Action
- Extract, Map, & Verify User Data
- Call Appropriate Model Function
- Verify Model Action
- Update Session State, As Required
- Pass Model Results To Appropriate View
Model
Provide Semantic Processing, or Interface to Such
Perform Function or Pass to Semantic Process or Storage Component
Verify Results of Processing
Return Results
Views
Implement (Separate) Components, Using Appropriate Technology (e.g., Java POJO, JSP, etc.).
Called from Control.
In Servlet Context, Provide any Necessary HTTP Header Parameters.
Render Results (e.g., Generate HTML for Form, Report, or Display).
Example, Using Java Class:
public class ViewError { public static void display( HttpServletResponse resp, String message ) throws IOException { resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<META http-equiv='Content-Style-Type' content='text/css'>"); out.println("<LINK href='/jbs/theme/Master.css' rel='stylesheet' type='text/css'>"); out.println("<title>abbasic error</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>"); out.println( message ); out.println("</h1>"); out.println("<a href='/jbs/servlet/jbs.abbasic.control.ABBasic'><b>Return to Welcome</b></a>"); out.println("</body>"); out.println("</html>"); } }Control
Minimal Function
Implement as Java Servlet
Determine User Action (e.g., getParameter("userAction"); )
Implement as Case Statement or sequence of if - else if - else Statements
Map User Data to DataBean & Verify
- Mapper Methods
- Extract Individual Parameters, by Name
- Insert Parameters into DataBean
- Call DataBean's verify Methods
Perform Function for Each User Action by Preparing DataBean for Model and Processing Results from Model, most Likely a Bean or a boolean
Update Session State (e.g., Using HTTPSession & get/set Attribute)
Pass Data to Appropriate View
Example:
public class ControlAdmin extends HttpServlet { /** * @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ViewWelcome.display( resp, "Please register or login." ); } /** * @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // get session state HttpSession session = req.getSession( true ); // determine user action String userAction = req.getParameter("userAction"); if ( userAction.equalsIgnoreCase( "Register New User" ) ) { // brings up form register ViewRegister.display( resp, new BeanUser() ); } else if( userAction.equalsIgnoreCase("Register") ) { // processes form register boolean resultOK = false; // map user form data to bean BeanUser beanUser = mapFormToBeanUser( req ); // verify user form data, using bean if ( ! (beanUser.verifyUser()) ) { // fails beanUser.setMessage("Error registering: fields incomeplete or non-matching."); ViewRegister.display( resp, beanUser ); } else { // ok // call model method, pass bean BeanUser newBean = ModelAdmin.addUser( beanUser ); // tests results from model if (newBean == null ) { // error beanUser.setMessage("Error registering."); ViewRegister.display( resp, beanUser ); } else { // ok // update session state session.setAttribute( "beanUser", newBean ); // pass data to next view ViewCreateLogin.display( resp, new BeanLogin() ); } } } else ViewError.display( resp, "AB1 system error: No user action recognized." ); } }Model
Implement as Java Class (POJO).
API is Important
Use DataBeans as Arguments and Return Types
Support Connections to DBMS, if Needed
Construct DBMS Statements, if Needed
Verify Results of Processing
Prepare Results as DataBeans or Appropriate Form