Jadual Kandungan
JSP进度条
Rumah pangkalan data tutorial mysql JSP编程进度条设计实例_MySQL

JSP编程进度条设计实例_MySQL

Jun 01, 2016 pm 02:11 PM
jsp Tugasan Contoh melaksanakan benang pengaturcaraan reka bentuk jadual muka surat

  
许多Web应用、企业应用涉及到长时间的操作,例如复杂的数据库查询或繁重的XML处理等,虽然这些任务主要由数据库系统或中间件完成,但任务执行的结果仍旧要借助JSP才能发送给用户。本文介绍了一种通过改进前端表现层来改善用户感觉、减轻服务器负载的办法。 当JSP调用一个必须长时间运行的操作,且该操作的结果不能(在服务器端)缓冲,用户每次请求该页面时都必须长时间等待。很多时候,用户会失去耐心,接着尝试点击浏览器的刷新按钮,最终失望地离开。 本文介绍的技术是把繁重的计算任务分离开来,由一个独立的线程运行,从而解决上述问题。当用户调用JSP页面时,JSP页面会立即返回,并提示用户任务已经启动且正在执行;JSP页面自动刷新自己,报告在独立线程中运行的繁重计算任务的当前进度,直至任务完成。
一、模拟任务
  首先我们设计一个TaskBean类,它实现java.lang.Runnable接口,其run()方法在一个由JSP页面(start.jsp)启动的独立线程中运行。终止run()方法执行由另一个JSP页面stop.jsp负责。TaskBean类还实现了java.io.Serializable接口,这样JSP页面就可以将它作为JavaBean调用:
  package test.barBean;
import java.io.Serializable;
  public class TaskBean implements Runnable, Serializable {
    private int counter;
    private int sum;
    private boolean started;
    private boolean running;
    private int sleep;
      public TaskBean() {
        counter = 0;
        sum     = 0;
        started = false;
        running = false;
        sleep   = 100;
    }
}
  TaskBean包含的“繁重任务”是计算1+2+3…+100的值,不过它不通过100*(100+1)/2=5050公式计算,而是由run()方法调用work()方法100次完成计算。work()方法的代码如下所示,其中调用Thread.sleep()是为了确保任务总耗时约10秒。
  protected void work() {
    try {
        Thread.sleep(sleep);
        counter++;
        sum += counter;
    } catch (InterruptedException e) {
        setRunning(false);
    }
}
 
status.jsp页面通过调用下面的getPercent()方法获得任务的完成状况:
  public synchronized int getPercent() {
    return counter;
} 如果任务已经启动,isStarted()方法将返回true:
public synchronized boolean isStarted() {
    return started;
}
 
  如果任务已经完成,isCompleted()方法将返回true:
  public synchronized boolean isCompleted() {
    return counter == 100;
}
 
  如果任务正在运行,isRunning()方法将返回true:
  public synchronized boolean isRunning() {
    return running;
}
 
SetRunning()方法由start.jsp或stop.jsp调用,当running参数是true时。SetRunning()方法还要将任务标记为“已经启动”。调用setRunning(false)表示要求run()方法停止执行。
  public synchronized void setRunning(boolean running) {
    this.running = running;
    if (running)
        started  = true;
}
 
任务执行完毕后,调用getResult()方法返回计算结果;如果任务尚未执行完毕,它返回null:
  public synchronized Object getResult() {
    if (isCompleted())
        return new Integer(sum);
    else
        return null;
}
 
当running标记为true、completed标记为false时,run()方法调用work()。在实际应用中,run()方法也许要执行复杂的SQL查询、解析大型XML文档,或者调用消耗大量CPU时间的EJB方法。注意“繁重的任务”可能要在远程服务器上执行。报告结果的JSP页面有两种选择:或者等待任务结束,或者使用一个进度条。
  public void run() {
    try {
        setRunning(true);
        while (isRunning() && !isCompleted())
            work();
    } finally {
        setRunning(false);
    }
} 二、启动任务

  start.jsp是web.xml部署描述符中声明的欢迎页面,web.xml的内容是:
 
  br>    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
 
   
        start.jsp
   


  start.jsp启动一个专用的线程来运行“繁重的任务”,然后把HTTP请求传递给status.jsp。
  start.jsp页面利用标记创建一个TaskBean的实例,将scope属性定义为session使得对于来自同一浏览器的HTTP请求,其他页面也能提取到同一个Bean对象。start.jsp通过调用session.removeAttribute("task")确保创建了一个新的Bean对象,而不是提取一个旧对象(例如,同一个用户会话中更早的JSP页面所创建的Bean对象)。
  下面是start.jsp页面的代码清单:
 
      class="test.barBean.TaskBean"/>
 


 
start.jsp创建并设置好TaskBean对象之后,接着创建一个Thread,并将Bean对象作为一个Runnable实例传入。调用start()方法时新创建的线程将执行TaskBean对象的run()方法。
  现在有两个线程在并发执行:执行JSP页面的线程(称之为“JSP线程”),由JSP页面创建的线程(称之为“任务线程”)。接下来,start.jsp利用调用status.jsp,status.jsp显示出进度条以及任务的执行情况。注意status.jsp和start.jsp在同一个JSP线程中运行。
  start.jsp在创建线程之前就把TaskBean的running标记设置成了true,这样,即使当JSP线程已开始执行status.jsp而任务线程的run()方法尚未启动,也能够确保用户会得到“任务已开始运行”的状态报告。
  将running标记设置成true、启动任务线程这两行代码可以移入TaskBean构成一个新的方法,然后由JSP页面调用这个新方法。一般而言,JSP页面应当尽量少用Java代码,即我们应当尽可能地把Java代码放入Java类。不过本例中我们不遵从这一规则,把new Thread(task).start()直接放入start.jsp突出表明JSP线程创建并启动了任务线程。
  在JSP页面中操作多线程必须谨慎,注意JSP线程和其它线程实际上是并发执行的,就象在桌面应用程序中,我们用一个线程来处理GUI事件,另外再用一个或多个线程来处理后台任务。不过在JSP环境中,考虑到多个用户同时请求某一个页面的情况,同一个JSP页面可能会在多个线程中同时运行;另外,有时同一个用户可能会向同一个页面发出多个请求,虽然这些请求来自同一个用户,它们也会导致服务器同时运行一个JSP页面的多个线程。 三、任务进度
status.jsp页面利用一个HTML进度条向用户显示任务的执行情况。首先,status.jsp利用标记获得start.jsp页面创建的Bean对象:
      class="test.barBean.TaskBean"/>
  为了及时反映任务执行进度,status.jsp会自动刷新。JavaScript代码setTimeout("location='status.jsp'", 1000)将每隔1000毫秒刷新页面,重新请求status.jsp,不需要用户干预。
 
 
    JSP进度条
   
       
   

 
  进度条实际上是一个HTML表格,包含10个单元――即每个单元代表任务总体的10%进度。
 

JSP进度条


     


        结果:

       
        %
   


                  BORDER=1 CELLPADDING=0 CELLSPACING=2>
       
           
               
           
            percent; i -= 10) { %>
               
           
       
   
   

 
任务执行情况分下面几种状态:正在执行,已完成,尚未开始,已停止:
 
       
           
        页面底部提供了一个按钮,用户可以用它来停止或重新启动任务:
 
           
       
   

               
                    正在执行
               
                   
                        完成
                   
                        尚未开始
                   
                        已停止
                   
               
           

               

               
                   

                       
                   

               
                   

                       
                   

               
           


  只要不停止任务,约10秒后浏览器将显示出计算结果5050:
  四、停止任务
  stop.jsp页面把running标记设置成false,从而停止当前的计算任务:
      class="test.barBean.TaskBean"/>
 

 
注意最早的Java版本提供了Thread.stop方法,但JDK从1.2版开始已经不赞成使用Thread.stop方法,所以我们不能直接调用Thread.stop()。
  第一次运行本文程序的时候,你会看到任务的启动有点延迟;同样地,第一次点击“停止”按钮时也可以看到任务并没有立即停止运行(特别是如果机器配置较低的话,延迟的感觉更加明显),这些延迟都是由于编译JSP页面导致的。编译好JSP页面之后,应答速度就要快多了。
  五、实际应用
  进度条不仅使得用户界面更加友好,而且对服务器的性能也有好处,因为进度条会不断地告诉用户当前的执行进度,用户不会再频繁地停止并重新启动(刷新)当前的任务。另一方面,创建单独的线程来执行后台任务也会消耗不少资源,必要时可考虑通过一个线程池来实现Thread对象的重用。另外,频繁地刷新进度页面也增加了网络通信开销,所以务必保持进度页面简洁短小。
  在实际应用中,后台执行的繁重任务可能不允许停止,或者它不能提供详细的执行进度数据。例如,查找或更新关系数据库时,SQL命令执行期间不允许中途停止――不过如果用户表示他想要停止或中止任务,程序可以在SQL命令执行完毕后回退事务。
  解析XML文档的时候,我们没有办法获知已解析内容精确的百分比。如果用DOM解析XML文档,直到解析完成后才得到整个文档树;如果用SAX,虽然可以知道当前解析的内容,但通常不能确定还有多少内容需要解析。在这些场合,任务的执行进度只能靠估计得到。
  估计一个任务需要多少执行时间通常是很困难的,因为它涉及到许多因素,即使用实际测试的办法也无法得到可靠的结论,因为服务器的负载随时都在变化之中。一种简单的办法是测量任务每次执行所需时间,然后根据最后几次执行的平均时间估算。如果要提高估计时间的精确度,应当考虑实现一种针对应用特点的算法,综合考虑多种因素,例如要执行的SQL语句类型、要解析的XML模式的复杂程度,等等。
  结束语:本文例子显示出用JSP、Java、HTML和JavaScript构造进度条是相当容易的,真正困难的是如何将它用到实际应用之中,特别是获得后台任务的进度信息,但这个问题没有通用的答案,每一种后台执行的任务都有它自己的特点,必须按照具体情况具体分析。 (出处:PConline)

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Honor Magic V3 memperkenalkan teknologi perlindungan mata nyahfokus AI: berkesan mengurangkan perkembangan rabun Honor Magic V3 memperkenalkan teknologi perlindungan mata nyahfokus AI: berkesan mengurangkan perkembangan rabun Jul 18, 2024 am 09:27 AM

Menurut berita pada 12 Julai, siri Honor Magic V3 telah dikeluarkan secara rasmi hari ini, dilengkapi dengan skrin perlindungan mata Honor Vision Soothing Oasis yang baharu Walaupun skrin itu sendiri mempunyai spesifikasi tinggi dan kualiti tinggi, ia juga mempelopori pengenalan perlindungan mata aktif AI teknologi. Dilaporkan bahawa cara tradisional untuk mengurangkan rabun adalah "kaca mata rabun". Kuasa cermin mata rabun diagihkan secara sama rata untuk memastikan kawasan pusat penglihatan diimej pada retina, tetapi kawasan persisian digambarkan di belakang retina. Retina merasakan bahawa imej berada di belakang, menggalakkan arah paksi mata berkembang kemudian, dengan itu mendalamkan darjah. Pada masa ini, salah satu cara utama untuk mengurangkan perkembangan rabun adalah "kanta nyahfokus". Kawasan pusat mempunyai kuasa biasa, dan kawasan persisian diselaraskan melalui partition reka bentuk optik, supaya imej di kawasan persisian jatuh ke dalam. hadapan retina.

Pengaturcaraan Serentak C++: Bagaimana untuk mengelakkan kebuluran benang dan penyongsangan keutamaan? Pengaturcaraan Serentak C++: Bagaimana untuk mengelakkan kebuluran benang dan penyongsangan keutamaan? May 06, 2024 pm 05:27 PM

Untuk mengelakkan kebuluran benang, anda boleh menggunakan kunci yang adil untuk memastikan peruntukan sumber yang adil, atau menetapkan keutamaan benang. Untuk menyelesaikan penyongsangan keutamaan, anda boleh menggunakan warisan keutamaan, yang meningkatkan keutamaan utas yang memegang sumber buat sementara waktu atau menggunakan promosi kunci, yang meningkatkan keutamaan utas yang memerlukan sumber.

Pengaturcaraan Serentak C++: Bagaimana untuk melakukan penamatan dan pembatalan benang? Pengaturcaraan Serentak C++: Bagaimana untuk melakukan penamatan dan pembatalan benang? May 06, 2024 pm 02:12 PM

Mekanisme penamatan dan pembatalan utas dalam C++ termasuk: Penamatan utas: std::thread::join() menyekat utas semasa sehingga utas sasaran menyelesaikan pelaksanaan std::thread::detach() menanggalkan utas sasaran daripada pengurusan utas. Pembatalan utas: std::thread::request_termination() meminta utas sasaran untuk menamatkan pelaksanaan; benang. Dalam pertempuran sebenar, request_termination() membenarkan utas untuk menentukan masa penamatan, dan join() memastikan bahawa pada baris utama

Proses susun baru! Xiaomi MIX Fold 4 dilengkapi dengan bateri Jinshajiang 'berbentuk khas tiga dimensi' buat kali pertama Proses susun baru! Xiaomi MIX Fold 4 dilengkapi dengan bateri Jinshajiang 'berbentuk khas tiga dimensi' buat kali pertama Jul 20, 2024 am 03:20 AM

Menurut berita pada 19 Julai, Xiaomi MIX Fold 4, telefon lipat perdana pertama, dikeluarkan secara rasmi malam ini dan dilengkapi dengan "bateri berbentuk khas tiga dimensi" buat kali pertama. Menurut laporan, Xiaomi MIX Fold4 telah mencapai kejayaan besar dalam teknologi bateri dan mereka bentuk "bateri berbentuk khas tiga dimensi" yang inovatif khusus untuk skrin lipat. Peranti skrin lipat tradisional kebanyakannya menggunakan bateri persegi konvensional, yang mempunyai kecekapan penggunaan ruang yang rendah. Untuk menyelesaikan masalah ini, Xiaomi tidak menggunakan sel bateri penggulungan biasa, tetapi membangunkan proses laminasi baharu untuk mencipta bentuk bateri baharu, yang sangat meningkatkan penggunaan ruang. Inovasi Teknologi Bateri Untuk menyusun kepingan elektrod positif dan negatif secara bergilir-gilir dan memastikan pembenaman ion litium yang selamat, Xiaomi telah membangunkan mesin kimpalan ultrasonik dan mesin laminasi baharu untuk meningkatkan ketepatan kimpalan dan pemotongan.

Apple iPad Pro/Air 2024 tidak menyokong Apple Pencil generasi kedua: model baharu boleh dibeli jika perlu Apple iPad Pro/Air 2024 tidak menyokong Apple Pencil generasi kedua: model baharu boleh dibeli jika perlu May 08, 2024 pm 04:07 PM

Menurut berita pada 8 Mei, tablet iPad Pro/Air baharu Apple telah dikeluarkan Menurut laman web rasmi Apple, iPad Pro dan iPad Air baharu tidak lagi menyokong Apple Pencil generasi kedua yang dikeluarkan pada 2018, tetapi hanya menyokong Apple Pencil Pro. dan Pensil Apple (USB- C). Apple Pencil (USB-C) akan dikeluarkan pada November 2023. Stilus ini mengekalkan ketepatan tahap piksel, kependaman rendah dan ciri penderiaan sudut condong yang sama seperti Apple Pencil generasi pertama dan kedua, sambil menghapuskan fungsi dan kepekaan tekanan tidak menyokong pengecasan tanpa wayar. Harganya ialah 649 yuan. Dan ApplePe yang baru dikeluarkan

Telefon bimbit Honor X60i dijual bermula dari 1,399 yuan: skrin langsung OLED segiempat visual Telefon bimbit Honor X60i dijual bermula dari 1,399 yuan: skrin langsung OLED segiempat visual Jul 29, 2024 pm 08:25 PM

Menurut berita pada 29 Julai, telefon bimbit Honor X60i dijual secara rasmi hari ini, bermula pada 1,399 yuan. Dari segi reka bentuk, telefon bimbit Honor X60i menggunakan reka bentuk skrin lurus dengan lubang di tengah dan sempadan ultra-sempit yang hampir tidak terhad pada keempat-empat sisi, yang meluaskan bidang pandangan. Parameter Honor X60i Paparan: Paparan definisi tinggi 6.7 inci Bateri: Bateri berkapasiti besar 5000mAh Pemproses: Pemproses Dimensity 6080 (TSMC 6nm, 2x2.4G A76+6×2G A55) Sistem: Sistem MagicOS8.0 Ciri-ciri lain: peningkatan isyarat 5G , kapsul pintar, cap jari bawah skrin, dwi MIC, pengurangan hingar, Soal Jawab pengetahuan, keupayaan fotografi: sistem dwi kamera belakang: 50 juta piksel kamera utama, 2 juta piksel kanta tambahan, kanta selfie hadapan: 8 juta piksel, harga: 8GB

Telefon Vivo dengan isyarat paling kuat! vivo X100s dilengkapi dengan sistem penguatan isyarat universal: 21 antena, reka bentuk sekeliling 360° Telefon Vivo dengan isyarat paling kuat! vivo X100s dilengkapi dengan sistem penguatan isyarat universal: 21 antena, reka bentuk sekeliling 360° Jun 03, 2024 pm 08:41 PM

Menurut berita pada 13 Mei, vivoX100s telah dikeluarkan secara rasmi malam ini Selain imej yang sangat baik, telefon baharu ini juga menunjukkan prestasi yang sangat baik dari segi isyarat. Menurut pengenalan rasmi vivo, vivoX100s menggunakan sistem penguatan isyarat universal yang inovatif, yang dilengkapi dengan sehingga 21 antena. Reka bentuk ini telah dioptimumkan semula berdasarkan skrin langsung untuk mengimbangi banyak keperluan isyarat seperti 5G, 4G, Wi-Fi, GPS dan NFC. Ini menjadikan vivoX100s sebagai telefon mudah alih dengan keupayaan penerimaan isyarat terkuat dalam sejarah vivo. Telefon baharu ini juga menggunakan reka bentuk keliling 360° yang unik, dengan antena diedarkan di sekeliling badan. Reka bentuk ini bukan sahaja meningkatkan kekuatan isyarat, tetapi juga mengoptimumkan pelbagai postur pegangan harian untuk mengelakkan masalah yang disebabkan oleh kaedah pegangan yang tidak betul.

OnePlus Ace 3 Pro memperkenalkan sistem penyejukan Tiangong generasi kedua: grafit haba superkritikal OnePlus Ace 3 Pro memperkenalkan sistem penyejukan Tiangong generasi kedua: grafit haba superkritikal Jun 28, 2024 am 01:49 AM

Menurut berita pada 27 Jun, OnePlus Ace3Pro akan dikeluarkan secara rasmi malam ini Selain dilengkapi dengan teras perdana Snapdragon 8 generasi ketiga, telefon baharu itu juga berusaha keras dalam pelesapan haba. Menurut laporan, OnePlus Ace3 Pro memperkenalkan sistem penyejukan Tiangong generasi kedua untuk kali pertama Sistem ini dilengkapi dengan sink haba VC 9126mm² 10,000 Berbanding dengan generasi sebelumnya, kecekapan pelesapan haba telah meningkat sebanyak 36 yang menakjubkan %. Teknologi terobosan ini membolehkan telefon mudah alih menghilangkan haba dengan cepat apabila berjalan di bawah beban tinggi, memastikan prestasi telefon mudah alih yang stabil. Apa yang lebih menarik ialah OnePlus Ace3Pro menggunakan grafit terma superkritikal 2K buat kali pertama: kekonduksian termanya setinggi 2041W/(m·K), menduduki tempat pertama dalam industri. Kapasiti pelesapan haba meningkat sebanyak 70%, meningkatkan pelesapan haba telefon mudah alih dan mengekalkan suhu operasi yang stabil. bertaburan

See all articles