Outils pour utilisateurs

Outils du site


projets:2018:stagejava

Ceci est une ancienne révision du document !


Stage Java: octobre 2018

Introduction

Découvrir la plateforme Java:

  • son langage de programmation
  • sa machine virtuelle
  • l'environnement de développement
Public cible 10 jeunes
Date 22, 23, et 24 octobre
Lieu Au 214

Modalités

Une inscription est nécessaire pour pouvoir planifier. Une adhésion “Les Petits Hackers” (80 euros) sera demandée.

Planning et contenu

  • Communication

Présent pour animer

Animation de l'atelier:

  • Stéphane Blanc
  • Christian Jacolot

Contacts

Structure Nom Prénom Rôle sur le projet / poste
Maison du libre Stéphane Blanc Logistique et animation
Maison du libre Christian JACOLOT Logistique et animation

Déroulé

  • Présentation Java
  • Installation Java JDK (OpenJDK)
  • Présentation et installation de l'environnement de développement Eclipse
  • Présentation du langage avec des exemples

Présentation Java

Présentation: stage_initiation_java.odp

Code de l'exemple:

package bzh.lph.stage;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Devine {

	private final static int max = 100;
	   
	public static void main(String[] args) throws IOException {
		
	int nombre = (int) (Math.random() * max) + 1; // à deviner
	int nbCoup = 0;
        int i = 0;
	do {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		System.out.print("Entrer un entier entre 1 et 100:");
		try {
		     i = Integer.parseInt(br.readLine());
		     if (i < nombre) {
  			System.out.println("nombre trop petit");
	             } else if (i > nombre) {
			System.out.println("nombre trop grand");
		     } else {
			System.out.println("bravo, vous avez deviné");
		     }
		} catch (NumberFormatException nfe) {
		     System.err.println("Ce n'est pas un nombre!");
		}
		nbCoup += 1; // nbCoup = nbCoup +1;
	} while (i != nombre);
	System.out.println("Gagné en " + nbCoup + " coup(s)");
     }
  }
}

Java Interface Graphique

Présentation: stage_initiation_java_gui.odp

Code de l'exemple:

package bzh.lph.services;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class DevineGui {

	private final static int max = 100;
	
	public static void main(String[] args) {
		// jeu
		int nombre = (int) (Math.random() * max) + 1; // à deviner
		int nbCoup = 0;

		// fenêtre
		JFrame f = new JFrame("ma fenêtre");
		f.setSize(640,480);
		
		// conteneur
		JPanel panel = new JPanel();
		
		// configure le layout du conteneur
  		panel.setLayout(new FlowLayout());

		// créer les widgets
		JLabel msgLbl = new JLabel("Devine un nombre entre 1 et 100");
		JLabel msgEntreLbl = new JLabel("Entrer un nombre: ");
		JTextField nombreTF = new JTextField();
		nombreTF.setText("99");
		JButton validationBtn = new JButton("Valider mon nombre");
		
                // quand le bouton validation est cliqué, vérifie le nombre
		validationBtn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String textNombre = nombreTF.getText();
				int i = 0;
				try {
					i = Integer.parseInt(textNombre);
					if (i < nombre) {
						JOptionPane.showConfirmDialog(f,
								"nombre trop petit", "Perdu",
								JOptionPane.OK_CANCEL_OPTION);
					} else if (i > nombre) {
						JOptionPane.showMessageDialog(f,
								"nombre trop grand", "Perdu",
								JOptionPane.OK_CANCEL_OPTION);
					} else {
						JOptionPane.showMessageDialog(f,
								"vous avez deviné", "Bravo",
								JOptionPane.OK_CANCEL_OPTION);
					}
				} catch (NumberFormatException nfe) {
					JOptionPane.showMessageDialog(f,
								"Ceci n'est pas un nombre !", "Erreur",
								JOptionPane.OK_CANCEL_OPTION);
				}
				// nbCoup += 1; // nbCoup = nbCoup +1;
			}
		});
		
		// ajoute les widgets au conteneur
		panel.add(msgLbl);
		panel.add(msgEntreLbl);
		panel.add(nombreTF);
		panel.add(validationBtn);

		// ajoute le conteneur à la fenêtre
		f.getContentPane().add(panel);
                // la fenêtre est visible et active
		f.setVisible(true);		
	}
}

Java Stockage: Base de données

Présentation: stage_initiation_java_stockage.odp

Code de l'exemple:

