A WEB programozása - JSP4 dr. Gál Tibor
2010. őszi félév
MVC architektúra a Java kiszolgálón
JavaServer Pages (JSP) (folytatás)
Ügyfél üzenet küldése a vezérlőnek
a ás bít áb ek v to őn em l enít r el Ké egje am
1
3
Megjelenítő adatot olvas a modellből
4
2
(szervlet)
Model
Adatok megváltoztatása (JavaBean, EJB, stb.) a modellben
EIS
Állapotdiagramm Böngésző
Könyvválaszték megjelenítése Megvásárolandó könyv(ek) kiválaszthatósága A kiválasztott könyvek összárának megjelenítése Kiválasztott könyv(ek) lemondása Kiválasztott könyvek megvásárlása
Vezérlő
modell létrehozása Adatbázis
befejezes_view
adatok_view
torles_model
torles_view
kosarba_model
kosarba_view
start_model
start_view
http://localhost:8080/konyvesbolt
befejezes_model
Megvalósítandó funkciók
(JSP)
View elküldi az oldal az ügyfélez
Controller
Példa: online könyvvásárlás
View
5
Ügyfél (Böngésző)
1
A WEB programozása - JSP4 dr. Gál Tibor
2010. őszi félév
A vezérlő (ControllerServlet.java) package gal; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; public class ControllerServlet extends HttpServlet { public void init() throws ServletException { // Adatmodell létrehozása, a könyvlista beolvasása
String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; String url = "jdbc:odbc:Konyvesbolt"; String query = "SELECT * FROM krimi ORDER BY id"; try { Class.forName(driver); Connection con = DriverManager.getConnection(url,"",""); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(query); createDataModel(rs); rs.close(); stmt.close(); con.close();} catch (Exception ex) {} }
// A könyvlista beírása az application objektumba konyvek attributum névvel
private void createDataModel(ResultSet rs) throws SQLException { String[][] konyvek = new String[100][3]; int n = 0; while ( rs.next() ) { konyvek[n][0] = rs.getString(2); konyvek[n][1] = rs.getString(3); konyvek[n][2] = rs.getString(4); n++; } ServletContext sc = getServletContext(); sc.setAttribute("konyvek",konyvek); sc.setAttribute("n",""+n); }
// Minden egyes kérelem felléptekor végrehajtott metódus
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // Objektumok az include és forward számára
ServletContext sc = getServletContext(); RequestDispatcher rd_model; RequestDispatcher rd_view; // A munkafolyamat elindítása
req.getSession(true); // A kérelem típusát meghatározó paraméter beolvasása
String action = req.getParameter("action"); // A kérelem típusa start, az ennek megfelelő model és view végrehajtása
if(action.equals("start")) { rd_model = sc.getRequestDispatcher("/start_model.jsp"); rd_model.include(req,resp); rd_view = sc.getRequestDispatcher("/start_view.jsp"); rd_view.forward(req,resp); }
// A kérelem típusa kosarba, az ennek megfelelő model és view végrehajtása if(action.equals("kosarba")) { rd_model = sc.getRequestDispatcher("/kosarba_model.jsp"); rd_model.include(req,resp); rd_view = sc.getRequestDispatcher("/kosarba_view.jsp"); rd_view.forward(req,resp); } // A kérelem típusa torles, az ennek megfelelő model és view végrehajtása if(action.equals("torles")) { rd_model = sc.getRequestDispatcher("/torles_model.jsp"); rd_model.include(req,resp); rd_view = sc.getRequestDispatcher("/torles_view.jsp"); rd_view.forward(req,resp); }
2
A WEB programozása - JSP4 dr. Gál Tibor // A kérelem típusa adatok, az ennek megfelelő view végrehajtása if(action.equals("adatok")) { rd_view = sc.getRequestDispatcher("/adatok_view.jsp"); rd_view.forward(req,resp); } // A kérelem típusa befejezes, az ennek megfelelő model és view végrehajtása if(action.equals("befejezes")) { rd_model = sc.getRequestDispatcher("/befejezes_model.jsp"); rd_model.include(req,resp); rd_view = sc.getRequestDispatcher("/befejezes_view.jsp"); rd_view.forward(req,resp); } }
2010. őszi félév
Könyvlista átadása egy szkript tömbnek, s a könyvlistást és egy könyvlistasort megjelenítő metódusok (Keszlet.jsp) Több JSP oldal használja ezeket az include direktívával // Könyvlista beírása kétdimenziós tömbbe <% String[][] konyvek = (String[][])application.getAttribute("konyvek"); int n = Integer.parseInt((String)application.getAttribute("n")); %>
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req,resp); } }
// A könyvlistát megjelenítő metódus
// Egy könyvlistasort megjelenítő metódus
<%! String konyvekDisplay(String[][] konyvek,int n){ String s = ""; for(int i=0; i
"; } return s; }
String sorDisplay(int i, String[][] konyvek){ String s = ""; s += "
"; return s; } %>
3
A WEB programozása - JSP4 dr. Gál Tibor
2010. őszi félév
A start megjelenítés (start_view.jsp) <%@ page import="java.util.*" %> <%@ page session="true" %> // A készlet és a készlet alapján a táblázatot generáló // metódusok beillesztése a JSP oldalba <%@ include file="Keszlet.jsp" %> <%@ page contentType="text/html; charset=iso-8859-2" %> // A táblázat statikus fejlécének elállítása Könyvlista
A start modell (start_model.jsp) <%@ page import="java.util.*" %> // A munkafolyamat elindítása <%@ page session="true" %> // A vásárlói kosarat implementáló kosar nevű, Vektor // típusúobjekum létrehozása session hatáskörben <% Vector v = new Vector(); session.setAttribute("kosar",v); %>
// A tábálzat görgethető részének generálása // a könyvkészlet alapján <%=konyvekDisplay(konynvek,n)%>
A kosárba megjelenítés (kosarba_view.jsp) <%@ page import="java.util.*" %> <%@ page session="true" %> // A készlet és a készlet alapján a táblázatot generáló // metódusok beillesztése a JSP oldalba <%@ include file="Keszlet.jsp" %> <%@ page contentType="text/html; charset=iso-8859-2" %> // A táblázat statikus fejlécének elállítása Könyvlista
<%=konyvekDisplay(konyvek,n)%>
4
A WEB programozása - JSP4 dr. Gál Tibor // A kosárban lévő könyvek megjelenítése egy görgethető // táblázatban Könyvek a kosárban
// A táblázat fix fejléce Szerző | Cím | Ár[Ft] | Kiveszi? |
// A táblázat görgethető része // A kosár tartalmának generálása a kosar Vector // tartalma alapján <% // A kosár kiolvasása a session objektumból Vector v = (Vector)session.getAttribute("kosar"); // Ha nem üres, akkor a tartalom generálása if(v !=null && (v.size()>0)){
A kosárba modell (kosarba_model.jsp) <%@ page import="java.util.*" %> // A munkafolyamat fenntartása <%@ page session="true" %> <% // A törlendő könyv beolvasása a kérelemből String s = request.getParameter("konyvSected"); // A kosár jelenlegi tartalmának betöltése Vector v = (Vector)session.getAttribute("kosar"); // Az új könyv hozzáadása a kosár tartalmához v.addElement(s); // A kosár tárolása session hatáskörben session.setAttribute("kosar",v); %>
2010. őszi félév
if(v !=null && (v.size()>0)){ int sum = 0; for(int i=0; i
<%}%>
A törlés megjelenítés (torles_view.jsp) megegyezik a kosárba megjelenítéssel
A törlés modell (torles_model.jsp) <%@ page import="java.util.*" %> // A munkafolyamat fenntartása <%@ page session="true" %> <% // A törlendő könyv beolvasása a kérelemből String konyv = request.getParameter("konyv"); // A törlendő könyv indexének előállítása int i = Integer.parseInt(konyv); // A kosár jelenlegi tartalmának betöltése Vector v = (Vector)session.getAttribute("kosar"); // Az új könyv hozzáadása a kosár tartalához v.removeElement(""+i); // A kosár tárolása session hatáskörben session.setAttribute("kosar",v); %>
5
A WEB programozása - JSP4 dr. Gál Tibor
2010. őszi félév
Az adatok megjelenítés (adatok_view.jsp) Megegyezik a start megjenítéssel, azt azonban a megrendelő adatait bekérő, alábbi űrlappal egészíti ki ... A fenti megrendelés megerősítése - adataim
Adatok modell-re nem volt szükség
A befejezés modell (befejezes_model.jsp) A kosárban lévő könyvek és a megrendelő adatainak beírása egy adatbázisba
<%@ page contentType="text/html; charset=iso-8859-2" %> Megrendelését postázzuk, ha kívánja, ide kattintva újabb megrendelést készíthet!
<%@ page import="java.util.*" %> <%@ page session="true" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %> <% // A könyvek azonosítóinak beírása egy stringe, vesszővel elválasztva // az egyes tételeket Vector v = (Vector)session.getAttribute("kosar"); String s = ""; for(int i=0; i
6
A WEB programozása - JSP4 dr. Gál Tibor
2010. őszi félév
// Kapcsolódás az adabázisra <sql:setDataSource driver="sun.jdbc.odbc.JdbcOdbcDriver" url="jdbc:odbc:Konyvesbolt" user="" password="" /> // A felhasználó adatait és a megrendelt könyveket // tartalmazó string beírása az adatbázis egy rekordjába <sql:update> INSERT INTO megrendelesek(csaladnev,keresztnev,cim,konyvek) VALUES('${param.csaladnev}','${param.keresztnev}', '${param.cim}','${sessionScope.s}') <% v.removeAllElements(); session.setAttribute("kosar",v); %>
7