240 likes | 356 Views
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. What is a JSP?.
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