550 likes | 689 Views
Modernās Programmēšanas Tehnoloģijas (Advanced Programming Technologies ). Edgars Celms, Mārtiņš Opmanis (askola@mii.lu.lv). Latvijas Universitātes Matemātikas un informātikas institūts 200 7, Rīga, Latvija. Serversīklietotņu ( servlets ) programmēšana.
E N D
Modernās Programmēšanas Tehnoloģijas(Advanced Programming Technologies) Edgars Celms, Mārtiņš Opmanis (askola@mii.lu.lv) Latvijas Universitātes Matemātikas un informātikas institūts 2007,Rīga, Latvija
Serversīklietotņu (servlets) programmēšana • “Java™ How to Program, Sixth Edition” • Chapter 26. Servlets • Servleti un to arhitektūra • Servlet interfeiss un Servletu dzīves cikls • Klase HttpServlet • HttpServletRequest un HttpServletResponse interfeisi • Apache Tomcat serveris • HTTP ...Requests apstrādāšana • Vairāklīmeņu (multitier) lietojumprogrammas • JDBC lietojums servletos
Ievads • Tīklošanās iespējas valodā JAVA • Socket-basedunpacket-basedkomunikācija • Package java.net • Remote Method Invocation (RMI) • Package java.rmi • The RMI packages allow Java objects running on separate JVMs (normally on separate computers) to communicate via remote method calls. Such calls appear to invoke methods on an object in the same program, but actually have built-in networking (based on the capabilities of package java.net) that communicates the method calls to another object on a separate computer. • Common Object Request Broker Architecture (CORBA) • Package org.omg • A key difference between RMI and CORBA is that RMI can only be used between Java objects, whereas CORBA can be used between any two applications that understand CORBAincluding applications written in other programming languages. • Remote Method Invocation over the Internet Inter-Orb Protocol (RMI-IIOP) • RMI-IIOP enables the integration of Java with non-Java distributed objects by using CORBA IIOP
Ievads • Klienta-servera attiecība • Servlets(serversīklietotnes) unJavaServer Pages (JSP) • Pieprasījuma-atbildes modelis (request-response model) • Pakotnesjavax.servlet javax.servlet.http javax.servlet.jsp javax.servlet.tagext • Populārākā pieprasījuma-atbildes modeļa implementācija • tīmekļa pārlūkprogrammas (web browsers) un tīmekļa serveri (web servers) • Ir par pamatu J2EEWeb komponentēm • Servleti un “tievais” klients (thin client) • Nodrošina prezentācijas līmeni • Neapstrādā datus • Nepieciešami mazāki datora resursi • Apache Jakarta projekti un Tomcat Server • Tomcat • Jakarta projekts • Oficiālo servletu un JSP standartu implementācija
Servleti un to arhitektūra • Servleti • Servlets ir Javas programma, kura atrodas un izpildās serverī un sūta informāciju klientam • Piemēram, tīmekļa serveris sūta HTML pārlūkprogrammai • HTML var nākt no reāla faila uz servera vai arī to var sūtīt (izveidot) programma, piemēram, Javas servlets. • JavaServer Pages (JSP) • Servletu tehnoloģijas paplašinājums • Vienkāršo lapu izveidošanas procesu atdalot prezentācijas daļu no satura daļas • Parasti JSP izmanto, ja informācija ko sūta klientam pārsvarā ir statiskas daba un tikai neliela daļa no šī sūtījuma tiek ģenerēta dinamiski izmantojot Javas kodu • Servletukonteineris (servlet container (engine)) • Serveris kurš spēj izpildīt servletus • Tīmekļa serveri un aplikāciju serveri, kuri var darboties kā konteineri servletiem • Sun Java System Application Server, Microsoft’s Internet Information Server (IIS), Apache HTTP Server, BEA’s WebLogic Application Server, IBM’s WebSphere Application Server, World Wide Web Consortium’s Jigsaw Web Server, …
Servlet interfeiss un servletu dzīves cikls • Servletinterfeiss • Visiem servletiem ir jāimplementē šāds interfeiss • Servletinterfeisa metodes izsauc servlet konteineris • Pakotnes kuras tiek izmantotas darbam ar servletiem • Pakotnē javax.servlet – definēta klase GenericServlet, kura ir protokolu neatkarīga (protocol-independent). • Pakotnē javax.servlet.http – definēta klase HttpServlet, kura izmanto HTTP protokolu • Servleta dzīves cikls • Servletakonteineris izsauc servleta initmetodi • Servletaservicemetode apstrādā pieprsījumu • Servletadestroymetode atbrīvo servletaresursus, ja konteineris beidz (terminates)servletu
Servlet interfeiss un servletu dzīves cikls • Servletinterfeisa implementācija • GenericServlet • Abstrakta klase • Pakotnejavax.servlet • Protokola neatkarīgs servlets • HttpServlet • Abstrakta klase • Pakotnejavax.servlet.http • Lai apmainītos ar informāciju izmanto HTTP protokolu • Parasti izmanto, lai paplašinātu tīmekļa servera funkcionalitāti
Klase HttpServlet • Klase HttpServlet pārimplementē (overrides)service metodi • Nevajadzētu pārimplementēt servicemetodi klasesHttpServletapakšklasēs. Radīs problēmas servletam atšķirt pieprasījuma tipus. • Divi biežāk lietotie HTTP pieprasījuma veidi • getpieprasījums • Get/retrieveinformāciju no servera • postpieprasījums • Post/senddatus uz servei • MetodedoGetreaģē uz getpieprasījumu • MetodedoPostreaģē uz postpieprasījumu • MetodesdoGetun doPostkā parametrus saņem HttpServletRequestunHttpServletResponseobjektus
HttpServletRequestinterfeiss • Servletakonteineris • izveidoHttpServletRequestobjektu • nodod to kā parametru servletaservicemetodei • HttpServletRequestobjekts • satur klienta pieprasījumu • nodrošina metodes lai servlets varētu apstrādāt šādu pieprasījumu
HttpServletResponse interfeiss • Servletakonteineris • izveidoHttpServletResponseobjektu • nodod to kā parametru servleta service metodei • HttpServletResponseobjekts • nodrošina metodes lai servlets varētu noformēt atbildi klientam
Apache Tomcat serveris • Kā strādāt un instalēt Tomcat serveri šajā kursā sīkāk neapskatīsim. • Informācija tīklā par Tomcat • http://www.apache.org/ • http://tomcat.apache.org/
HTTP getpieprasījumuapstrādāšana • HTTP getpieprasījums • Sagaida kā atbildi URL saturu • Piemērs, WelcomeServlet • Servlets kurš apstrādā HTTP getpieprasījumus
Import the classes and interfaces in the javax.servlet and javax.servlet.http packages Extends HttpServlet to handle HTTP get requests and HTTP post requests Override method doGet to provide custom get request processing Uses the response object’s setContentType method to specify the content type of the data to be sent as the response to the client Uses the response object’s getWriter method to obtain a reference to the PrintWriter object that enables the servlet to send content to the client Create the XHTML document by writing strings with the out object’s println method
Closes the output stream, flushes the output buffer and sends the information to the client
WelcomeServlet.html The form’s action attribute (/jhtp6/welcome1) specifies the URL path that invokes the servlet The form’s method attribute indicates that the browser sends a get request to the server, which results a call to the servlet’s doGet method Create a button, when clicked, the form’s action is performed
Web lietojumprogrammu izvietošana serverī • Tīmekļa lietojumprogrammas • JSP, servleti un ar tiem saistītie faili • Tīmekļa lietojumprogrammu izvietošana (deploying) • Folderu struktūra • Context root • Tīmekļa lietojumprogrammuarhīva fails (WAR file) • Izvietošanas deskriptors (deployment descriptor) • web.xml
Web lietojumprogrammu izvietošana serverī • Tīmekļa lietojumprogrammu standarta forlderi
Element web-app defines the configuration of each servlet in the Web application and the servlet mapping for each servlet. Element display-name specifies a name that can be displayed to the administrator of the server on which the Web application is installed. Element description specifies a description of the Web application that might be displayed to the administrator of the server. Element servlet describes a servlet. Element servlet-name is the name for the servlet. Element description specifies a description for this particular servlet. Element servlet-class specifies compiled servlet’s fully qualified class name.
Web lietojumprogrammu izvietošana serverī Element servlet-mapping specifies servlet-name and url-pattern elements. Element url-pattern helps the server determine which requests are sent to the servlet
Web lietojumprogrammu izvietošana serverī • Invoke WelcomeServlet example • /jhtp6/welcome1 • /jhtp6 specifies the context root • /welcome1 specifies the URL pattern • URL pattern formats • Exact match • /jhtp6/welcome1 • Path mappings • /jhtp6/example/* • Extension mappings • *.jsp • Default servlet • /
Tādu HTTP getpieprasījumuapstrādāšana, kuri satur datus • Pieprasījums serverim var saturēt arī datus. • Dati tiek uzdoti kā parametri. • Parametri ir vārds-vērtība pāris, kurš tiek norādīts aiz URL beigās aiz jautājuma zīmes • Piemēram:http://localhost?firstname=Jon • Ja ir vairāki parametri – jālieto &.
The request object’s getParameter method receives the parameter name and returns the corresponding String value
Uses the result of line 17 as part of the response to the client
form data specified in URL’s query string as part of a get request
Dažas piezīmes I (Software Engineering Observation) • If an error occurs during the servlet invocation, the log files in the logs directory of the Tomcat installation can help you determine the error and debug the problem. • A get request is limited to standard characters, which means that you cannot submit any special characters via a get request. The length of the URL in a get request is limited. For example, the maximum URL length in Internet Explorer is 2,083 characters. Some Web servers might restrict this even more. • A get request should not be used for sending sensitive data (e.g., a password) because the form data is placed in a query string that is appended to the request URL as plain text and can be intercepted.
HTTP postpieprasījuma apstrādāšana • HTTP postpieprasījums • Nosūta (post) datus no HTML formas uz server-sideformu apstrādātāju kurš šos datus apstrādā • Tīmekļa pārlūkprogrammas kešo (cache) apskatītās tīkla lapas • Atbildes uz post pieprasījumiem parasti netiek saglabātas • ServletsWelcomeServlet3 • Reaģē uz postpieprasījumu • Piemērs ir ļoti līdzīgs iepriekšējam (doGet() metodes vietā tiek izmantota metodedoPost()) • Tā tas ir jo izmantotajās klasēs tiek paslēpta atšķirība starp divu veidu pieprasījumiem
Declare a doPost method to responds to post requests The request object’s getParameter method receives the parameter name and returns the corresponding String value
Provide a form in which the user can input a name in the text input element firstname, then click the Submit button to invoke WelcomeServlet3
Pieprasījumu redirektēšana (redirecting requests) • Dažreiz pieprasījumus ir nepieciešams pārsūtīt tālāk uz citu vietu. Piemēram, citu serveri vai citu tīmekļa lapu. • To var realizēt lietojot HttpServletResponseobjectasendRedirectmetodi. • ServletsRedirectServlet • Pārsūta pieprasījumu uz citu resursu
Obtains the page parameter from the request. Determine if the value is either “deitel” or “welcome1” Redirects the request to www.deitel.com. Redirects the request to the servlet WelcomeServlet.
Provide links that allow the user to invoke the servlet RedirectServlet
Vairāklīmeņu (multitier) lietojumprogrammas • Programmatūra varētu sastāvēt no GUI interfeisa, pieprasījumu apsrādes loģikas un pastāvīgas datu glabātuves (datu bāzes) • Divu līmeņu arhitektūra (two-tier architecture) • GUI un programmas loģika ir vienā līmenī un datu bāze otrā • “Resnais” klients. DB Client Fat client
Vairāklīmeņu (multitier) lietojumprogrammas • Trīs līmeņu arhitektūra (three-tier architecture) • Ja “resno” klientu sadalām divās daļās, tad varam runāt par programmatūras trīs līmeņu arhitektūru. • “Tievais” klients • Pamatuzdevums ir datu reprezentācija un GUI • Satur ļoti nelielu apstrādes loģikas daļu • Aplikācijas loģikas daļa šādā arhitektūras modelī parasti ir implementēta servera pusē. DB Client Logic Thin client
Vairāklīmeņu (multitier) lietojumprogrammas • Trīs līmeņu arhitektūra (three-tier architecture) • Tīmekļa serveri parasti reprezentē vidējo līmeni • Trīs līmeņu arhitektūras piemērs • Tīmekļa lapa, kura sadarbojas ar servletu, kurš savukārt izmanto JDBC, lai nodrošinātu darbu ar datubāzi. • SurveyServlet • Survey.html • MySQL database
Import interfaces and classes for database manipulation Declare a Connection to manage the database connection Declare a Statement for updating the vote count, totaling all the votes and obtaining the complete survey result
Loads the database driver, which is specified in the initialization parameter “databaseDriver” Attempt to open a connection to the animalsurvey database, the database name, username and password are specified in the initialization parameters Create Statement to query database.
Create sql to update total for current survey response Execute sql statementto update total for current survey response Create query to get total of all survey responses Execute queryto get total of all survey responses Create query to get survey results Execute query to get survey results
Loop through all records in resultsRS Obtain the value of the first column from the current record Obtain the value of the second column from the current record