Introduction 1 Fonctions implémentées 2 Contenu de la livraison 3 Installation 4 Manuel de programmation Implémentation de l'api Servlet 5 Elaboration de servlets utilisateur 6 Fichier de configuration (JSERVER.XML) 7 Servlet et configuration d'exemple 8 11/2010
Mentions légales Signalétique d'avertissement Ce manuel donne des consignes que vous devez respecter pour votre propre sécurité et pour éviter des dommages matériels. Les avertissements servant à votre sécurité personnelle sont accompagnés d'un triangle de danger, les avertissements concernant uniquement des dommages matériels sont dépourvus de ce triangle. Les avertissements sont représentés ci-après par ordre décroissant de niveau de risque. DANGER signifie que la non-application des mesures de sécurité appropriées entraîne la mort ou des blessures graves. ATTENTION signifie que la non-application des mesures de sécurité appropriées peut entraîner la mort ou des blessures graves. PRUDENCE accompagné d un triangle de danger, signifie que la non-application des mesures de sécurité appropriées peut entraîner des blessures légères. PRUDENCE non accompagné d un triangle de danger, signifie que la non-application des mesures de sécurité appropriées peut entraîner un dommage matériel. IMPORTANT signifie que le non-respect de l'avertissement correspondant peut entraîner l'apparition d'un événement ou d'un état indésirable. En présence de plusieurs niveaux de risque, c'est toujours l'avertissement correspondant au niveau le plus élevé qui est reproduit. Si un avertissement avec triangle de danger prévient des risques de dommages corporels, le même avertissement peut aussi contenir un avis de mise en garde contre des dommages matériels. Personnes qualifiées L appareil/le système décrit dans cette documentation ne doit être manipulé que par du personnel qualifié pour chaque tâche spécifique. La documentation relative à cette tâche doit être observée, en particulier les consignes de sécurité et avertissements. Les personnes qualifiées sont, en raison de leur formation et de leur expérience, en mesure de reconnaître les risques liés au maniement de ce produit / système et de les éviter. Utilisation des produits Siemens conforme à leur destination Tenez compte des points suivants: ATTENTION Les produits Siemens ne doivent être utilisés que pour les cas d'application prévus dans le catalogue et dans la documentation technique correspondante. S'ils sont utilisés en liaison avec des produits et composants d'autres marques, ceux-ci doivent être recommandés ou agréés par Siemens. Le fonctionnement correct et sûr des produits suppose un transport, un entreposage, une mise en place, un montage, une mise en service, une utilisation et une maintenance dans les règles de l'art. Il faut respecter les conditions d'environnement admissibles ainsi que les indications dans les documentations afférentes. Marques de fabrique Toutes les désignations repérées par sont des marques déposées de Siemens AG. Les autres désignations dans ce document peuvent être des marques dont l'utilisation par des tiers à leurs propres fins peut enfreindre les droits de leurs propriétaires respectifs. Exclusion de responsabilité Nous avons vérifié la conformité du contenu du présent document avec le matériel et le logiciel qui y sont décrits. Ne pouvant toutefois exclure toute divergence, nous ne pouvons pas nous porter garants de la conformité intégrale. Si l'usage de ce manuel devait révéler des erreurs, nous en tiendrons compte et apporterons les corrections nécessaires dès la prochaine édition. Siemens AG Industry Sector Postfach 48 48 90026 NÜRNBERG ALLEMAGNE Copyright Siemens AG 2010. Sous réserve de modifications techniques
Sommaire 1 Introduction... 5 2 Fonctions implémentées... 7 3 Contenu de la livraison... 9 4 Installation... 11 5 Implémentation de l'api Servlet... 13 6 Elaboration de servlets utilisateur... 17 7 Fichier de configuration (JSERVER.XML)... 19 8 Servlet et configuration d'exemple... 21 Index... 25 Manuel de programmation, 11/2010 3
Sommaire 4 Manuel de programmation, 11/2010
Introduction 1 est l'implémentation d'un conteneur de servlets. Les servlets sont des programmes Java qui étendent les fonctions des serveurs communiquant via un protocole de requête/réponse. Théoriquement, ils ne sont pas liés à un protocole de serveur (HTTP), mais ne sont généralement utilisés qu'en rapport avec des serveurs HTTP/Web. Le conteneur Web met à disposition l'environnement d'exécution pour les applications Web avec les servlets et peut être exécuté sur une autre machine que le serveur Web (répartition de la charge, sécurité/redondance). Dans SIMOTION, les servlets sont exécutés dans SIMOTION - IT Virtual Machine (implémentation d'un environnement d'exécution Java) et peuvent donc également utiliser l'api SIMOTION (accès aux objet de SIMOTION-RT, NVRAM, Logging). Le document décrit les fonctions implémentées, le paramétrage et le démarrage du conteneur de servlets et la mise en service d'un servlet Java d'exemple. Figure 1-1 Exécution servlet commande Manuel de programmation, 11/2010 5
Introduction 6 Manuel de programmation, 11/2010
Fonctions implémentées 2 prend en charge la "Java Servlet Specification, V2.2". Dans, les concepts de l'api Servlet standard ne sont pas tous implémentés. Sont implémentés : Distinction du type de requête (GET, POST) Accès à tous les paramètres de la requête (aussi bien de l'url que des données de formulaire) Accès au contenu de la requête Accès à l'en-tête de la requête Définition de l'état de la réponse Définition de l'en-tête de la réponse Ecriture du contenu de la réponse Journalisation Paramètres d'initialisation du fichier de configuration des servlets Contexte des servlets avec gestion des attributs et paramètres d'initialisation Ceci permet déjà d'implémenter des servlets à part entière, y compris l'élaboration et le traitement de formulaires de saisie (par exemple pour navigateurs Web). Les fonctions implémentées sont décrites en détail au chapitre Implémentation de l'api Servlet (Page 13). Les concepts plus poussés ne sont pas implémentés, notamment : Prise en charge de sessions HTTP Prise en charge de RequestDispatcher Prise en charge de la fonctionnalité de sécurité Accès aux informations client (ordinateur hôte distant,...) Internationalisation (l'iso-8859-1 est le seul jeu de caractères disponible) Java Server Pages Remarque Fonctionnalité de sécurité Une authentification est implémentée dans la connexion au serveur Web SIMOTION pour permettre la limitation générale de l'accès aux servlets par sécurité. Par contre, les fonctions de sécurité Java définies dans l'api Servlet (tels que le concept de sécurité basé sur les rôles) ne sont pas implémentés. Manuel de programmation, 11/2010 7
Fonctions implémentées 8 Manuel de programmation, 11/2010
Contenu de la livraison 3 Les fichiers suivants font partie de : Nom du fichier svltapi.jar svltimpl.jar simotion_servlets_doc.zip simotion_servlets_demo.zip JSERVER.XML Description Bibliothèque Java contenant l'api Servlet standard. Bibliothèque Java contenant l'implémentation du conteneur de servlets Documentation en ligne de l'api Servlet (au format HTML). Code source Java pour servlet d'exemple. Exemple de fichier de configuration de servlet. Manuel de programmation, 11/2010 9
Contenu de la livraison 10 Manuel de programmation, 11/2010
Installation 4 requiert l'installation et la configuration de SIMOTION - IT Virtual Machine. Pour l'utilisation de, les bibliothèques Java svltapi.jar et svltimpl.jar doivent être stockées sur le système cible. Depuis SIMOTION V4.1 SP4, ces bibliothèques Java doivent être stockées dans le répertoire : /SIEMENS/SIMOTION Les fichiers de configuration fournis supposent que les bibliothèques système Java pour SIMOTION se trouvent dans ce répertoire. La bibliothèque Java svltapi.jar contenant l'api Servlet Standard doit être intégrée dans le chemin de la JamaicaVM. Dans le cas le plus simple, le réglage de BOOTCLASSPATH doit donc être étendu en conséquence dans le fichier VMCONFIG.INI : BOOTCLASSPATH= b:/siemens/simotion/simotion.jar;b:/siemens/simotion/svltapi.jar Remarque Dans SIMOTION - IT Virtual Machine, le point-virgule doit toujours être utilisé comme séparateur de CLASSPATH. Pour le démarrage automatique du conteneur de servlets, la ligne suivante doit être ajoutée au fichier JINVOKE.XML : <AUTOSTART LIBRARY="B:/SIEMENS/SIMOTION/SVLTIMPL.JAR" CLASSNAME="com.siemens.ad.SIMOTION.servlets.ServletContainer"/> Les servlets utilisateur doivent être stockés dans une bibliothèque Java (fichier JAR ou ZIP) et être enregistrés dans le répertoire de travail courant du système cible. Pour le chargement d'un servlet utilisateur, il suffit de reporter les informations correspondantes dans le fichier de configuration JSERVER.XML. Ce fichier de configuration doit également être stocké dans le répertoire de travail courant du système cible. Remarque Le logiciel et les bibliothèques sont fournis sur le DVD U&A, sous \VOL2\AddOn\4_Accessories\Simotion_IT\5_Simotion_VM Manuel de programmation, 11/2010 11
Installation 12 Manuel de programmation, 11/2010
Implémentation de l'api Servlet 5 prend en charge la "Java Servlet Specification, V2.2". L'implémentation correspondante de l'apache Jakarta Project développé par l'apache Software Foundation (http://www.apache.org/), sans prise en charge de Java Server Pages, est utilisé pour l'api Servlet. Autrement dit, excepté la prise en charge de Java Server Pages, toutes les interfaces et classes spécifiées de l'api Servlet sont en principe disponibles et la documentation en ligne de l'api Servlet contient également une description complète de toutes les interfaces et classes inclues. Certaines interfaces et méthodes d'interfaces qui ne sont pas nécessaires pour les servlets simples ne sont pas encore prises en charge dans la première version de SIMOTION - Servlets. Ne sont pas prises en charge notamment les méthodes indiquées comme "deprecated" (obsolètes, à ne plus utiliser) dans la spécification des servlets. Si certaines méthodes d'une interface ne sont pas prises en charge, leur appel déclenche une exception de type "UnsupportedOperationExeption". L'API Servlet est détaillé ci-après, ainsi qu'une description des fonctions implémentées dans SIMOTION Servlets. Package javax.servlet RequestDispatcher Non implémenté ServletConfig Entièrement implémenté ServletContext Les méthodes suivantes sont implémentées : public int getmajorversion() public int getmajorversion() public void log(string msg) public void log(string msg, Throwable throwable) public String getserverinfo() public String getinitparameter(string name) public Object getattribute(string name) public Enumeration getattributenames() public void setattribute(string name, Object object) public void removeattribute(string name) public String getcontextpath() Manuel de programmation, 11/2010 13
Implémentation de l'api Servlet Package javax.servlet.http ServletRequest Les méthodes suivantes sont implémentées : public int getcontentlength() public String getcontenttype() public ServletInputStream getinputstream() throws IOException public String getparameter(string name) public Enumeration getparameternames() public String[] getparametervalues(string name) public String getprotocol() public String getservername() ServletResponse Les méthodes suivantes sont implémentées : public ServletOutputStream getoutputstream() throws IOException public void setcontenttype(string type) public void reset() public boolean iscommitted() public void flushbuffer() throws IOException SingleThreadModel Déjà implémenté dans l'api Servlet GenericServlet Déjà implémenté dans l'api Servlet ServletInputStream Entièrement implémenté ServletOutputStream Entièrement implémenté ServletException Déjà implémenté dans l'api Servlet UnavailableException Déjà implémenté dans l'api Servlet HttpServletRequest Les méthodes suivantes sont implémentées : public Cookie[] getcookies() public long getdateheader(string name) public String getheader(string name) public Enumeration getheadernames() public int getintheader(string name) public String getmethod() public String getcontextpath() public String getpathinfo() public String getquerystring() public String getrequesturi() public String getservletpath() 14 Manuel de programmation, 11/2010
Implémentation de l'api Servlet HttpServletResponse Les méthodes suivantes sont implémentées : public void addcookie(cookie cookie) public boolean containsheader(string name) public void senderror( int sc, String msg ) throws IOException public void senderror(int sc) throws IOException public void setdateheader(string name, long date) public void setheader(string name, String value) public void setintheader(string name, int value) public void setstatus(int sc) HttpSession Non implémenté HttpSessionBindingListener Non implémenté HttpSessionContext Non implémenté Cookie Déjà implémenté dans l'api Servlet HttpServlet Déjà implémenté dans l'api Servlet HttpSessionBindingEvent Déjà implémenté dans l'api Servlet HttpUtils Déjà implémenté dans l'api Servlet Package javax.servlet.jsp Ce package, y compris les sous-packages, n'est pas compris dans. Manuel de programmation, 11/2010 15
Implémentation de l'api Servlet 16 Manuel de programmation, 11/2010
Elaboration de servlets utilisateur 6 L'élaboration de servlets utilisateur se fait sur un ordinateur de développement. La compilation des programmes utilisateur Java requiert un Java SDK (Java SE Development Kit). Il est recommandé d'utiliser la "plate-forme Java 2, V1.3.x" avec Java JDK (Java Development Kit). Pour que le compilateur Java trouve les classes référencées à l'intérieur de l'api Servlet, il faut indiquer la bibliothèque Java correspondante au moment de la compilation. Exemple : javac classpath svltapi.jar... Si des classes sont également référencées par l'api SIMOTION, la bibliothèque Java correspondante doit également être indiquée lors de la compilation. Exemple : javac classpath svltapi.jar;simotion.jar... Remarque : Le séparateur utilisé à l'intérieur de l'indication CLASSPATH est spécifique à la plate-forme. En cas d'utilisation d'un ordinateur de développement Windows, c'est le point-virgule. Sur un ordinateur de développement Unix, il faut utiliser deux-points. Pour être certain que le servlet utilisateur n'utilise pas de classes système Java qui ne sont pas disponibles dans l'environnement d'exécution SIMOTION - IT Virtual Machine, il est possible d'indiquer en plus la bibliothèque Java contenant les classes système comme référence pour la compilation. Exemple : javac bootclasspath simotion_systemclasses.jar classpath svltapi.jar... Après la compilation, toutes les classes du programme utilisateur doivent être stockées dans une bibliothèque Java. Exemple : jar cvf testsvlt.jar... La bibliothèque Java contenant le servlet utilisateur peut ensuite être transférée sur le système cible et être chargée par le conteneur de servlets. Manuel de programmation, 11/2010 17
Elaboration de servlets utilisateur 18 Manuel de programmation, 11/2010
Fichier de configuration (JSERVER.XML) 7 Le fichier de configuration JSERVER.XML contient les réglages du conteneur de servlets SIMOTION et des servlets à charger. Le fichier de configuration doit être élaboré en notation XML. Un analyseur de syntaxe XML (NanoXML/Lite), simple mais entièrement suffisant pour le traitement du fichier de configuration, est intégré dans SIMOTION - IT Virtual Machine. Avant d'enregistrer le fichier de configuration sur le système cible, il est recommandé de le visualiser par exemple dans un navigateur Web pour voir immédiatement d'éventuelles erreurs de syntaxe (au cas où le fichier de configuration n'a pas été généré avec un éditeur XML spécial). NanoXML ne signale pas toutes les erreurs. Les différents éléments du fichier de configuration XML sont décrits ci-après : Elément ROOT Comme élément Root, il faut utiliser SIMSERV : <?xml version="1.0" standalone="yes"?> <SIMSERV> <!-- Paramètre d'initialisation du contexte --> <INITPARAM NAME="AParameter" VALUE="aValue"/> <!-- Suivent ici par exemple les éléments SERVLET --> </SIMSERV> Tous les autres éléments doivent alors être indiqués à l'intérieur de l'élément ROOT. L'exemple précédent ne contient qu'un paramètre d'initialisation comme décrit ci-dessous. Elément INITPARAM Un élément ROOT peut contenir un nombre quelconque d'éléments INITPARAM. Ces paramètres d'initialisation peuvent être interrogés par les servlets via le ServletContext. Ces paramètres d'initialisation sont donc considérés comme étant disponibles pour tous les servlets. Les attributs exploités sont les suivants : NAME Nom du paramètre d'initialisation. Si l'attribut manque, l'élément n'est pas exploité davantage. VALUE Valeur du paramètre d'initialisation. Si l'attribut manque, la chaîne vide est utilisée comme valeur. Elément SERVLET Un élément SERVLET contient des informations concernant le servlet à charger. Pour le servlet à charger, il faut indiquer le nom de la classe Java implémentant le servlet, et le chemin d'enregistrement du servlet (partie qui suit le chemin du contexte dans l'url). Il est possible d'indiquer plusieurs éléments SERVLET et de charger plusieurs servlets. Les attributs exploités sont les suivants : Manuel de programmation, 11/2010 19
Fichier de configuration (JSERVER.XML) LIBRARY Nom de la bibliothèque Java (fichier JAR ou ZIP) contenant le servlet. L'indication peut être absolue ou relative. Si l'indication est relative (nom du fichier sans chemin), le fichier doit se trouver dans le répertoire de travail courant. Cette indication est optionnelle. Si la bibliothèque n'est pas indiquée, la classe Java du servlet doit se trouver dans CLASSPATH. CLASSNAME Nom de la classe Java du servlet. PATH Chemin d'enregistrement du servlet à l'intérieur du ServletContext. NAME Nom du servlet. Le nom est optionnel et a uniquement valeur d'information (retournée par la méthode getservletname()). Si l'indication manque, le nom de la classe Java est utilisé pour le nom du servlet. Elément INITPARAM Un élément SERVLET peut contenir un nombre quelconque d'éléments INITPARAM. Ces paramètres d'initialisation peuvent être interrogés à l'intérieur du servlet via la configuration du servlet et ne sont valables que pour le servlet en question. L'élément INITPARAM pour servlets possède la même structure que celui du ServletContext (voir élément INITPARAM). Exemples d'éléments SERVLET Deux servlets sont chargés dans cet exemple. La classe Java MyServlet est chargée depuis l'archive Java MYSVLT.JAR et est enregistrée sous /myservlet à l'intérieur du ServletContext. Le servlet peut interroger les deux paramètres d'initialisation. Le nom du servlet correspond au nom de la classe Java. Le servlet est référencé par un client via http://<host>/servlet/myservlet. La classe Java TestServlet est chargée via le chargeur de classe système et est enregistrée sous le chemin /test à l'intérieur du ServletContext (dans ce cas, la classe Java TestServlet doit se trouver dans CLASSPATH de SIMOTION - IT Virtual Machine). Le servlet n'a pas de paramètres d'initialisation. Le nom du servlet est "A test servlet". Le servlet est référencé par un client via http://<host>/servlet/test. <SERVLET LIBRARY="MYSVLT.JAR" CLASSNAME="MyServlet" PATH="/myServlet"> <INITPARAM NAME="AParameter" VALUE="aValue"/> <INITPARAM NAME="AnotherParameter" VALUE="anotherValue"/> </SERVLET> <SERVLET CLASSNAME="TestServlet" PATH="/test" NAME="A test servlet"/> 20 Manuel de programmation, 11/2010
Servlet et configuration d'exemple 8 Un servlet d'exemple est fourni comme aide de départ en code source Java. La configuration d'exemple JSERVER.XML peut être utilisée avec ce servlet. DemoServlet.java L'exemple suivant illustre le principe de traitement de la requête d'un client dans un servlet concret. /* * ============================================================== * A simple servlet to demonstrate how to built a user-servlet. * * The servlet generates some "plain-text" only. * * Copyright (C) 2004 Siemens AG. All rights reserved. * ============================================================== */ // Necessary servlet API import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; // Possible io exceptions import java.io.ioexception; import java.io.printwriter; Manuel de programmation, 11/2010 21
Servlet et configuration d'exemple /* * A simple servlet, which generates only a textual response. */ public class DemoServlet extends HttpServlet { /* * Generate response for a GET-Request. */ public void doget( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { // "request" could be used to query additional // informations // e.g. parameters... // Set Content-Type of the response response.setcontenttype("text/plain"); // Obtain PrintWriter for writing response PrintWriter out = response.getwriter(); } } // Write response out.println("hello SIMOTION Servlets!"); Le servlet d'exemple ne génère qu'un simple texte et ne requiert aucun paramètre. Un servlet voulant faire représenter un formulaire de saisie dans un navigateur génère le formulaire au format HTML et l'écrit comme réponse sur une requête GET adressée au navigateur. Pour le traitement du formulaire de saisie, un servlet de ce type implémente en plus le traitement de la requête POST, y exploite les paramètres du formulaire et génère à nouveau une réponse. JSERVER.XML Le fichier de configuration fourni montre la manière dont le servlet d'exemple peut être chargé. Le fichier de configuration illustre par ailleurs comment activer un DumpServlet contenu dans. C'est utile pour la visualisation des paramètres d'initialisation courants du ServletContext. 22 Manuel de programmation, 11/2010
Servlet et configuration d'exemple <?xml version="1.0" standalone="yes"?> <SIMSERV> <!-- Exemple de configuration --> <!-- Paramètre du ServletContext --> <INITPARAM NAME="ContextParam1" VALUE="ContextValue1"/> <INITPARAM NAME="ContextParam2" VALUE="ContextValue2"/> <!-- Chargement du servlet de démonstration fourni, préalablement compilé, stocké dans SVLTDEMO.JAR et enregistré sur le système cible. Le chemin d'enregistrement du servlet de démonstration est /demo, accessible pour le client via http://<host>/servlet/demo. --> <SERVLET LIBRARY="SVLTDEMO.JAR" CLASSNAME="DemoServlet" PATH="/demo" NAME="Demo-Servlet"/> <!-- Pour le DumpServlet contenu en standard, il n'est pas nécessaire d'indiquer de bibliothèque dans LIBRARY. Comme réponse, le DumpServlet fournit des informations concernant la requête courante et les paramètres d'initialisation du contexte et du servlet (s'il est indiqué) et peut être enregistré par exemple pour un contrôle simple des paramètres d'initialisation du contexte. Le chemin d'enregistrement du DumpServlet de démonstration est par exemple /dump/*, accessible pour le client via http://<host>/servlet/dump, ou aussi via http://<host>/servlet/dump/apathinfo. --> <SERVLET CLASSNAME="com.siemens.ad.SIMOTION.servlets.DumpServlet" PATH="/dump/*" NAME="Sample DumpServlet"> <INITPARAM NAME="ServletParam1" VALUE="ServletValue1"/> <INITPARAM NAME="ServletParam2" VALUE="ServletValue2"/> </SERVLET> </SIMSERV> Manuel de programmation, 11/2010 23
Servlet et configuration d'exemple 24 Manuel de programmation, 11/2010
Index A API Servlet, 13 C Configuration d'exemple JSERVER.XML, 21 Contenu de la livraison, 9 D DemoServlet.java, 21 E Etendue de, 7 F Fichier de configuration JSERVER.XML, 19 Fonctions, 13 I Installation de SIMOTION - IT Virtual Machine, 11 J JSERVER.XML, 21 L Limitation de l'accès, 7 S Servlets utilisateur, 17 Manuel de programmation, 11/2010 25
Index 26 Manuel de programmation, 11/2010