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

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

开始页面:startjsp

<%@ page contentType="text/html; charset=GBK" %>

<% sessionremoveAttribute("task"); %>

<jsp:useBean id="task" scope="session" class="progressTaskBean"/>

<% tasksetRunning(true); %>

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

<jsp:forward page="statusjsp"/>

状态页面:statusjsp

<%@ page contentType="text/html; charset=GBK" %>

<jsp:useBean id="task" scope="session" class="progressTaskBean"/>

<HTML>

<HEAD>

<TITLE>JSP进度条</TITLE>

<% if (taskisRunning()) { %>

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

setTimeout("location='statusjsp'", 1000);

</script>

<% } %>

</HEAD>

<bODY bgcolor="">

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

<H2 ALIGN="CENTER">

结果: <%= taskgetResult() %><BR>

<% int percent = taskgetPercent(); %>

<%= percent %>%

</H2>

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

CELLPADDING=0 CELLSPACING=2>

<TR>

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

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

<% } %>

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

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

<% } %>

</TR>

</TABLE>

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

<TR>

<TD ALIGN="CENTER">

<% if (taskisRunning()) { %>

正在执行

<% } else { %>

<% if (taskisCompleted()) { %>

完成

<% } else if (!taskisStarted()) { %>

尚未开始

<% } else { %>

已停止

<% } %>

<% } %>

</TD>

</TR>

<TR>

<TD ALIGN="CENTER">

<BR>

<% if (taskisRunning()) { %>

<FORM METHOD="GET" ACTION="stopjsp">

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

</FORM>

<% } else { %>

<FORM METHOD="GET" ACTION="startjsp">

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

</FORM>

<% } %>

</TD>

</TR>

</TABLE>

</BODY></HTML>

停止页面:stopjsp

<%@ page contentType="text/html; charset=GBK" %>

<jsp:useBean id="task" scope="session" class="progressTaskBean"/>

<% tasksetRunning(false); %>

<jsp:forward page="statusjsp"/>

业务逻辑bean:TaskBeanjava

package progress;

import javaioSerializable;

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 {

Threadsleep(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) {

thisrunning = 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);

}

}

}

for (int i = 0; i < c; i++)

{

int indes=i;

pn=(index+1)100;

s[index] = TaskFactoryStartNew(() => checkstrs(pn));

}

加个临时变量就行,这是lambda表达式延迟执行的问题

工作:

1 job

2 task

3 work

4 construction

Relative explainations:

<working> <labor> <pursuit> <shebang> <stewardship> <yakka> <works> <Labour> <performance> <employment> <does> <dinkum> <wrought> <worked out section> <activity (coefficient)> <lookout>

Examples:

1 希望在新的工作岗位上,她的才干能够得到比以往更好的发挥。

It is hoped that in her new job her talents will be better utilised than before

2 我在一家非常富有创新精神的公司工作。

I worked in a very innovative company

3 她以高效率完成了那件工作。

She did the job with great despatch

4 我正在找兼职工作。

I'm looking for a part-time job

5 我在一家小公司工作。

I work in a small company

6 很遗憾,你没有得到那份工作。

I'm sorry that you didn't get the job

7 你做什么工作?

What's your job

8 我愿借此机会感谢每一位为这个项目辛勤工作的人。

I'd like to take this opportunity to thank everyone for their hard work on the project

青年工作

youth work

工作时间

working time

工作记忆

working memory

全力工作

working flat out

工作负荷

work load

轮班工作

work in [ by ] relays

业务工作

vocational work

紧张工作

tonic action

辛勤工作

toil at a task

义务工作

to work without recompense

通过查看JDK源码可以知道如下:

public

void

schedule(TimerTask

task,

long

delay)

