1、假设要求你开发一个软件,该软件的功能是把读入的浮点数开平方,所得到的结果应该精确到小数后4位,
一旦实现并测试完后,该产品将被抛弃。你打算选用哪种软件生命周期模型?请说明你选择的理由。
2、假设你被任命为一家软件公司的项目负责人,你的工作是管理该公司已被广泛使用的字处理软件的新版本开发。
由于市场竞争激烈,公司规定了严格的完成期限并且已对外公布。你打算采用哪种软件生命周期模型?为什么?
3、P16——3
一、创建10upfile.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>实现上传文件进度条</title>
<script language="javascript">
var xmlHttp=false;
var bar_color='green';
var span_id="block";
var clear="   ";
function createXMLHttpRequest(){
if(window.ActiveXObject){                            //在IE中创建XMLHttpRequest对象
try{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}catch(ee){
xmlHttp=false;
}
}
}else if(window.XMLHttpRequest){                  //在非IE中创建XMLHttpRequest对象
try{
xmlHttp=new XMLHttpRequest();
}catch(e){
xmlHttp=false;
}
}
}
function goUpFile(){
createXMLHttpRequest();
checkDiv();
var url="uploadbar.jsp?task=create";
var ElementByIdx_x("go");
button.disabled=true;
xmlHttp.open("GET",url,true);
xmlHttp.setRequestHeader("Content-Type","applicaton/x-www-form-urlencoded;charset=utf-8");
xmlHttp.send(null);
}
function goUpFile1(){
createXMLHttpRequest();
checkDiv();
var url="uploadbar.jsp?task=create";
var ElementByIdx_x("go");
botton.disabled=true;
xmlHttp.open("GET",url,true);
xmlHttp.setRequestHeader("Content-Type","applicaton/x-www-form-urlencoded;charset=utf-8");
xmlHttp.send(null);
}
//创建回调函数,并在回调函数中通过一个定时器调用pollServer()方法,这个方法也完成了异步请求的过程,但请求的地址与上面的goUpFile()方法中请求的地址不同。最后根据从服务器端获得的百分比值实现了进度条。
function goCallback(){
adyState==4){
if(xmlHttp.status==200){
setTimeout("pollServer()",200);       
}
}
}
function pollServer(){
createXMLHttpRequest();
var url="uploadbar.jsp?task=poll";
xmlHttp.open("GET",url,true);
xmlHttp.setR
equestHeader("Content-Type","applicaton/x-www-form-urlencoded;charset=utf-8");
xmlHttp.send(null);
}
function pollCallback(){
adyState==4){
if(xmlHttp.status==200){
var percent_ElementsByTagName_r("percent")[0].firstChild.data;
var index=processResult(percent_complete);
for(var i=1;i<=index;i++){
var ElementByIdx_x("block"+i);
elem.innerHTML=clear;
elem.style.backgroundColor=bar_color;
var next_cell=i+1;
if(next_cell>index&&next_cell<=10){
}
}       
if(index<10){
setTimeout("pollServer()",200);
}else{
upfileform.action="upfile.jsp";
upfileform.submit();
}
}
}
}
function processResult(percent_complete){
var ind;
if(percent_complete.length==1){
ind=1;
}else if(percent_complete.length==2){
ind=percent_complete.substring(0,1);
}else{
ind=10;
}
return ind;
}
//创建两个函数用来恢复进度条的设置,以便下次使用进度条时能正常使用
function checkDiv(){
var progress_ElementByIdx_x("progressBar");;
if(progress_bar.style.visibility=="visible"){
clearBar();
}else{
progress_bar.style.visibility="visible"
}
}
function chearBar(){
for(var i=1;i<11;i++){
var ElementByIdx_x("block"+i);
elem.innerHTML=clear;
elem.style.backgroundColor="white";
}
}
</script>
</head>
<body background="bg.jpg" text="#000000">
<div align="center">
<h2>实现文件上传进度条</h2>
<form name="upfileform" method="post" action="" enctype="multipart/form-data">
<input type="file" id="file1" name="file1" size="50"><br>
<input type="submit" value="上传" id="go" onClick="goUpFile();">
</form></div>
<table align="center">
<tbody>
<tr>
<td>
<div id="progressBar" >
<span id="block1">   </span>
<span id="block2">   </span>
<span id="block3">   </span>
<span id="block4">   </span>
<span id="block5">   </span>
<span id="block6">   </span>
<span id="block7">   </span>
<span id="block8"> &n
bsp; </span>
<span id="block9">   </span>
<span id="block10">   </span>
</div>
</td>
</tr>
<tr>
<td align="center" id="complete"></td>
</tr>
</tbody>
</table>
</body>
</html>
注意:form表单的enctype属性必须设置为multipart/form-data。
二、创建upfile.jsp,处理上传文件的功能
<%@ page language="java" contentType="text/html; charset=utf-8" %>
<%@ page import="java.io.*" %>
<html>
<body background="bg.jpg">
<%
request.setCharacterEncoding("utf-8");
int MAX_SIZE=102400*102400;  //设置上传文件的最大值
String rootPath;
DataInputStream in=null;
FileOutputStream fileOut=null;
String RemoteAddr();
String ServerName();
String RealPath(serverName);
System.out.println(realPath);
realPath=realPath.substring(0,realPath.lastIndexOf("\\"));
System.out.println(realPath);
rootPath=realPath+"\\upload\\";
System.out.println(rootPath);
String ContentType();      //获得客户端上传的数据类型
try{
if(contentType.indexOf("multipart/form-data")>=0){
in=new InputStream());  //读入上传数据
int ContentLength();
if(formDataLength>MAX_SIZE){
out.println("<p>上传的文件字节数不可以超过"+MAX_SIZE+"</p>");
return;
}
byte dataBytes[]=new byte[formDataLength];  //保存上传文件的数据
int byteRead=0;
int totalBytesRead=0;
while(totalBytesRead<formDataLength){
ad(dataBytes,totalBytesRead,formDataLength);
totalBytesRead+=byteRead;
}
String file=new String(dataBytes);      //根据Byte数组创建字符串
String saveFile=file.substring(file.indexOf("filename=\"")+10);    //获得上传的数据的文件名
saveFile=saveFile.substring(0,saveFile.indexOf("\n"));
saveFile=saveFile.substring(saveFile.lastIndexOf("\\")+1,saveFile.indexOf("\""));
int lastIndex=contentType.lastIndexOf("=");
String boundary=contentType.substring(lastIndex+1,contentType.length());
String fileName=rootPath+saveFile;
int pos;
pos=file.indexOf("filename=\"");
pos=file.indexOf("\n",pos)+1;
pos=file.indexOf("\n",pos)+1;
pos=file.indexOf("\n",pos)+1;
int boundaryLocation=file.indexOf(boundary,pos)-4;
int startPos=((file.substring(0,pos)).getBytes()).length;    //取得文件数据的开始位置
int endPos=((file.substring(0,boundaryLocation)).getBytes()).length;
File checkFile=new File(fileName);
ists()){
out.println("<p>文件已经存在,请重新上传</p>");
return;
}
File fileDir=new File(rootPath);
if(!ists()){
fileDir.mkdirs();
}
fileOut=new FileOutputStream(fileName);
fileOut.write(dataBytes,startPos,(endPos-startPos));
fileOut.close();
o
ut.println("<p><center><font color=red size=5>文件上传成功!</font></center></p>");
}else{
String ContentType();
out.println("<p>上传的数据类型不是multipart/form-data</p>");
}
}catch(Exception ex){
throw new Message());
}
%>
inputtypefile不上传文件</body>
</html>
三、新建uploadbar.jsp,处理进度条
<%@ page language="java" contentType="text/html; charset=utf-8" errorPage="" %>
<%! int counter=1;%>
<%
String Parameter("task");
String res="";
if(("create").equals(task)){
res="<percent>1</percent>";
counter=1;
}else{
String percent="";
switch(counter){
case 1: percent="10"; break;
case 2: percent="20"; break;
case 3: percent="30"; break;
case 4: percent="40"; break;
case 5: percent="50"; break;
case 6: percent="60"; break;
case 7: percent="70"; break;
case 8: percent="80"; break;
case 9: percent="90"; break;
case 10: percent="100"; break;
}
counter++;
res="<percent>"+percent+"</percent>";
}
response.setContentType("text/xml");
response.setHeader("Cache-Control","no-cache");
out.println("<response>");
out.println(res);
out.println("</response>");
%>