Ciao provo ad aiutarti.Per fare quello che chiedi esiste la tecnologia ajax utilizzata insieme a tecnologie J2EE (servlet,jsp...). Grazie ad ajax non abbiamo bisogno di ricaricare tutta una pagina html ma possiamo aggiornare solo una parte che ci interessa.
Ad esempio una possibile soluzione è quella che ti posto qui. Una pagina jsp che utilizza chiamate ajax verso la servlet responsabile del calcolo del fattoriale, questa servlet però fa un calcolo parziale, in sostanza attraverso ajax facciamo tante request get verso la servlet quanti sono i passi del calcolo del fattoriale di un dato numero, il risultato parziale viene restituito dalla servlet ad ogni request e memorizzato in sessione di volta in volta per poter essere recuperato negli step successivi. Ho utilizzato ajax attraverso la libreria javascript JQuery scaricabile all'url
http://code.jquery.com/jquery-1.4.4.min.j
Per poter ottenere una cadenza temporale e vederne l'effetto sulla pagina, ho fatto in modo di addormentare il thread della servlet di 2 secondi prima che invii la risposta http.Il risultato parziale restituito dalla servlet viene recuperato nel parametro
data della funzione javascript ed inserito nell'input text con id output.
Qui di segutio la pagina jsp (Fattoriale.jsp), nella tua web application java, fai attenzione a dove poni il file jquery-1.4.4.min.js perchè deve essere importato :
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
<script type="text/javascript" src="${pageContext.request.contextPath}/script/jquery-1.4.2.min.js"></script>
</head>
<body>
<h3>Calcolo fattoriale</h3>
<label>Fattoriale di:</label><br/>
<input value="" id="input" type="text" /><br/>
<label>Risultato</label><br/>
<input value="" id="output" type="text" readonly="readonly" />
<input type="button" onclick="fattoriale();" value="Start" id="button">
<script>
function fattoriale(){
var i=0;
document.getElementById("button").value='Calcolo in corso';
document.getElementById("button").disabled=true;
for (i=1;i<=document.getElementById("input").value;i++){
$.ajax({ url: "${pageContext.request.contextPath}/Fattoriale?step="+i, context: document.body,async:false, success: function(data){
document.getElementById("output").value =data;
}});
}
$.ajax({ url: "${pageContext.request.contextPath}/Fattoriale?finish=true", context: document.body,async:false, success: function(data){
}});
alert('Calcolo terminato');
document.getElementById("button").value='Start';
document.getElementById("button").disabled=false;
}
</script>
</body>
</html>
La servlet :
package demo;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class Fattoriale
*/
public class Fattoriale extends HttpServlet {
private static final long serialVersionUID = 1L;
public Fattoriale() {
super();
// TODO Auto-generated constructor stub
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
if (request.getParameter("finish") != null) {
session.removeAttribute("fatt");
return;
}
String step = request.getParameter("step");
Long fatt = (Long) session.getAttribute("fatt");
if (fatt == null) {
fatt = (long) 1;
} else {
fatt = fatt * Long.valueOf(step);
}
session.setAttribute("fatt", fatt);
PrintWriter out = response.getWriter();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
out.print(fatt);
}
}