{

if

(delay

<

0)

throw

new

IllegalArgumentException("Negative

delay");

sched(task,

SystemcurrentTimeMillis()+delay,

0);

}

实际上调用的是如下方法:

private

void

sched(TimerTask

task,

long

time,

long

period)

//task:安排的任务,the

scheduled

task;

//time:指定的时间去执行

at

the

specified

time

with

the

specified

period,

in

milliseconds

//period:如果period是正数,则会重复执行任务,如果是零则只执行任务一次

If

period

is

positive,

the

task

is

scheduled

for

repeated

execution;

zero,

the

task

is

scheduled

for

one-time

execution

因此可以分析到

中间书写的语句不会算在延迟时间中,程序的开始时刻就是执行到timerschedule(new

Task(),1000);//语句时,开始计时。而Timer

timer

=

new

Timer()

只是创建了一个Timer类对象。

只有程序执行到timerschedule(new

Task(),1000)时,才会调用

sched(task,

SystemcurrentTimeMillis()+delay,

0)方法,而这时该方法

才去执行SystemcurrentTimeMillis取得当前时间,并将该任务加到TaskQueue队列中

(自带任务队列),经过SystemcurrentTimeMillis+1000毫秒后根据指定状态执行指定任务

首先我们来看看如何使用ant脚本打出一个jar包 我们新建一个工程AntExportJar 在工程的目录下面新建一个buildxml,这个是ant脚本规定的一个入口脚本文件,文件名都是:buildxml [html] view plain copy

<xml version ="10" encoding ="UTF-8" >

<project name ="AntExportJar" basedir ="" default ="exportJar" >

<!--设置全局变量-->

<property name ="src" value ="src" />

<property name ="dist" value ="dist" />

<property name ="appname" value ="ant" />

<property name ="appversion" value ="10" />

<property name ="classesencode" value ="GBK" />

<property name ="lib" value ="libs" />

<property

name ="project-dir"

value ="C:\Users\i\workspace\AntExportJar" />

<property

name ="sdk-folder"

value ="C:\Users\i\AppData\Local\Android\sdk" />

<property

name ="platform-folder"

value ="${sdk-folder}\platforms\android-22" />

<property

name ="android-jar"

value ="${platform-folder}\androidjar" />

<property

name ="src"

value ="${project-dir}\src" />

<property

name ="bin"

value ="${project-dir}\bin" />

<property

name ="libs"

value ="${project-dir}\lib" />

<!--task-->

<target name ="init" >

<echo>

Initialize

</echo>

<delete dir ="${bin}" />

<mkdir dir ="${bin}" />

</target>

<target name ="buildFiles" depends ="init" >

<javac

bootclasspath ="${android-jar}"

compiler ="javac17"

target ="17"

destdir ="${bin}"

encoding ="GBK"

includeAntRuntime ="true"

listfiles ="true" >

<src path ="${project-dir}" />

<classpath>

<!--引用第三方jar包需要引用,用于辅助编译,并没有将jar打包进去。jar的打包在dex命令中。-->

<fileset dir ="${libs}" includes ="jar" />

</classpath>

</javac>

</target>

<!--导出jar文件-->

<target name ="exportJar" depends ="buildFiles" >

<delete dir ="${dist}" />

<!--Createthedistributiondirectory-->

<mkdir dir ="${dist}" />

<!--Puteverythingin${classes}intotheMyProject-${DSTAMP}jarfile-->

<jar jarfile ="${dist}/${appname}jar" basedir ="${bin}" >

<!--

<filesetdir="${libs}"includes="/jar"/>

-->

<zipfileset excludes ="META-INF/SF" src ="${libs}/Baidu_NativeAd_SDKjar" />

<zipfileset excludes ="META-INF/SF" src ="${libs}/gdt_mob_releasejar" />

</jar>

</target>

</project>

脚本很简单,下面我们就来分析一下: [html] view plain copy

<project name ="AntExportJar" basedir ="" default ="exportJar" >

最外围的一个标签是project,是一个工程标签,有名字,还有就是工程的目录baseDir,用点号:"" 接下来就是定义全局变量,或者是属性值: [html] view plain copy

<!--设置全局变量-->

<property name ="src" value ="src" />

<property name ="dist" value ="dist" />

<property name ="appname" value ="ant" />

<property name ="appversion" value ="10" />

<property name ="classesencode" value ="GBK" />

<property name ="lib" value ="libs" />

<property

name ="project-dir"

value ="C:\Users\i\workspace\AntExportJar" />

<property

name ="sdk-folder"

value ="C:\Users\i\AppData\Local\Android\sdk" />

<property

name ="platform-folder"

value ="${sdk-folder}\platforms\android-22" />

<property

name ="android-jar"

value ="${platform-folder}\androidjar" />

<property

name ="src"

value ="${project-dir}\src" />

<property

name ="bin"

value ="${project-dir}\bin" />

<property

name ="libs"

value ="${project-dir}\lib" />

这样我们在后面就可以使用:${name值} 来使用value值的定义了,所以这里就相当于定义了变量的作用,这里我们看到有一些value值是路径,但是这里我们感觉有一个不好的地方,就是这些路径是写死的,那么我们还可以怎么做能让他变得灵活呢?其实很简单,ant脚本中是可以访问环境变量的,那么我们只要将这些路径定义成环境变量就可以了: [html] view plain copy

<property environment ="env" />

<property name ="ANDROID_HOME" value ="${envANDROID_HOME}" />

第一行先申明一个环境变量值,这个env是公共的写法,也是ant自带的,他表示当前的环境变量的值,那么后面就可以访问具体的哪些环境变量了,比如这里我配置了ANDROID_HOME这个环境变量,那么就可以用${envANDROID_HOME}来访问androidsdk的目录了,和上面的那个直接使用绝对路径的方式是一样的。 解析来就是定义task了,在ant中task也是最重要的,我们最终运行的都是task,就相当于Java中的main方法一样。ant脚本中可以定义多个task,而且每个task可以有执行的先后顺序的。相当于Java中的方法中调用其他方法一样。 [html] view plain copy

<!--task-->

<target name ="init" >

<echo>

Initialize

</echo>

<delete dir ="${bin}" />

<mkdir dir ="${bin}" />

</target>

首先这里定义了一个初始化的task,其中echo标签也是很常用的,就是打印信息的,然后是删除目录${bin},这个bin变量在上面已经定义了,然后在创建${bin}目录。 初始化完之后,开始执行编译工作: [html] view plain copy

<target name ="buildFiles" depends ="init" >

<javac

bootclasspath ="${android-jar}"

compiler ="javac17"

target ="17"

destdir ="${bin}"

encoding ="GBK"

includeAntRuntime ="true"

listfiles ="true" >

<src path ="${project-dir}" />

<classpath>

<!--引用第三方jar包需要引用,用于辅助编译,并没有将jar打包进去。jar的打包在dex命令中。-->

<fileset dir ="${libs}" includes ="jar" />

</classpath>

</javac>

</target>

这里在此定义一个buildFiles的task,depends的值是表示当前的task在这个depends的task执行完之后在执行,这里就是先执行init的task,然后在执行buildFiles的task,这里的task主要是编译Java成class文件: bootclasspath:表示编译依赖的系统库,这里依赖的是androidjar compiler:表示编译的java版本 target:表示编译之后的class的版本,就是能够运行的java版本 destDir:表示编译之后的class文件的存放目录 其他的就不说了,这里还有一个重点,也就是我们在编译的时候会遇到的问题,就是我们在编译的时候,会引用到第三发的jar,所以这里我们为了保证能够编译过,这里还必须用classpath标签来引用这些jar,当然这里只是能够保证编译通过,并不会把这些jar也编译到最终我们想要的jar中,这个问题我们后面再说。 下面在看最后的一个task,就是将编译完之后的class文件打包成jar文件: [html] view plain copy

<!--导出jar文件-->

<target name ="exportJar" depends ="buildFiles" >

<delete dir ="${dist}" />

<!--Createthedistributiondirectory-->

<mkdir dir ="${dist}" />

<!--Puteverythingin${classes}intotheMyProject-${DSTAMP}jarfile-->

<jar jarfile ="${dist}/${appname}jar" basedir ="${bin}" >

<!--

<filesetdir="${libs}"includes="/jar"/>

-->

<zipfileset excludes ="META-INF/SF" src ="${libs}/Baidu_NativeAd_SDKjar" />

<zipfileset excludes ="META-INF/SF" src ="${libs}/gdt_mob_releasejar" />

</jar>

</target>

这里我们定义了一个exportJar的task,他是在buildFiles的task运行完之后在运行。 首先删除目标目录${dist},然后在创建一个目录。这个目录就是存放最后编译好的jar文件的目录 然后就是用jar标签来导出jar文件了: jarfile:表示编译完之后存放的jar文件名路径 basedir:表示需要编译jar的class文件目录 其他就OK了,但是在实际中我们在编译的过程中会引用到第三方的jar,那么这时候我们把这些jar编译到最终的jar中,说道这里,其实我们在使用Eclipse导出jar的时候,有一个插件可以做到这点:fat-jar,安装完插件

以上就是关于java web 服务器端执行的进度条全部的内容,包括:java web 服务器端执行的进度条、for 里面循环 赋值并 启动 task 结果值并没有赋值上去、工作的英文是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9678318.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存