servlet

Mattepuffo's logo
Java Spring Annotation Controller

Java Spring Annotation Controller

Questa estate mi sono affacciato a Java Spring, e devo dire che adesso capisco perchè è un framework così usato!

Creando un progetto con Netbeans, i vari Controller vengono salvati di default nel dispatcher-servlet (o altro file di configurazione).

Nel caso di molti controller, lo trovo scomodo, e quindi, come ho fatto con le Servlet, sono passato all'uso delle Annotation.

Mattepuffo's logo
Parametri di init in una Servlet

Parametri di init in una Servlet

E' possibile che dobbiate creare delle Servlet che richiedano dei parametri iniziali.

Impostare questi parametri è abbastanza facile, sia se li registriamo nel web.xml che non.

Nel primo caso la sintassi per la Servlet sarà una cosa del genere:

<web-app>
 <servlet>
  <servlet-name>MyServlet</servlet-name>
  <servlet-class>mypackage.MyServlet</servlet-class>
  <init-param>
   <param-name>nome</param-name>
   <param-value>MattePuffo</param-value>
  </init-param>
.......
</servlet>
........
</web-app>

In pratica abbiamo aggiunto il tag init-param.

Mattepuffo's logo
Registrazione Servlet in una web app Java

Registrazione Servlet in una web app Java

Le Servlet sono dei componenti fondamentali in una applicazione web scritta in Java.

L'unica cosa che bisogna ricordarsi è di registrarle; per farlo abbiamo due modi.

Il primo, quello classico, è usare il file web.xml; in genere gli IDE richiedono se registrare una Servlet nel web.xml o meno (o almeno Netbeans lo fa).

Coumunque è sempre possibile farlo a mano con questa sintassi:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <servlet>
        <servlet-name>SimpleServlet</servlet-name>
        <servlet-class>com_mf.SimpleServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SimpleServlet</servlet-name>
        <url-pattern>/SimpleServlet</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>

Nelle ultimissime versioni, però, non è più obbligatorio usare questo file; è possibile registrarle direttamente da codice usando una semplice riga.

Mattepuffo's logo
Gestire le sessioni con le Servlet

Gestire le sessioni con le Servlet

Gestire le sessioni con le Servlet è abbastanza semplice.

Prendiamo uno scenario del genere:

-form di login

-se l'utente esiste viene creato un oggetto User

-l'oggetto viene passato alla Servlet che crea una sessione

Quindi partendo da un form del genere:

<table>
<form action="ServletLogin" method="post">
<tbody>
<tr>
<td>User:</td>
<td><input type="text" id="focus" name="username" value="" /></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password" value="" /></td>
</tr>
<tr>
<td><input type="submit" value="Submit" name="submit" /></td>
</tr>
</form>
</table>

Questo form richiama la ServletLogin in POST:

public class ServletLogin extends HttpServlet {

private DBManager db = DBManager.getInstance(); // CLASSE PER LA CONNESSIONE

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
boolean success = false;
HttpSession session = request.getSession(true);
if (session.getAttribute("user") == null) {
try {
User user = db.login(request.getParameter("username").trim(), request.getParameter("password").trim());
String userCreato = user.getName().toString();
int userCreatoId = user.getId();
session.setAttribute("user_id", userCreatoId);
session.setAttribute("user_name", userCreato);
success = true;
if (success) {
response.sendRedirect("index.jsp");
} else {
response.sendRedirect("error.jsp?err=Atenticazione fallita");
}
} catch (ClassNotFoundException ex) {
response.sendRedirect("error.jsp?err=" + ex.getMessage());
} catch (SQLException ex) {
response.sendRedirect("error.jsp?err=" + ex.getMessage());
} catch (NoSuchAlgorithmException ex) {
response.sendRedirect("error.jsp?err=" + ex.getMessage());
}
}
}

}

Istanzia un oggetto HttpSession con il quale prendiamo la sessione corrente.

Mattepuffo's logo
Da esadecimale a String in Java

Da esadecimale a String in Java

Dopo un week-end di pausa riprendiamo con un argomento molto in voga: la conversione da valori esadecimali a String.

Nel mio caso mi è servito per il login in una wb application in JSP e Servlet.

Nel db sia utente e password sono cripati in SHA1.

Partiamo da questo metodo:

public User login(String name, String pwd) throws ClassNotFoundException, SQLException, NoSuchAlgorithmException, UnsupportedEncodingException {
  User user = new User();
  conn = DBManager.getInstance().takeConnection();
  MessageDigest md = MessageDigest.getInstance("SHA1");
  byte[] encodeName = md.digest(name.getBytes("UTF-8"));
  byte[] encodePwd = md.digest(pwd.getBytes("UTF-8"));
  String convName = ConvertHexToString.convert(encodeName);
  String convPwd = ConvertHexToString.convert(encodePwd);
  PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM user WHERE user_name = ? AND user_pass = ?");
  pstmt.setString(1, convName);
  pstmt.setString(2, convPwd);
  ResultSet rs = pstmt.executeQuery();
  if (rs.next()) {
   user.setId(rs.getInt("user_id"));
   user.setName(name);
   user.setPwd(pwd);
   rs.close();
   pstmt.close();
  } else {
   user.setId(0);
   user.setName("");
   user.setPwd("");
   rs.close();
   pstmt.close();
  }
  return user;
}

Al metodo passo due String.

Mattepuffo's logo
Creare grafici in JSP e Servlet

Creare grafici in JSP e Servlet

Ho già parlato di come creare grafici in Java usando la libreria JFreeChart.

In quel caso il grafico si visualizzava in un JPanel.

Invece adesso vediamo come usare la stessa libreria per creare grafici all'interno di una JSP e usando le Servlet.

Scaricate la libreria da qua; ricordatevi che dovete scaricare anche JCommon (dovrebbe stare all'interno dello stesso file zip).

Aggiungete entrambe le librerie al progetto.

Il grafico lo creeremo prendendo i dati da db.

Quindi abbiamo bisogno di una connessione.

Poi servono una Servlet e una JSP.

Salto la parte della connessione perchè ne ho parlato varie volte.

Create una Servlet e aggiungetela al file web.xml:

<servlet>
  <servlet-name>ServletGraph</servlet-name>
  <servlet-class>com_mattepuffo_book.ServletGraph</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>ServletGraph</servlet-name>
   <url-pattern>/ServletGraph</url-pattern>
</servlet-mapping>