java web 服务器端执行的进度条

Python010

java web 服务器端执行的进度条,第1张

开始页面:start.jsp

<%@ page contentType="text/htmlcharset=GBK" %>

<% session.removeAttribute("task")%>

<jsp:useBean id="task" scope="session" class="progress.TaskBean"/>

<% task.setRunning(true)%>

<% new Thread(task).start()%>

<jsp:forward page="status.jsp"/>

状态页面:status.jsp

<%@ page contentType="text/htmlcharset=GBK" %>

<jsp:useBean id="task" scope="session" class="progress.TaskBean"/>

<HTML>

<HEAD>

<TITLE>JSP进度</TITLE>

<% if (task.isRunning()) { %>

<script type="" LANGUAGE="JavaScript">

setTimeout("location='status.jsp'", 1000)

</script>

<% } %>

</HEAD>

<bODY bgcolor="">

<H1 ALIGN="CENTER">JSP进度条</H1>

<H2 ALIGN="CENTER">

结果: <%= task.getResult() %><BR>

<% int percent = task.getPercent()%>

<%= percent %>%

</H2>

<TABLE WIDTH="60%" ALIGN="CENTER"

CELLPADDING=0 CELLSPACING=2>

<TR>

<% for (int i = 10i <= percenti += 10) { %>

<TD WIDTH="10%" height="10" BGCOLOR="red"></TD>

<% } %>

<% for (int i = 100i >percenti -= 10) { %>

<TD WIDTH="10%"></TD>

<% } %>

</TR>

</TABLE>

<TABLE WIDTH="100%" BORDER=0 CELLPADDING=0 CELLSPACING=0>

<TR>

<TD ALIGN="CENTER">

<% if (task.isRunning()) { %>

正在执行

<% } else { %>

<% if (task.isCompleted()) { %>

完成

<% } else if (!task.isStarted()) { %>

尚未开始

<% } else { %>

已停止

<% } %>

<% } %>

</TD>

</TR>

<TR>

<TD ALIGN="CENTER">

<BR>

<% if (task.isRunning()) { %>

<FORM METHOD="GET" ACTION="stop.jsp">

<INPUT TYPE="SUBMIT" ="停止">

</FORM>

<% } else { %>

<FORM METHOD="GET" ACTION="start.jsp">

<INPUT TYPE="SUBMIT" ="开始">

</FORM>

<% } %>

</TD>

</TR>

</TABLE>

</BODY></HTML>

停止页面:stop.jsp

<%@ page contentType="text/htmlcharset=GBK" %>

<jsp:useBean id="task" scope="session" class="progress.TaskBean"/>

<% task.setRunning(false)%>

<jsp:forward page="status.jsp"/>

业务逻辑bean:TaskBean.java

package progress

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

}

protected void work() {

try {

Thread.sleep(sleep)

counter++

sum += counter

}

catch (InterruptedException e) {

setRunning(false)

}

}

public synchronized int getPercent() {

return counter

}

public synchronized boolean isStarted() {

return started

}

public synchronized boolean isCompleted() {

return counter == 100

}

public synchronized boolean isRunning() {

return running

}

public synchronized void setRunning(boolean running) {

this.running = running

if (running) {

started = true

}

}

public synchronized Object getResult() {

if (isCompleted()) {

return new Integer(sum)

}

else {

return null

}

}

public void run() {

try {

setRunning(true)

while (isRunning() &&!isCompleted()) {

work()

}

}

finally {

setRunning(false)

}

}

}

两部分:

POI解析Excel文件是否提供接口可以取得完成的进度(百分数),没有的话也可以弄个假的,处理中每N秒+1%,结束时直接设置为100%,N根据实际处理速度调整,免得最后超过100%...

页面有很多进度条实现,百度一下就有,需要传入进度数作为参数,来展现,自己百度一下:jsProgressBarHandler (Dynamic Javascript Progress。第一个就是。