Ho cercato maggiori informazioni sul ciclo di vita di una servlet e ora ho le idee più chiare però ho ancora qualche dubbio circa quello che accade proprio a livello di IDE. Cerco di spiegarmi meglio.
Io ho capito che una volta avviata la servlet per prima cosa viene invocato il metodo init() (praticamente una sorta di metodo main() della servlet) che la inizializza, una volta inizializzata viene invocato il metodo service() che a sua volta richiama, in base alle esigenze, il metodo doGet() o il metodo doPost() ad esempio e per concludere avviene l'invocazione del metodo destroy().
Questo è il ciclo di vita di una servlet stando a quello che ho capito, il mio dubbio però riguarda proprio quello che accade nell'esempio che avevo fatto prima.
Inserisco le poche righe di codice così è più facile capire a cosa mi riferisco:
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<servlet>
<servlet-name>UnsafeServlet</servlet-name>
<servlet-class>UnsafeServlet</servlet-class>
<init-param>
<param-name>sleep</param-name>
<param-value>10000</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>UnsafeServlet</servlet-name>
<url-pattern>/UnsafeServlet</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
logon.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Una Applicazione Thread Unsafe</title>
</head>
<body>
<h1>Login</h1>
Inserire nei campi sottostanti la propria UserID e Password:
<form action="UnsafeServlet" method="POST">
<p><input type="text" name="userID" length="40" /></p>
<p><input type="password" name="password" length="40" /></p>
<p><input type="submit" value="Submit" /></p>
</form>
</body>
</html>
UnsafeServlet.java
package unsafeweb;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
public class UnsafeServlet extends javax.servlet.http.HttpServlet
implements javax.servlet.Servlet {
private String userID;
private String password;
public UnsafeServlet() {
super();
}
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String userID = request.getParameter("userID");
String password = request.getParameter("password");
this.userID = userID;
this.password = password;
try {
String sleeptime = getInitParameter("sleep");
int sleep = Integer.parseInt(sleeptime);
Thread.sleep(sleep);
} catch (Exception exc) {
log("", exc);
}
try {
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.println("<html><body>");
writer.println("<p><u>Valori delle variabili locali al metodo" + " doPost()</u> <br />");
writer.println("userID=" + userID + "<br/>");
writer.println("password=" + password + "</p>");
writer.println("<p><u>Valori degli attributi della Servlet</u><br />");
writer.println("userID=" + this.userID + "<br />");
writer.println("password=" + this.password + "</p>");
writer.println("</body></html>");
writer.close();
} catch (Exception exc) {
exc.printStackTrace();
}
}
}
In poche parole queste semplici righe di codice permettono di ottenere una pagina html dove poter inserire nome utente e password e una volta cliccato sul bottone, dopo 10 secondi, vengono restituiti i dati inseriti.
Premetto subito che non ho alcun dubbio sul codice ma non riesco a capire cosa accade nel momento in cui avvio il file "logon.html", ok parte GlassFish e deployato il progetto mi viene visualizzata la pagina dove inserire nome utente e password, una volta inseriti e cliccato sul bottone per inviarli in risposta al server mi viene visualizzato questo errore nel browser:
http://s21.postimg.org/8xfnd0hzb/Immagine.jp