240 likes | 366 Vues
This seminar, led by Michał Kwiatek from IT-DES on November 1, 2005, covers the essentials of Java web applications, focusing on servlets and JSPs. Attendees will learn about the deployment process at CERN, the architecture of J2EE Public Service, and the importance of thread-safe servlets. The session will provide practical examples, including the use of JSP implicit variables and JDBC for database connectivity. By the end, participants will understand how to effectively utilize the Java web hosting services provided by CERN.
E N D
Java web hosting at CERN Computing Seminar, 1 November 2005 Michał Kwiatek, IT-DES
What we’ll be doing • A few words about servlets and JSPs • How to deploy them at CERN • Scope, SLA and architecture of J2EE Public Service • Some „advanced” examples Michał Kwiatek, IT-DES
What is a JSP? <%@ page contentType="text/html;charset=iso-8859-1" %> <html><header><title>Age example</title></header> <body><h1>Age example</h1> <% String yearString = request.getParameter("year"); int year; if (yearString==null || yearString.equals("")) { out.print("Please specify your year of birth using year parameter"); } else { try { year = new Integer(yearString).intValue(); %>You are <%=2005-year%> years old.<% } catch (NumberFormatException e) { %><font color="red">Year of birth incorrect!</font><% } } %> <%--static inclusion--%><%@ include file="footer.html" %> </body></html> Michał Kwiatek, IT-DES
JSP implicit variables • request • session • application • response • out Michał Kwiatek, IT-DES
What is a servlet? • A java class that lives inside web container to serve client requests • extends javax.servlet.http.HttpServlet • defining one or more of the following methods: • doGet • doPost • doPut • doDelete • service • init • destroy Note: the same servlet object will be used simultaneously to serve many request! Michał Kwiatek, IT-DES
Your servlets should be thread-safe! Javadoc: Date formats are not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally. package ch.cern.example; import ... public class ServletA extends HttpServlet { SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ); public void service (HttpServletRequest request, HttpServletResponse response) { response.write("Current date and time is: "); response.write(sdf.format(new Date())); } } Michał Kwiatek, IT-DES
JSP is a servlet! Declaration! <%@ page laguage="java"%> <html><body> <%! int count=0 %> Welcome, you are visitor number <%=++count%> </body></html> package ch.cern.example; import ... public class MyServlet extends HttpServlet { int count = 0; public void service (HttpServletRequest request, HttpServletResponse response) { response.write("<html><body>Welcome, you are visitor number"+(++count)+"</body></html>"); } } Michał Kwiatek, IT-DES
Did you make a nice jack’o lantern? Michał Kwiatek, IT-DES
There’s more to JSP than just the pages • Object-oriented programming • Java libriaries, java beans • Custom tag libraries • Model-View-Controler model • Java Server Faces • It is vendor and platform independent Michał Kwiatek, IT-DES
How to deploy them at CERN? • Go to CERN Web Service:http://webservices.web.cern.ch/WebServices/ • Choose „java web application (servlet/jsp)” as site type Michał Kwiatek, IT-DES
So what is this WAR file? • WAR file is simply a zip archive with a specific structure • jar files go to WEB-INF/lib • classes go to WEB-INF/classes • Application configuration files • The rest is regular web content • Use your IDE or Ant to package your application Michał Kwiatek, IT-DES
J2EE Public Service • server-side infrastructure for deployment of java (servlet/jsp) web applications provided by IT-DES • we provide: • servlet/JSP container • support for deployment • backup, monitoring • we don’t provide: • an EJB container • support for development • telnet/ssh/ftp access to the servers • SLA: aimed for medium-sized, non-critical applications;full support within CERN working hours;the support outside working hours is provided on besteffort basis. Michał Kwiatek, IT-DES
„Standard” approach ! Michał Kwiatek, IT-DES
J2EE Public Service - approach ! Michał Kwiatek, IT-DES
J2EE Public Server architecture • software used: • Apache Tomcat 5.5 • JDK 1.5 • Apache httpd 2.0 • jpsmanager • The architecture is open! Michał Kwiatek, IT-DES
Guess what! • JDBC drivers to oracle are preinstalled (thin) • 3 usage scenarios Michał Kwiatek, IT-DES
JDBC 1. Basic example 2. Connection pooling Connection conn = null;Statement stmt = null;ResultSet rset = null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection(url, user, password); stmt = conn.createStatement(); rset = stmt.executeQuery(query); ... } catch(SQLException e) { ... } finally { try {rset.close(); } catch(Exception e) { } try { stmt.close(); } catch(Exception e) { } try { conn.close(); } catch(Exception e) { } } Michał Kwiatek, IT-DES
JDBC (cont’d) 3. Connection pooling & JNDI (1/2) // in Servlet, JSP, or simply a class: Connection conn = null; Statement stmt = null; ResultSet rset = null; try { Context initContext = new InitialContext(); Context envContext = (Context)initContext.lookup("java:/comp/env"); DataSource ds = (DataSource)envContext.lookup("jdbc/devdb"); conn = ds.getConnection(); stmt = conn.createStatement(); rset = stmt.executeQuery(query); ... } catch(SQLException e) { ... } finally { try { rset.close(); } catch(Exception e) { } try { stmt.close(); } catch(Exception e) { } try { conn.close(); } catch(Exception e) { } } Michał Kwiatek, IT-DES
JDBC (cont’d) 3. Connection pooling & JNDI (2/2) // in META-INF/context.xml: <Context> <Resource name="jdbc/devdb" auth="Container" type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@oradev.cern.ch:10521:D" username="XXXXX" password="XXXXX" maxActive="10" maxIdle="5" /> </Context> // in WEB-INF/web.xml: <resource-ref> ... </resource-ref> Michał Kwiatek, IT-DES
Authentication/authorisation • Authentication: • my identity can be confirmed using my CERN id card • Authorisation • using my identityand additional information (did I attend the security course?) the system will let me into the Computer Centre or not Michał Kwiatek, IT-DES
How to do it NICEly? • method for authentication and authorisation • is provided by the container • uses existing mechanisms • this method is NICE: • NICE login and password to authenticate • NICE groups to authorise (CERN Department/Group structure, or some project-specific groups) Michał Kwiatek, IT-DES
NICE authentication NICE authentication is set up by default • in WEB-INF/web.xml you specify which areas of your application require authentication • you also specify which groups of users are authorized to access these areas • you can define these groups (and their members) at https://www.cern.ch/WinServices/Services/GroupManager/ • from your application, you may check who is logged on using: request.getUserPrincipal() Michał Kwiatek, IT-DES
Resources • http://j2ee-public-service.web.cern.ch/j2ee-public-service/ • sla.html • faq.html • technical.html • chapter 9, "Developing secure web applications" from SCWCD Exam Study Kit by Hanumant Deshmukh and Jignesh Malavia. • http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html • http://jakarta.apache.org/commons/dbcp/ • http://ws.apache.org/axis/java/index.html • j2ee tutorial: http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html Michał Kwiatek, IT-DES
Questions? Michał Kwiatek, IT-DES