Es ist nicht sehr mühsam, die Anzeige des Fortschrittsbalkens ohne Seitenaktualisierung auf der Webseite zu realisieren. Wenn der Fortschrittsbalken jedoch die aktuelle Transaktion oder den Ausführungsfortschritt komplexer Logik genau widerspiegeln kann, ist dies keine leichte Aufgabe AJAX-Technologie ist beliebt, daher versucht der Autor dieses Artikels, AJAX zu verwenden, um den genauen Fortschrittsbalken der Webseite zu realisieren und so Leser anzulocken.
Zunächst sollten Sie über ein Problem nachdenken, wenn komplexe Transaktionen oder Geschäftslogik nicht im Thread-Modus ausgeführt werden. Daher ist es für uns selbstverständlich, die Fortschrittsanzeige für komplexe Transaktionen zu überspringen Denken Sie darüber nach, Multithreading für komplexe Transaktionen oder Geschäftslogiken zu verwenden.
Wenn ich über eine andere Frage nachdenke, sollte die Transaktionsverarbeitung eine Reihe von Parameterinformationen auf der Webseite erfordern. Wie erhält man diese Parameter? Dies scheint einfach vorstellbar zu sein. Übergeben Sie einfach eine HttpServletRequest.
Um den Fortschrittsbalken zu teilen, sollte die gesamte komplexe Transaktionsverarbeitung dieselbe Schnittstelle oder abstrakte Klasse implementieren, die ich hier verwendet habe, wie folgt:
öffentliche Schnittstelle IprogressBar {
public voidexecute(HttpServletRequest req,String pbid);//Führen Sie komplexe Transaktionen aus
}
Verwenden Sie eine abstrakte Klasse, um Multithreading wie folgt zu implementieren:
öffentliche abstrakte Klasse AbstractProgressBar erweitert TimerTask implementiert IprogressBar {
private HttpServletRequest-Anfrage;
privater String pbid;
public AbstractProgressBar(){
}
//Unterklassen müssen diese Funktion überschreiben
public abstract voidexecute(HttpServletRequest req, String pbid);
public void run() {
ausführen(Anfrage,pbid);
}
public void setRequest(HttpServletRequest req){
this.request=req;
}
public void setPbid(String pbid){
this.pbid=pbid;
}
}
Es ist unpraktisch, den Code für ein bestimmtes Projekt bereitzustellen. Hier habe ich eine weitere Testklasse geschrieben, bei der es sich um eine Klasse handelt, die die Verarbeitung komplexer Transaktionen durchführt:
Die öffentliche Klasse TestPB erweitert AbstractProgressBar{
public voidexecute(HttpServletRequest req, String pbid) {
String sql="insert into temp_table(idx)values(?)";
int pid=Integer.parseInt(pbid);
ProgressBar pb=new ProgressBar(pid,300,0,1);
//Große Transaktionen simulieren
for(int i=0;i<300;i++){
DbUtils.executeUpdate(sql,new Object[]{new Integer(i)});
//Fortschritt kontrollieren
pb.stepIt();
}
}
}
Verwenden Sie dann die AJAX-Technologie, um den Fortschrittsbalken der Webseite ohne Aktualisierung zu realisieren. Der Code lautet wie folgt:
<%@ page contentType="text/html;charset=UTF-8"%>