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: {{ :projets:2018: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: {{ :projets:2018: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
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
...
org.apache.maven.plugins
maven-shade-plugin
1.6
true
*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
package
shade
net.mdl29.test.App
...
pom.xml
4.0.0
net.mdl29.websocket
chatwebsocket
0.0.1-SNAPSHOT
war
9.0.16
1.1
2.9.8
javax.websocket
javax.websocket-api
${websocket.version}
provided
com.fasterxml.jackson.core
jackson-databind
${jackson.version}
org.apache.tomcat
tomcat-servlet-api
${tomcat.version}
provided
${project.artifactId}
maven-compiler-plugin
3.1
1.8
maven-war-plugin
2.4
WebContent
false
class ChatWebsocket.java
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.mdl29.websocket;
import java.io.IOException;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.atomic.AtomicInteger;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint(value = "/websocket/chat")
public class ChatWebsocket {
private static final String GUEST_PREFIX = "Guest";
private static final AtomicInteger connectionIds = new AtomicInteger(0);
private static final Set connections =
new CopyOnWriteArraySet<>();
private final String nickname;
private Session session;
public ChatWebsocket() {
nickname = GUEST_PREFIX + connectionIds.getAndIncrement();
}
@OnOpen
public void start(Session session) {
this.session = session;
connections.add(this);
String message = String.format("* %s %s", nickname, "has joined.");
broadcast(message);
}
@OnClose
public void end() {
connections.remove(this);
String message = String.format("* %s %s",
nickname, "has disconnected.");
broadcast(message);
}
@OnMessage
public void incoming(String message) {
// Never trust the client
String filteredMessage = String.format("%s: %s",
nickname, filter(message.toString()));
broadcast(filteredMessage);
}
@OnError
public void onError(Throwable t) throws Throwable {
System.out.println("Chat Error: " + t.toString());
}
private static void broadcast(String msg) {
for (ChatWebsocket client : connections) {
try {
synchronized (client) {
client.session.getBasicRemote().sendText(msg);
}
} catch (IOException e) {
System.out.println("Chat Error: Failed to send message to client " + e);
connections.remove(client);
try {
client.session.close();
} catch (IOException e1) {
// Ignore
}
String message = String.format("* %s %s",
client.nickname, "has been disconnected.");
broadcast(message);
}
}
}
public static String filter(String message) {
if (message == null)
return null;
char content[] = new char[message.length()];
message.getChars(0, message.length(), content, 0);
StringBuilder result = new StringBuilder(content.length + 50);
for (int i = 0; i < content.length; i++) {
switch (content[i]) {
case '<':
result.append("<");
break;
case '>':
result.append(">");
break;
case '&':
result.append("&");
break;
case '"':
result.append(""");
break;
default:
result.append(content[i]);
}
}
return result.toString();
}
}
Web client chat.xhtml:
Apache Tomcat WebSocket Examples: Chat
Seems your browser doesn't support Javascript! Websockets rely on Javascript being enabled. Please enable
Javascript and reload this page!
Les sources complets avec pom, html, java: {{ :projets:2018:websocket-src.tar.gz |}}