Templatek el!nyei Létrehozás, karbantartás nem programozó oldaltervez!k által minél fejletebb megoldás annál inkább programozási tevékenység Tartalom és megjelenítés szétválasztása MVC tervezési minta template mint interfész
JSP technológia Üzleti logika és megjelenítés szétválasztása megjelenítés: XML, HTML üzleti logika: Java Beans, taglib-ek Kiterjeszthet!ség Servlet technológia Kliens
A JSP el!nyei vs. ASP J2EE vs. PHP Java API vs. Servletek módosíthatóság separation of concerns script és tag alapú dinamikus tartalom szerver oldali fordítás -> hatékony specifikáció hordozhatóság többféle implementáció
Példa
JSP vs. servletek servlet
tisztán servlet public class OrderServlet.......{ public void doGet(.....) { if(isOrderValid(req)){ saveOrder(req); out.println(""); out.println(""); ..... } private void isOrderValid(....) { .... } private void saveOrder(....) { .... } }
kérés feldolgozás
public class OrderServlet.......{ public void doGet(.....) { if(bean.isOrderValid(req)){ bean.saveOrder(....); ..... forward("conf.jsp"); } } JSP
megjelenítés
..... üzleti logika JavaBeans isOrderValid() saveOrder()
<%! private int hits = 0; %> You are visitor number <% synchronized(this) { out.println(++hits); } %> since the last time the service was restarted.
This page was last updated: <%= new java.util.Date().toLocaleString() %> ... response.setContentType("text/html;charset=ISO-8859-1"); pageContext = _jspxFactory.getPageContext(this, request, response,"", true, 8192, true); application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); // begin [file="/HelloWorld2.jsp";from=(0,2);to=(0,41)] response.addDateHeader("Expires", 0); // end // HTML // begin [file="/HelloWorld2.jsp";from=(0,43);to=(3,0)] out.write("\r\n
JSP\r\n
Hello World!
\r\n"); // end // HTML // begin [file="/HelloWorld2.jsp";from=(3,28);to=(4,23)] out.write("\r\nYou are visitor number "); // end // begin [file="/HelloWorld2.jsp";from=(4,25);to=(4,70)] synchronized(this) { out.println(++hits); } // end // HTML // begin [file="/HelloWorld2.jsp";from=(4,72);to=(7,28)] out.write("\r\nsince the last time the server was restarted.\r\n
Script vs. Bean <% ShoppingCart cart = (ShoppingCart)session. getAttribute("cart"); // If the user has no cart, create a new one if (cart == null) { cart = new ShoppingCart(); session.setAttribute("cart", cart); } %>
JavaBean /** Simple bean to illustrate sharing beans through * use of the scope attribute of jsp:useBean. */ public class AccessCountBean { private String firstPage; private int accessCount = 1; public String getFirstPage() { " return(firstPage); } public void setFirstPage(String firstPage) { " this.firstPage = firstPage; } public int getAccessCount() { " return(accessCount++); } }
Vissza
Bean scope <TITLE>Shared Access Counts: Page 1
Shared Access Counts: Page 1
<jsp:useBean id="counter" class="coreservlets.AccessCountBean" scope="application"> " <jsp:setProperty name="counter" property="firstPage" value="SharedCounts1.jsp" /> Of SharedCounts1.jsp (this page), SharedCounts2.jsp, and SharedCounts3.jsp, <jsp:getProperty name="counter" property="firstPage" /> was the first page accessed.
Collectively, the three pages have been accessed <jsp:getProperty name="counter" property="accessCount" /> times.