No es muy problemático realizar la visualización de la barra de progreso sin actualizar la página en la página web, pero si la barra de progreso puede reflejar con precisión la transacción actual o el progreso de la ejecución de una lógica compleja, entonces no es una tarea fácil. Tecnología AJAX Popular, por lo que el autor de este artículo intenta utilizar AJAX para lograr la barra de progreso precisa de la página web para atraer lectores.
En primer lugar, debe pensar en un problema: si las transacciones complejas o la lógica empresarial no se ejecutan en forma de subprocesos, es imposible omitir las transacciones complejas para procesar la visualización del progreso cuando se ejecuta en JAVA. Pensar en el uso de subprocesos múltiples para transacciones complejas o lograr lógica de negocios.
Pensando en otra pregunta, el procesamiento de transacciones debería requerir una serie de información de parámetros en la página web, entonces, ¿cómo obtener estos parámetros? Parece fácil de pensar, simplemente pase una HttpServletRequest.
Para compartir la barra de progreso, todo el procesamiento de transacciones complejas debe implementar la misma interfaz o clase abstracta que utilicé aquí, de la siguiente manera:
interfaz pública IprogressBar {
public void ejecutar(HttpServletRequest req,String pbid);//Ejecutar transacciones complejas
}
Utilice una clase abstracta para implementar subprocesos múltiples, de la siguiente manera:
la clase abstracta pública AbstractProgressBar extiende TimerTask implementa IprogressBar {
solicitud HttpServletRequest privada;
cadena privada pbid;
Barra de progreso abstracta pública(){
}
//Las subclases deben anular esta función
ejecución nula abstracta pública (solicitud HttpServletRequest, cadena pbid);
ejecución pública vacía() {
ejecutar(solicitud,pbid);
}
setRequest público vacío (solicitud HttpServletRequest) {
this.request=req;
}
conjunto vacío públicoPbid(String pbid){
this.pbid=pbid;
}
}
Es inconveniente proporcionar el código para proyectos específicos. Aquí escribí otra clase de prueba, que es una clase que realiza procesamiento de transacciones complejas, de la siguiente manera:
la clase pública TestPB extiende AbstractProgressBar{
ejecución nula pública (solicitud HttpServletRequest, cadena pbid) {
String sql="insertar en temp_table(idx)values(?)";
int pid=Integer.parseInt(pbid);
Barra de Progreso pb=nueva Barra de Progreso(pid,300,0,1);
// Simular grandes transacciones
para(int i=0;i<300;i++){
DbUtils.executeUpdate(sql,nuevo objeto[]{nuevo entero(i)});
//Controlar el progreso
pb.stepIt();
}
}
}
Luego use la tecnología AJAX para implementar la barra de progreso de la página web que no se actualiza. El código es el siguiente:
<%@ página contentType="text/html;charset=UTF-8"%>