package bzh.lph.stage;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class GestionContact {

	private static Connection conn = null;

	public static void main(String[] args) {
		connect();
		// lireData();
		// ecrireData();
		// effacerData();
		disconnect();
	}

	// connection à la base de contact
	public static void connect() {
		conn = null;
		try {
			// les paramêtres de la connexion à la base de données
			String url = "jdbc:sqlite:contact.db";
			// ouvrir la base de données
			conn = DriverManager.getConnection(url);
			System.out.println("Connexion à la base réussie.");
		} catch (SQLException e) {
			System.out.println(e.getMessage());
		}
	}

	// fermer la connexion à la base de données
	private static void disconnect() {
		try {
			if (conn != null) {
				conn.close();
			}
		} catch (SQLException ex) {
			System.out.println(ex.getMessage());
		}
	}

	private static void lireData() {
		if (conn != null) {
			try {
				// créer à partir de la connexion la requête
				Statement stmt = conn.createStatement();
				// exécuter la requête
				ResultSet rs 
					= stmt.executeQuery("select * from contact");
				// parcourir le résultat
				while (rs.next()) {
					int numeroContact = rs.getInt("numero");
					String nomContact = rs.getString("nom");
					String prenomContact = rs.getString("prenom");
					System.out.println(
							"Numéro: " + numeroContact 
							+ ", Nom: " + nomContact + ", Prénom: " + prenomContact);
				}
			} catch (SQLException e) {
				System.out.println(e.getMessage());
			}
		}
	}

	private static void ecrireData() {
		if (conn != null) {
			try {
				// préparer la requête
				String nomContact = "Blanc";
				String prenomContact = "Stéphane";
				String insertionContact = "INSERT INTO contact(nom, prenom) VALUES('" + nomContact + "','"
						+ prenomContact + "')";
				// créer à partir de la connexion la requête
				Statement stmt = conn.createStatement();
				// exécuter la requête
				stmt.executeUpdate(insertionContact);
				System.out.println("Insertion de Stéphane: ok");
			} catch (SQLException e) {
				System.out.println(e.getMessage());
			}
		}
	}

	private static void effacerData() {
		if (conn != null) {
			try {
				// préparer la requête
				int numeroJacolot = 1;
				String effacterRqt = "DELETE FROM contact WHERE numero = ?";
				// créer une requête à partir de la connexion
				PreparedStatement deleteStmt = conn.prepareStatement(effacterRqt);
				// positionner le paramètre
				deleteStmt.setInt(1, numeroJacolot);
				// exécuter la requête
				deleteStmt.executeUpdate();
				System.out.println("Christian a été effacé: ok");
			} catch (SQLException e) {
				System.out.println(e.getMessage());
			}
		}
	}
}
mvn archetype:generate -DarchetypeGroupId=net.mdl29.test -DartifactId=resttest -DarchetypeArtifactId=maven-archetype-quickstart

pom.xml

<dependencies>

  <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-server</artifactId>
      <version>9.2.3.v20140905</version>
  </dependency>
  <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-servlet</artifactId>
      <version>9.2.3.v20140905</version>
  </dependency>
  <dependency>
      <groupId>org.glassfish.jersey.core</groupId>
      <artifactId>jersey-server</artifactId>
      <version>2.7</version>
  </dependency>
  <dependency>
      <groupId>org.glassfish.jersey.containers</groupId>
      <artifactId>jersey-container-servlet-core</artifactId>
      <version>2.7</version>
  </dependency>
  <dependency>
      <groupId>org.glassfish.jersey.containers</groupId>
      <artifactId>jersey-container-jetty-http</artifactId>
      <version>2.7</version>
  </dependency>
  <dependency>
      <groupId>org.glassfish.jersey.media</groupId>
      <artifactId>jersey-media-moxy</artifactId>
      <version>2.7</version>
  </dependency>
  

<dependency>

  <groupId>org.glassfish.jaxb</groupId>
  <artifactId>jaxb-runtime</artifactId>
  <version>2.3.2</version>

</dependency>

</dependencies>

Class EntryPoint.java

package net.mdl29.test;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/entry-point")
public class EntryPoint {

    @GET
    @Path("test")
    @Produces(MediaType.TEXT_PLAIN)
    public String test() {
        return "Test";
    }
}

Class App.java

package net.mdl29.test;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;

public class App {
    public static void main(String[] args) throws Exception {
        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
        context.setContextPath("/");

        Server jettyServer = new Server(8080);
        jettyServer.setHandler(context);

        ServletHolder jerseyServlet = context.addServlet(
             org.glassfish.jersey.servlet.ServletContainer.class, "/*");
        jerseyServlet.setInitOrder(0);

        // Tells the Jersey Servlet which REST service/class to load.
        jerseyServlet.setInitParameter(
           "jersey.config.server.provider.classnames",
           EntryPoint.class.getCanonicalName());

        try {
            jettyServer.start();
            jettyServer.join();
        } finally {
            jettyServer.destroy();
        }
    }
}

Ajouter la gestion du manifeste dans pom.xml

<build>
...

<plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>1.6</version>
      <configuration>
        <createDependencyReducedPom>true</createDependencyReducedPom>
        <filters>
          <filter>
            <artifact>*:*</artifact>
            <excludes>
              <exclude>META-INF/*.SF</exclude>
              <exclude>META-INF/*.DSA</exclude>
              <exclude>META-INF/*.RSA</exclude>
            </excludes>
          </filter>
        </filters>
      </configuration>
 
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>shade</goal>
          </goals>
          <configuration>
            <transformers>
              <transformer
                implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
              <transformer
                implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                <manifestEntries>
                  <Main-Class>net.mdl29.test.App</Main-Class>
                </manifestEntries>
              </transformer>
            </transformers>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
 ...

</build>
projets/2018/stagejava.1547308160.txt.gz · Dernière modification : 2022/09/04 21:03 (modification externe)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki