Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1719 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Servlets - Utilisation correcte ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Servlets - Utilisation correcte ?

n°1933306
didier1809
${citation_perso}
Posté le 19-10-2009 à 16:31:49  profilanswer
 

:hello:  
 
J'ai fait un essai avec ajax (une aide à la recherche, à la google style), qui va lire des enregistrement dans Oracle.
 
Donc à chaque frappe du clavier --> Un select executé.
 
J'aimerai vos avis sur plusieurs points :
- Est-ce que je gère bien les connexions/déconnexions ?
- Est-ce que ce code est correct au point de vue performances ?
- Que changeriez vous ?
 
Je cherche surtout à faire du code propre et performant, et je vous rassure, ce n'est pas un exercice à terminer pour un cours quelconque ;-)
 

Code :
  1. package lu.dinow.ajax;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import java.sql.*;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import javax.servlet.http.HttpSession;
  9. public class StudentInfo extends javax.servlet.http.HttpServlet  {
  10. private Connection orclCon;
  11. public void doGet(HttpServletRequest req, HttpServletResponse res)
  12.     throws IOException, ServletException {
  13.  System.out.println("doGet" );
  14.  res.setContentType("text/xml" );
  15.  PrintWriter out = res.getWriter();
  16.  String ret = process(req,req.getSession());
  17.  out.print(ret);
  18.  out.close();
  19. }
  20. public void init() throws ServletException {
  21.  super.init();
  22.  try {
  23.   orclCon = connect();
  24.  } catch(ClassNotFoundException e) {
  25.   e.printStackTrace();
  26.  } catch(SQLException e) {
  27.   e.printStackTrace();
  28.  }
  29. }
  30. private String process(HttpServletRequest res, HttpSession session){
  31.  String ret = "";
  32.  try{
  33.   ret = "<root>";
  34.   String typedLetters = res.getParameter("roll" );
  35.   Connection con = (orclCon == null) ? connect() : orclCon;
  36.   Statement stmt = con.createStatement();
  37.   String query = "Select First_name from employees where lower(first_name) like lower('" + typedLetters +"%') order by First_name";
  38.   ResultSet rs = stmt.executeQuery(query);
  39.   int i = 0;
  40.   while(rs.next()){
  41.    ret +="<employee id='"+ (i++) +"'>"+rs.getString("First_name" )+"</employee>";
  42.   }
  43.   rs.close();
  44.   stmt.close();
  45.   ret +="</root>";
  46.  }catch(Exception ex){
  47.   System.out.println(ex.getMessage());
  48.  }
  49.  return  ret;
  50. }
  51. public void destroy() {
  52.  super.destroy();
  53.  if (orclCon != null){
  54.   try {
  55.    System.out.println("Disconnected from Oracle" );
  56.    orclCon.close();
  57.   } catch(SQLException e) {
  58.    e.printStackTrace();
  59.   }
  60.  }
  61. }
  62. private Connection connect() throws ClassNotFoundException, SQLException {
  63.    System.out.println("Attempt to connect to Oracle..." );
  64.    String driverName = "oracle.jdbc.driver.OracleDriver";
  65.    Class.forName(driverName);
  66.    String url = "jdbc:oracle:thin:@EMEALU6CZ5J2J:1521:ORCL";
  67.    return DriverManager.getConnection(url, "HR", "HR" );
  68. }
  69. public void doPost(HttpServletRequest req, HttpServletResponse res)
  70.     throws IOException, ServletException {
  71.  System.out.println("doPost" );
  72.  res.setContentType("text/xml" );
  73.  PrintWriter out = res.getWriter();
  74.  String ret = process(req, req.getSession());
  75.  out.print(ret);
  76.  out.close();
  77. }
  78. }


Message édité par didier1809 le 19-10-2009 à 16:35:22

---------------
.
mood
Publicité
Posté le 19-10-2009 à 16:31:49  profilanswer
 

n°1933318
pataluc
Posté le 19-10-2009 à 16:46:10  profilanswer
 

tu ferais pas mieux de passer par un pool de connexion? surtout pour ce genre de cas (auto completion en ajax) si t'as 10 gus en train de taper dans le champ, ca fait tout de suite une foultitude de requêtes et donc d'ouverture de connexions en un rien de temps...
 
et sinon pense à blinder ton code contre les injections sql, car la on peux lui faire renvoyer un peu n'importe quoi...

n°1933324
didier1809
${citation_perso}
Posté le 19-10-2009 à 16:50:08  profilanswer
 

Merci :)
 
Pour le pool de connexions, je fais comment en pratique ?
 
Je "met" ca dans le contexte de tomcat ou quoi ?
 
Pour blinder le code je vais y regarder oui
 
Edit:
Protection contre l'injection de code :

Code :
  1. String selectStatement = "Select First_name, Last_name from employees where lower(first_name) like ? order by First_name";
  2.   PreparedStatement prepStmt = conn.prepareStatement(selectStatement);
  3.   prepStmt.setString(1, (typedLetters+"%" ).toLowerCase());
  4.   ResultSet rs = prepStmt.executeQuery();


 
 
Connection pool:
 
J'ai piqué le code ici : http://www.kgo.de/Pool.html


Message édité par didier1809 le 19-10-2009 à 17:03:25

---------------
.
n°1934354
didier1809
${citation_perso}
Posté le 22-10-2009 à 08:34:46  profilanswer
 

CdE a écrit :

Mets un timer dans ton champs pour l'ajax aussi (genre au moins 500ms sans modification avant de faire la requête) ça t'évitera de manger 200 requêtes pendant que le mec tape.


 
Ok, oui bonne idée, tu as un exemple ?


---------------
.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Servlets - Utilisation correcte ?

 

Sujets relatifs
Formule correcte, mais ecrite de #name? dans la celluleUtilisation de polices/fonts sur internet,
[Javascript] Utilisation de balises BB dans un textareaFichier en cours d'utilisation
Utilisation de la méthode CellsUtilisation de backreference avec REGEXP sous MySQL
utilisation d'un librairie C avec Ada.[Divers][Lecture]Utilisation de la bibliothèque portmidi : Pm_Read()
[LaTeX][resolu] package listings et utilisation de emphstylePL/SQL : utilisation de variable pour liste de valeur dans requête
Plus de sujets relatifs à : Servlets - Utilisation correcte ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR