首页 > 编程语言 >Ajax + java Servlet 制作Web进度条

Ajax + java Servlet 制作Web进度条

时间:2023-11-02 11:32:40浏览次数:47  
标签:case Web java 进度条 proportion break XMLHttpRequest servlet xmlHttp

Ajax + java Servlet 制作Web进度条_java

 

运行效果图

 

Ajax + java Servlet 制作Web进度条_java_02

 

index2.jsp

 

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <script type="text/javascript" language="javaScript">
      var bgcolor = '#0081C2'; //全局变量,用于设置进度条的背景色  
      var number; //全局变量,用于记录当前span序号
      var clear = "   "; //全局变量,记录清空时的内容
      var xmlHttp = false; //全局变量,用于记录XMLHttpRequest对象
      function createXMLHttpRequest() { //创建XMLHttpRequest对象的方法
        if(window.ActiveXObject) { //Inetrnet Explorer时,创建XMLHttpRequest对象的方法
          try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
          } catch(e) {
            try {
              xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
               //旧版本的Inetrnet Explorer,创建XMLHttpRequest对象
            } catch(e) {
              window.alert("创建XMLHttpRequest对象错误"+e);
            }
          }
        } else if(window.XMLHttpRequest) { //mozilla时,创建XMLHttpRequest对象的方法
          xmlHttp = new XMLHttpRequest();
        }
        if(!(xmlHttp)) { //未成功创建XMLHttpRequest对象
            window.alert("创建XMLHttpRequest对象异常!");
        }
      }

      //启动进度条的方法
      function startRun() {
        createXMLHttpRequest(); //创建XMLHttpRequest对象
        clearBar(); //执行请求前先清除进度条
         document.getElementById("result").innerHTML = "Running";
        xmlHttp.onreadystatechange = callBack;
        //指定onreadystatechange属性值,用于指定状态正常时的处理函数
        xmlHttp.open("GET", "/ajax_servlet_1/ProcessServlet2?flag=start", true);
       
        xmlHttp.send(null);
      }

      //开始进行进度条显示的处理函数
      function callBack() {
          //window.alert("callBack()");
        if(xmlHttp.readyState == 4) {
           if(xmlHttp.status == 200) { //status状态正常时
             setTimeout("aginRun()",1000);
            //每隔1000毫秒(1秒)执行一次“aginRun()”函数
           }
        }
      }

      //清除用于显示进度条的span的内容
      function clearBar() {
        for (var i=0;i<10;i++) { //根据span元素的id,分别清楚其显示内容
          var sp = document.getElementById("sp" + i);
          sp.innerHTML = clear; //首先清空span元素的内容
          sp.style.backgroundColor = "white"; //设置span元素的背景色
        }
      }
      //设置用于显示进度条的span元素的显示内容
      function aginRun() {
        createXMLHttpRequest(); //创建XMLHttpRequest对象
        xmlHttp.onreadystatechange = aginCallBack;
        //指定状态正常时的处理函数为“aginCallBack”
        document.getElementById("run").disabled=true; //设置按钮不可用
        xmlHttp.open("GET", "/ajax_servlet_1/ProcessServlet2?flag=run", true);
        //window.alert(" " + number);
        xmlHttp.send(null);
      }

      //进度条执行时的函数
      function aginCallBack() {
        if(xmlHttp.readyState==4) {
          if(xmlHttp.status==200) {
            var percent =
            xmlHttp.responseXML.getElementsByTagName("percent")[0].firstChild.data;
           //记录当前完成比例
            var index = parseResult(percent); //解析结果集
            var nextCell = 1;
            for (var i=0; i<index; i++) { //遍历span元素集合,设置其内容(颜色与文字)
              var sp = document.getElementById("sp"+i);
            //根据每个span元素的id获取span对象
              sp.innerHTML= clear; //清空span元素内容
              sp.style.backgroundColor = bgcolor; //设置span元素的内容
              nextCell = i+1;
              if(nextCell>=index && nextCell<10) { //显示当前处理进度的百分比
                document.getElementById("sp"+nextCell).innerHTML=percent+"%";
              }
            }
            if(index<10) { //索引小于10,设置setTimeout方法
               setTimeout("aginRun()",1000);
            } else { //索引大于10,设置进度条成功完成的页面效果
               document.getElementById("result").innerHTML = "OK!";
               document.getElementById("run").disabled = false;
            }
          }
        }
      }

      //解析结果集
      function parseResult(result) {
        if(result.length<1) {
          return 1;
        } else if(result.length==2) {
          return result.substring(0,1);
        } else {
          return 10;
        }
      }
    </script>
    <title>Ajax进度条</title>
  </head>
  <body>
   <table align="center">
            <tr>
              <td>Ajax进度条示例   <input type="button" value="开始" id="run" onclick="startRun();"/></td>
            </tr>
            <tr>
              <td>
              <div id="processBar" style="padding:1px;border:solid black 1px;">
               <span id="sp0">   </span>
               <span id="sp1">   </span>
               <span id="sp2">   </span>
               <span id="sp3">   </span>
               <span id="sp4">   </span>
               <span id="sp5">   </span>
               <span id="sp6">   </span>
               <span id="sp7">   </span>
               <span id="sp8">   </span>
               <span id="sp9">   </span>
              </div>
              </td>
            </tr>
            <tr><td align="center" id="result"></td> </tr>
    </table>
  </body>
</html>

 

ProcessServlet2.java

 

 

package ajax_servlet_1;

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;

// 

public class ProcessServlet2 extends HttpServlet {
    private static final long serialVersionUID = 5280356329609002908L;
    
    private static final String CONTENT_TYPE = "text/xml; charset=UTF-8";
//设置返回响应的ContentType
    private int count = 1;// 全局变量计数器
    /**
     *当前Servlet对象构造方法
     */
    public ProcessServlet2() {
        super();
    }
    /**
     *当前Servlet销毁时的操作。<br>
     */
    public void destroy() {
        super.destroy();
    }
    /**
     *当前Servlet的doGet方法。<br>
     *
     *当客户端表单的“method”类型为“get”时,调用此方法
     *
     * @param request客户端请求对象
     * @param response 服务器响应对象
     * @throws ServletException 发生ServeltException时抛出
     * @throws IOException发生IOException时抛出
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("*********************doGet()**********");
        response.setContentType(CONTENT_TYPE); //设置服务器响应类型
        response.setHeader("Cache-Control","no-cache"); //页面不记录缓存
        String flag = request.getParameter("flag"); //操作类型
        StringBuffer xml=
//            new StringBuffer("<?xml version=\"1.0\" encoding=\"UTF-8\"?><items>");
            new StringBuffer("<items>");
        //记录返回的xml串
        if("start".equals(flag)) { //第一次创建
//            xml.append("<count>1</count>");
            count = 1;
        } else {
            String proportion = "";
            try
            { 
                
                switch(count) { //根据计数器的值,设置显示当前进度的百分比
                  case 1:
                      proportion="10"; 
                      break;
                  case 2:
                      proportion="20";  
                      break;
                  case 3:
                      proportion="30"; 
                      break;
                  case 4:
                      proportion="40"; 
                      break;
                  case 5:
                      proportion="50"; 
                      break;
                  case 6:
                      proportion="60"; 
                      break;
                  case 7:
                      proportion="70"; 
                      break;
                  case 8:
                      proportion="80"; 
                      break;
                  case 9:
                      proportion="90"; 
                      break;
                  case 10:
                      proportion="100"; 
                      break;
                }
                
            }
            catch(InterruptedException e)
            { 
                e.printStackTrace(); 
            } 
            count++;
            xml.append("<percent>").append(proportion).append("</percent>");
        }
        xml.append("</items>");
        PrintWriter out = response.getWriter();
        out.println(xml.toString()); //返回生成的XML串
        out.flush(); //输出流刷新
        out.close(); //关闭输出流
        System.out.println("*********** " + xml.toString());
    }

    /**
     * 初始化servlet. <br>
     * @throws ServletException 发生ServletExcpetio异常时抛出
     */
    public void init() throws ServletException {
    }
}

 

web.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <servlet-name>ProcessServlet</servlet-name>
    <servlet-class>ajax_servlet_1.ProcessServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ProcessServlet</servlet-name>
    <url-pattern>/ProcessServlet</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>ProcessServlet2</servlet-name>
    <servlet-class>ajax_servlet_1.ProcessServlet2</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ProcessServlet2</servlet-name>
    <url-pattern>/ProcessServlet2</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index2.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

 

 

========================================================================================

Ajax + java Servlet 制作Web进度条_进度条_03

 

========================================================================================

Ajax + java Servlet 制作Web进度条_xml_04

  jqueryProgressBar(jb51.net)

 ========================================================================================

 视频讲解java servlet ajax 进度条

https://www.iqiyi.com/w_19rs93z9rx.html

 ========================================================================================

 



标签:case,Web,java,进度条,proportion,break,XMLHttpRequest,servlet,xmlHttp
From: https://blog.51cto.com/emanlee/8143307

相关文章

  • JavaScript操作checkbox的方式
    JavaScript操作checkbox的方式和操作radio的方式相似,都是利用元素项的checked属性来完成。先获取checkbox元素集合,遍历集合,对集合中的每一项做操作。 <body> <p> <labelfor="hobby">Hobby: <inputtype="checkbox"name="hobby"value="reading"/>rea......
  • JavaScript 保存文件
       <scriptsrc="http://cdn.jsdelivr.net/g/filesaver.js"></script><script>functionSaveAsFile(t,f,m){try{varb=newBlob([t],{type:m});saveAs(b,f);}catch(......
  • java字符串多行写法
    有一个很长的字符串,想分成多行书写,主要为了美观。 VB代码中可以将一个很长的字符串分成多行书写,例如:Stringstr="adfasdfasdfas\asdfasdfasdfasdf\asdfasdf" Java没有相似的处理方式。 变通处理方式:Strings="Itwasthebestoftimes,it......
  • JAVA语言基础
    Java是一种高级编程语言,最初由SunMicrosystems(后被Oracle收购)于1995年发布。它被广泛用于开发各种类型的应用程序,从桌面应用程序到移动应用程序和大型企业级应用程序。以下是Java语言的一些基础知识:1.跨平台性:Java以"WriteOnce,RunAnywhere"(一次编写,到处运行)为特点。这是因为......
  • javap - 查阅 Java 字节码
    javap命令可以用来查阅字节码文件,可以将指定的字节码文件反编译,反解析出当前类对应基本信息、常量池(Constantpool)、字段区域、方法区(Code[JVM指令集])、异常表(Exceptiontable)、本地变量表(LocalVariableTable)、行数表(LineNumberTable)和字节码操作数栈的映射表(StackMapTable)等信息......
  • java的一些基础知识
    Java标识符:Java标识符是用来标识Java中的变量、方法、类等名称的。Java标识符的命名规则如下:1.标识符只能由数字、字母、下划线和美元符号组成。2.第一个字符必须是字母、下划线或美元符号。3.标识符的长度没有限制。4.标识符是区分大小写的。Java运算符:Java运算符是用来......
  • 使用Web方式管理你的Linux、容器和KVM
    yum安装部署yuminstall-ycockpitcockpit-storagedcockpit-dockercockpit-machines启动 默认9090端口。访问输入服务器账号密码即可systemctlstartcockpit.service ......
  • java语言基础
    1.标识符在Java中,标识符是用于命名变量、方法、类和其他各种元素的名称。标识符的命名规则包括:可以包含字母、数字、下划线和美元符号。必须以字母、下划线或美元符号开头。大小写敏感。不能使用Java的保留字(例如:public、class、static等)作为标识符。2.运算符Java提供了丰富的......
  • java语言基础数组,方法,类相关知识点的梳理总结
     Java是一种强大的面向对象编程语言,具有丰富的语法和功能。以下是Java语言的一些基础知识点的总结:数组(Arrays):数组是一种用于存储相同数据类型元素的数据结构。声明数组:int[]numbers=newint[5];,这创建了一个包含5个整数的数组。访问数组元素:intfirstNumber=......
  • 从零开发基于ASM字节码的Java代码混淆插件XHood
    项目背景因在公司负责基础框架的开发设计,所以针对框架源代码的保护工作比较重视,之前也加入了一系列保护措施例如自定义classloader加密保护,授权license保护等,但都是防君子不防小人,安全等级还比较低经过调研各类加密混淆措施后,决定自研混淆插件,自主可控,能够贴合实际情况进行定制......