Реализовать отображение индикатора выполнения без обновления страницы на веб-странице не очень сложно, но если индикатор выполнения может точно отражать текущую транзакцию или ход выполнения сложной логики, то это непростая задача. Технология AJAX популярна, поэтому автор этой статьи пытается использовать AJAX для реализации точного индикатора выполнения веб-страницы для привлечения читателей.
Прежде всего, вам следует подумать о проблеме. Если сложные транзакции или бизнес-логика не выполняются в потоковом режиме, невозможно пропустить сложные транзакции для обработки отображения прогресса при работе в JAVA. Поэтому для нас это естественно. подумать об использовании многопоточности для выполнения сложных транзакций или бизнес-логики.
Если подумать над другим вопросом, обработка транзакций должна требовать ряда сведений о параметрах на веб-странице, так как получить эти параметры, кажется, легко придумать, просто передать HttpServletRequest.
Чтобы использовать общий индикатор выполнения, вся сложная обработка транзакций должна реализовывать один и тот же интерфейс или абстрактный класс, который я использовал здесь, следующим образом:
общедоступный интерфейс IprogressBar {
public void Execute(HttpServletRequest req,String pbid);//Выполнение сложных транзакций
}
Используйте абстрактный класс для реализации многопоточности следующим образом:
публичный абстрактный класс AbstractProgressBar расширяет TimerTask реализует IprogressBar {
частный запрос HttpServletRequest;
частная строка pbid;
общественный AbstractProgressBar(){
}
//Подклассы должны переопределить эту функцию
public Abstract void Execute (HttpServletRequest req, String pbid);
общественный недействительный запуск () {
выполнить (запрос, Pbid);
}
общественный недействительный setRequest (HttpServletRequest req) {
this.request=req;
}
общественный недействительный setPbid (String pbid) {
this.pbid=pbid;
}
}
Неудобно предоставлять код для конкретного проекта. Здесь я написал еще один тестовый класс, который выполняет сложную обработку транзакций следующим образом:
публичный класс TestPB расширяет AbstractProgressBar{
public void выполнить (HttpServletRequest req, String pbid) {
String sql="вставить в temp_table(idx)values(?)";
int pid=Integer.parseInt(pbid);
ProgressBar pb = новый ProgressBar (pid, 300,0,1);
//Имитация крупных транзакций
for(int i=0;i<300;i++){
DbUtils.executeUpdate(sql,new Object[]{new Integer(i)});
//Контролируем прогресс
пб.stepIt();
}
}
}
Затем используйте технологию AJAX для реализации индикатора выполнения веб-страницы без обновления. Код выглядит следующим образом:
<%@ page contentType="text/html;charset=UTF-8"%>