Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porSurya Darmali Modificado hace 6 años
1
Aplicacions web bàsiques Introducció a servlets i JSP
Fabien Girardin Enginyeria del Software II – UPF 2007
2
Permeten escriure pàgines web dinàmiques amb Java
Què són servlets i JSP? Permeten escriure pàgines web dinàmiques amb Java Servlets: des d’una classe que extén HttpServlet JSP: directament insertant codi java en una pàgina HTML S’executen en un motor de servlets (servlet-engine), també anomenat contenidor web (web-container)
3
Arquitectura d’un servidor web
Exemple: Apache web server amb CGI --- ----- ---- 1) Petició HTTP Sistema de fitxers Apache Web Server --- ----- ---- --- ----- ---- 5) Resposta 2) Crea un nou procés 4) Retorna un string (HTML) amb la resposta CGI 3) Accedeix a la BD BD
4
Servlets Un servlet és una classe Java que implementa la interface Servlet, o bé extén les classes abstractes GenericServlet o HttpServlet (el més habitual) que ja implementen aquesta interface GenericServlet i HttpServlet: Tenen un mètode service per a manegar peticions HTTP HttpServlet permet distingir si les peticions són de tipus Get (mètode doGet) o Post (mètode doPost) Els paràmentres d’aquests mètodes (en el cas de HttpServlet) són: HttpServletRequest (ServletRequest per GenericServlet): conté els arguments que es passen mitjançant formularis. També, si n’hi ha, paràmetres de sessió HttpServletResponse (ServletResponse per GenericServlet): l’utilitzarem per escriure la resposta que el servlet retorna (li hem de dir el content-type) Tenen mètodes per manegar el cicle de de vida del servlet: init i destroy
5
Exemple de servlet simple
public class HolaServlet extends HttpServlet { /** * gestiona les peticions GET */ public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException // cal posar el content type abans d’escriure la pàgina response.setContentType("text/html"); // i ara ja podem escriure al PrintWriter PrintWriter out = response.getWriter(); out.println("<HTML><HEAD><TITLE>"); out.println(“Exemple de servlet simple”); out.println("</TITLE></HEAD><BODY>"); out.println(“<H1>Hola, soc un servlet</H1>"); out.println("</BODY></HTML>"); out.close(); }
6
Un exemple de JSP Tot el que hi hagi entre <% i %> és codi
<HTML> <BODY> <H1> <% out.println(“Hola, sóc un JSP"); %> </H1> </BODY> </HTML> Tot el que hi hagi entre <% i %> és codi Hi ha objectes built-in (ja existents sense haver de declarar-los). Entre d’altres: out request response Compilació de JSPs: es fa la primera vegada que s’executa (per evitar haver d’interpretar-ho cada execució)
7
Un exemple de JSP amb declaració de mètodes
Amb <%! ... %> també podem declarar mètodes i variables “de classe” que podran ser accedides des de qualsevol punt del JSP <HTML> <BODY> <%! public String diguesHola() { return “Hola, soc un JSP"; } %> <B><% =diguesHola() %></B> </BODY> </HTML>
8
Un exemple de JSP amb variables “de classe”
Les variables declarades amb <%! ... %> poden accedir als mètodes declarats Són compartides per totes les execucions del JSP: <html> <body bgcolor="#ffffff"> Valor: <% valor = valor+1; out.println(valor); %> </body> </html> <%! int valor; public void jspInit() { valor = 0; } El mètode jspInit es crida només la primera vegada que s’executa el JSP
9
Passant dades entre peticions
HTTP no treballa amb connexions permanents (no orientat a sessió) Com passem dades d’un servlet (o JSP) a un altre? Un servlet pot manegar paràmetres de formulari o URL amb un objecte HttpServletRequest (objecte built-in request en els JSP), que té el mètode: getParameter(“nom_parametre") Exemple: HttpServletRequest request; String nom = (String)request.getParameter(“nomUsuari”); Camps ocults: problemes de seguretat
10
Passant dades entre peticions: sessions
Es pot crear un objecte de sessió Funciona com a una cookie (que normalment no es guarda en disc) que conté un identificador de la sessió L’objecte de sessió es crea amb HttpSession session = request.getSession(); El motor de servlets és qui guarda els paràmetres que cal mantenir al llarg de la sessió, per exemple el “login”. Utilitza els mètodes de HttpSession: void setAttribute(String name, Object value); Exemple: session.setAttribute(“login”,”toni”); Object getAttribute(String name); Exemple: String s = (String)session.getAttribute(“login”); void removeAttribute(String name, Object value); El motor de servlets inspecciona els seus objectes de sessió i esborra els que no s’han usat des d’un cert temps (configurable)
11
Accedint als objectes de sessió
Els JSPs tenen l’objecte built-in session Els servlets el poden obtenir des del request: HttpSession session = request.getSession();
12
Quan els atributs són objectes
class Usuari implements Serializable { String login; String nom; public String getLogin() { return this.login; } public void setLogin(String login) this.login = login; public String getNom() return this.nom; public void setNom(String nom) this. nom = nom; S’utilitzen JavaBeans per definir les classes: La classe és serialitzable Declara (com a public) tots els get i set dels attributs
13
Quan els atributs són objectes
S’utilitzen els objectes de sessió de la mateixa forma. Per exemple: Usuari usuari = (Usuari)session.getAttribute(“user”); <%= usuari.getLogin() %> <%= usuari.getNom() %> En JSP es poden utilitzar les etiquetes <jsp:useBean>, <jsp:getProperty> i <jsp:setProperty>. L’exemple anterior també es pot escriure així: <jsp:useBean id=“user” class=“Usuari” scope=“session” /> <jsp:getProperty name=“usuari” property=“login” /> <jsp:getProperty name=“usuari” property=“nom” />
14
Forçar crear una sessió nova
Si no es diu el contrari, s’utilitza la sessió ja creada Per fer-ne una de nova: HttpSession antigaSessio = request.getSession(false); // false indica que recuperi la sessió si n’hi havia // però que no en crei una nova sessió si no n’existia cap if (antigaSessio != null) antigaSessio.invalidate(); HttpSession session = request.getSession(true);
15
Guardant dades a nivell d’aplicació
A vegades volem mantenir dades/objectes que siguin compartits per totes les classes, servlets o JSP d’una aplicació web (per exemple: l’adreça de la base de dades) Es pot utilitzar un objecte d’aplicació Mentre que l’objecte de sessió és diferent per a cada execució (cada usuari), el d’aplicació és comú a totes
16
Amb JSP, objecte built-in application
Objectes d’aplicació Amb JSP, objecte built-in application Els mateixos mètodes que session: setAttribute, getAttribute, removeAttribute Amb servlets, és en realitat un objecte que implemente la interfície ServletContext i s’obté: ServletContext context = getServletContext(); context.setAttribute(“bd_url”,”
17
Integrant JDBC i JSP/Servlets
Dins del servlet (doGet o doPost) o del JSP (entre <% i %>) es poden incloure crides JDBC per recuperar dades de la BD i a partir dels resultats generar la pàgina de resultats En un JSP s’utilitza la directiva page (que hem vist abans per declarar el content-type) també per importar llibreries. Exemple: page import=“java.sql.*”> page import=“java.util.*”> O page import=“java.sql.*, java.util.*”> Les classes del driver JDBC han d’estar en el classpath del motor de servlets (no en el client)
18
Integrant JDBC i JSP/Servlet. Exemple
page import="java.sql.*" %> <html> <body> <h1>Llista d'alumnes</h1> <% Class.forName("com.mysql.jdbc.Driver").newInstance(); String url = "jdbc:mysql://localhost/test"; Connection con = DriverManager.getConnection(url, "", ""); //definim la connexió Statement stmt = con.createStatement(); // creem un statement sobre la connxió String mysql = "SELECT codi,nom from alumnes"; ResultSet rs = stmt.executeQuery(mysql); //executem la consulta while (rs.next()) // recorrem el recordset, fila a fila i anem afegint les "persones" al vector { int codi = rs.getInt("codi"); String nom = rs.getString("nom"); %> Codi: <B><% out.print(codi); %></B>; Nom: <B><% out.print(nom);%></B><BR> } rs.close(); // tanquem el recordset stmt.close(); // tanquem el statement con.close(); // tanquem el recordset </body> </html>
19
Més… Servlets JSP Jo! Desp 371,
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.