2023年全國(guó)碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩40頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  1. 引言</b></p><p>  基于瀏覽器的文件上傳,特別是對(duì)于通過<input type="file">標(biāo)簽來實(shí)現(xiàn)上傳的情況, 存在著嚴(yán)重的性能問題,因?yàn)橛脩籼峤涣宋募螅跒g覽器把文件上傳到服務(wù)器的過程中,界面看上去似乎是靜止的,如果是小文件還好些,如果不幸需要上傳的是幾兆、幾十兆甚至上百兆的文件,我相信那

2、是一種非常痛苦的體驗(yàn),我們中間的很多人應(yīng)該都有過此種不堪的經(jīng)歷。(一笑)</p><p>  現(xiàn)在我就針對(duì)這個(gè)問題給出一個(gè)解決方案,我們將實(shí)現(xiàn)一個(gè)具有監(jiān)控能力的WEB上傳的程序——它不僅把文件上傳到服務(wù)器,而且"實(shí)時(shí)地"監(jiān)視文件上傳的實(shí)際過程。</p><p>  解決方案的基本思路是這樣的: </p><p>  在Form提交上傳文件同時(shí),使

3、用AJAX周期性地從Servlet輪詢上傳狀態(tài)信息 </p><p>  然后,根據(jù)此信息更新進(jìn)度條和相關(guān)文字,及時(shí)反映文件傳輸狀態(tài) </p><p>  如果用戶取消上傳操作,則進(jìn)行相應(yīng)的現(xiàn)場(chǎng)清理工作:刪除已經(jīng)上傳的文件,在Form提交頁(yè)面中顯示相關(guān)信息 </p><p>  如果上傳完畢,顯示已經(jīng)上傳的文件內(nèi)容(或鏈接) </p><p>

4、;  在介紹源代碼之前,我們先來看看程序運(yùn)行界面:</p><p><b>  2. 實(shí)現(xiàn)代碼</b></p><p>  實(shí)現(xiàn)代碼想當(dāng)然的有服務(wù)器端代碼和客戶端代碼(呵呵),我們先從服務(wù)器端開始。</p><p>  2.1. 服務(wù)器端代碼</p><p>  2.1.1. 文件上傳狀

5、態(tài)類(FileUploadStatus)</p><p>  使用FileUploadStatus這個(gè)類記錄文件上傳狀態(tài),并將其作為服務(wù)器端與web客戶端之間通信的媒介,通過對(duì)這個(gè)類對(duì)象提供上傳狀態(tài)作為服務(wù)器回應(yīng)發(fā)送給web客戶端, web客戶端使用JavaScript獲得文件上傳狀態(tài)。源代碼如下:</p><p><b>  /**</b></p>&

6、lt;p>  * 本例程演示了通過Web上傳文件過程中的進(jìn)度顯示。您可以對(duì)本例程進(jìn)行任何修改和使用。</p><p>  * 如果需要轉(zhuǎn)載本例程,請(qǐng)您注明作者。</p><p><b>  *</b></p><p><b>  * 作者: 劉作晨</b></p><p>  * EMail:

7、liuzuochen@gmail.com</p><p><b>  */</b></p><p>  package liuzuochen.sample.upload;</p><p>  import java.util.*;</p><p>  public class FileUploadStatus {<

8、/p><p><b>  //上傳用戶地址</b></p><p>  private String uploadAddr;</p><p><b>  //上傳總量</b></p><p>  private long uploadTotalSize = 0;</p><p>

9、<b>  //讀取上傳總量</b></p><p>  private long readTotalSize = 0;</p><p><b>  //當(dāng)前上傳文件號(hào)</b></p><p>  private int currentUploadFileNum = 0;</p><p>  //成

10、功讀取上傳文件數(shù)</p><p>  private int successUploadFileCount = 0;</p><p><b>  //狀態(tài)</b></p><p>  private String status = "";</p><p><b>  //處理起始時(shí)間<

11、/b></p><p>  private long processStartTime = 0l;</p><p><b>  //處理終止時(shí)間</b></p><p>  private long processEndTime = 0l;</p><p><b>  //處理執(zhí)行時(shí)間</b>

12、</p><p>  private long processRunningTime = 0l;</p><p>  //上傳文件URL列表</p><p>  private List uploadFileUrlList = new ArrayList();</p><p><b>  //取消上傳</b></p

13、><p>  private boolean cancel = false;</p><p>  //上傳base目錄</p><p>  private String baseDir = "";</p><p>  public FileUploadStatus() {</p><p><b&g

14、t;  }</b></p><p>  public String getBaseDir() {</p><p>  return baseDir;</p><p><b>  }</b></p><p>  public void setBaseDir(String baseDir) {</p>

15、<p>  this.baseDir = baseDir;</p><p><b>  }</b></p><p>  public boolean getCancel() {</p><p>  return cancel;</p><p><b>  }</b></p>

16、<p>  public void setCancel(boolean cancel) {</p><p>  this.cancel = cancel;</p><p><b>  }</b></p><p>  public List getUploadFileUrlList() {</p><p> 

17、 return uploadFileUrlList;</p><p><b>  }</b></p><p>  public void setUploadFileUrlList(List uploadFileUrlList) {</p><p>  this.uploadFileUrlList = uploadFileUrlList;<

18、/p><p><b>  }</b></p><p>  public long getProcessRunningTime() {</p><p>  return processRunningTime;</p><p><b>  }</b></p><p>  public

19、 void setProcessRunningTime(long processRunningTime) {</p><p>  this.processRunningTime = processRunningTime;</p><p><b>  }</b></p><p>  public long getProcessEndTime()

20、{</p><p>  return processEndTime;</p><p><b>  }</b></p><p>  public void setProcessEndTime(long processEndTime) {</p><p>  this.processEndTime = processEndT

21、ime;</p><p><b>  }</b></p><p>  public long getProcessStartTime() {</p><p>  return processStartTime;</p><p><b>  }</b></p><p>  pu

22、blic void setProcessStartTime(long processStartTime) {</p><p>  this.processStartTime = processStartTime;</p><p><b>  }</b></p><p>  public long getReadTotalSize() {<

23、/p><p>  return readTotalSize;</p><p><b>  }</b></p><p>  public void setReadTotalSize(long readTotalSize) {</p><p>  this.readTotalSize = readTotalSize;</p

24、><p><b>  }</b></p><p>  public int getSuccessUploadFileCount() {</p><p>  return successUploadFileCount;</p><p><b>  }</b></p><p>  p

25、ublic void setSuccessUploadFileCount(int successUploadFileCount) {</p><p>  this.successUploadFileCount = successUploadFileCount;</p><p><b>  }</b></p><p>  public int g

26、etCurrentUploadFileNum() {</p><p>  return currentUploadFileNum;</p><p><b>  }</b></p><p>  public void setCurrentUploadFileNum(int currentUploadFileNum) {</p>&l

27、t;p>  this.currentUploadFileNum = currentUploadFileNum;</p><p><b>  }</b></p><p>  public String getStatus() {</p><p>  return status;</p><p><b>  

28、}</b></p><p>  public void setStatus(String status) {</p><p>  this.status = status;</p><p><b>  }</b></p><p>  public long getUploadTotalSize() {<

29、/p><p>  return uploadTotalSize;</p><p><b>  }</b></p><p>  public String getUploadAddr() {</p><p>  return uploadAddr;</p><p><b>  }</b&

30、gt;</p><p>  public void setUploadTotalSize(long uploadTotalSize) {</p><p>  this.uploadTotalSize = uploadTotalSize;</p><p><b>  }</b></p><p>  public void

31、setUploadAddr(String uploadAddr) {</p><p>  this.uploadAddr = uploadAddr;</p><p><b>  }</b></p><p>  public String toJSon() {</p><p>  StringBuffer strJSon

32、= new StringBuffer();</p><p>  strJSon.append("{UploadTotalSize:").append(getUploadTotalSize()).append(</p><p><b>  ",")</b></p><p>  .append("R

33、eadTotalSize:").append(getReadTotalSize()).append(",")</p><p>  .append("CurrentUploadFileNum:").append(getCurrentUploadFileNum()).</p><p>  append(",")</p&

34、gt;<p>  .append("SuccessUploadFileCount:").append(</p><p>  getSuccessUploadFileCount()).append(",")</p><p>  .append("Status:'").append(getStatus()).ap

35、pend("',")</p><p>  .append("ProcessStartTime:").append(getProcessStartTime()).</p><p>  append(",")</p><p>  .append("ProcessEndTime:").

36、append(getProcessEndTime()).append(</p><p><b>  ",")</b></p><p>  .append("ProcessRunningTime:").append(getProcessRunningTime()).</p><p>  append(&qu

37、ot;,")</p><p>  .append("Cancel:").append(getCancel()).append("}");</p><p>  return strJSon.toString();</p><p><b>  }</b></p><p>&l

38、t;b>  }</b></p><p>  2.1.2. 文件上傳狀態(tài)偵聽類(FileUploadListener)</p><p>  使用Common-FileUpload 1.2版本(20070103)。此版本提供了能夠監(jiān)視文件上傳情況的ProcessListener接口,使開發(fā)者通過FileUploadBase類對(duì)象的setProcessListener

39、方法植入自己的Listener。 FileUploadListener類實(shí)現(xiàn)了ProcessListener,在整個(gè)文件上傳過程中,它對(duì)上傳進(jìn)度進(jìn)行監(jiān)控,并且根據(jù)上傳 情況實(shí)時(shí)的更新上傳狀態(tài)Bean。源代碼如下:</p><p><b>  /**</b></p><p>  * 本例程演示了通過Web上傳文件過程中的進(jìn)度顯示。您可以對(duì)本例程進(jìn)行任何修改和使用。<

40、;/p><p>  * 如果需要轉(zhuǎn)載本例程,請(qǐng)您注明作者。</p><p><b>  *</b></p><p><b>  * 作者: 劉作晨</b></p><p>  * EMail:liuzuochen@gmail.com</p><p><b>  */&l

41、t;/b></p><p>  package liuzuochen.sample.upload;</p><p>  import org.apache.commons.fileupload.ProgressListener;</p><p>  import javax.servlet.http.HttpServletRequest;</p>

42、<p>  public class FileUploadListener implements ProgressListener{</p><p>  private HttpServletRequest request=null;</p><p>  public FileUploadListener(HttpServletRequest request){</p&g

43、t;<p>  this.request=request;</p><p><b>  }</b></p><p><b>  /**</b></p><p><b>  * 更新狀態(tài)</b></p><p><b>  */</b><

44、/p><p>  public void update(long pBytesRead, long pContentLength, int pItems){</p><p>  FileUploadStatus statusBean= BackGroundService.getStatusBean(request);</p><p>  statusBean.setUp

45、loadTotalSize(pContentLength);</p><p><b>  //讀取完成</b></p><p>  if (pContentLength == -1) {</p><p>  statusBean.setStatus("完成對(duì)" + pItems +"個(gè)文件的讀取:讀取了 "

46、; + pBytesRead + " bytes.");</p><p>  statusBean.setReadTotalSize(pBytesRead);</p><p>  statusBean.setSuccessUploadFileCount(pItems);</p><p>  statusBean.setProcessEndTime

47、(System.currentTimeMillis());</p><p>  statusBean.setProcessRunningTime(statusBean.getProcessEndTime());</p><p><b>  //讀取中</b></p><p><b>  } else {</b></p

48、><p>  statusBean.setStatus("當(dāng)前正在處理第" + pItems +"個(gè)文件:已經(jīng)讀取了 " + pBytesRead + "/" + pContentLength+ " bytes.");</p><p>  statusBean.setReadT

49、otalSize(pBytesRead);</p><p>  statusBean.setCurrentUploadFileNum(pItems); </p><p>  statusBean.setProcessRunningTime(System.currentTimeMillis());</p><p><b>  }</b></

50、p><p>  BackGroundService.saveStatusBean(request,statusBean);</p><p><b>  }</b></p><p><b>  }</b></p><p>  2.1.3. 后臺(tái)服務(wù)類(BackGroundService)<

51、/p><p>  BackGroundService這個(gè)Servlet類負(fù)責(zé)接收Form Post數(shù)據(jù)、回應(yīng)狀態(tài)輪詢請(qǐng)求、處理取消文件上傳的請(qǐng)求。 盡管可以把這些功能相互分離開來,但為了簡(jiǎn)單明了,還是將它們放到Servlet中,只是由不同的方法進(jìn)行分割。 源代碼如下:</p><p><b>  /**</b></p><p>  * 本例程演示了

52、通過Web上傳文件過程中的進(jìn)度顯示。您可以對(duì)本例程進(jìn)行任何修改和使用。</p><p>  * 如果需要轉(zhuǎn)載本例程,請(qǐng)您注明作者。</p><p><b>  *</b></p><p><b>  * 作者: 劉作晨</b></p><p>  * EMail:liuzuochen@gmail.c

53、om</p><p><b>  */</b></p><p>  package liuzuochen.sample.upload;</p><p><b>  /**</b></p><p>  * Title: 后臺(tái)服務(wù)</p><p>  * * Descriptio

54、n: 為客戶端提供上傳及文件傳輸狀態(tài)查詢服務(wù)</p><p><b>  *</b></p><p><b>  */</b></p><p>  import java.io.File;</p><p>  import java.io.IOException;</p><p&

55、gt;  import java.util.List;</p><p>  import javax.servlet.ServletException;</p><p>  import javax.servlet.http.HttpServletRequest;</p><p>  import javax.servlet.http.HttpServletResp

56、onse;</p><p>  import org.apache.commons.fileupload.FileItem;</p><p>  import org.apache.commons.fileupload.FileUploadException;</p><p>  import org.apache.commons.fileupload.disk.D

57、iskFileItemFactory;</p><p>  import org.apache.commons.fileupload.servlet.*;</p><p>  public class BackGroundService extends javax.servlet.http.HttpServlet implements</p><p>  javax

58、.servlet.Servlet {</p><p>  public static final String UPLOAD_DIR = "/upload";</p><p>  public static final String DEFAULT_UPLOAD_FAILURE_URL = "./result.jsp";</p><

59、;p>  public BackGroundService() {</p><p><b>  super();</b></p><p><b>  }</b></p><p>  protected void doGet(HttpServletRequest request,</p><p>

60、;  HttpServletResponse response) throws ServletException,</p><p>  IOException {</p><p>  doPost(request, response);</p><p><b>  }</b></p><p><b>  /**

61、</b></p><p>  * 從文件路徑中取出文件名</p><p><b>  */</b></p><p>  private String takeOutFileName(String filePath) {</p><p>  int pos = filePath.lastIndexOf(File

62、.separator);</p><p>  if (pos > 0) {</p><p>  return filePath.substring(pos + 1);</p><p><b>  } else {</b></p><p>  return filePath;</p><p>

63、<b>  }</b></p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 從request中取出FileUploadStatus Bean</p><p><b>  */</b></p>

64、;<p>  public static FileUploadStatus getStatusBean(</p><p>  HttpServletRequest request) {</p><p>  BeanControler beanCtrl = BeanControler.getInstance();</p><p>  return bea

65、nCtrl.getUploadStatus(request.getRemoteAddr());</p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 把FileUploadStatus Bean保存到類控制器BeanControler</p><p&

66、gt;<b>  */</b></p><p>  public static void saveStatusBean(</p><p>  HttpServletRequest request,</p><p>  FileUploadStatus statusBean) {</p><p>  statusBean.

67、setUploadAddr(request.getRemoteAddr());</p><p>  BeanControler beanCtrl = BeanControler.getInstance();</p><p>  beanCtrl.setUploadStatus(statusBean);</p><p><b>  }</b>&l

68、t;/p><p><b>  /**</b></p><p>  * 刪除已經(jīng)上傳的文件</p><p><b>  */</b></p><p>  private void deleteUploadedFile(HttpServletRequest request) {</p><

69、;p>  FileUploadStatus satusBean = getStatusBean(request);</p><p>  for (int i = 0; i < satusBean.getUploadFileUrlList().size(); i++) {</p><p>  File uploadedFile = new File(request.getReal

70、Path(UPLOAD_DIR) +</p><p>  File.separator +</p><p>  satusBean.getUploadFileUrlList().</p><p><b>  get(i));</b></p><p>  uploadedFile.delete();</p>

71、<p><b>  }</b></p><p>  satusBean.getUploadFileUrlList().clear();</p><p>  satusBean.setStatus("刪除已上傳的文件");</p><p>  saveStatusBean(request, satusBean);&l

72、t;/p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 上傳過程中出錯(cuò)處理</p><p><b>  */</b></p><p>  private void uploadExceptionHandl

73、e(</p><p>  HttpServletRequest request,</p><p>  String errMsg) throws ServletException, IOException {</p><p>  //首先刪除已經(jīng)上傳的文件</p><p>  deleteUploadedFile(request);</

74、p><p>  FileUploadStatus satusBean = getStatusBean(request);</p><p>  satusBean.setStatus(errMsg);</p><p>  saveStatusBean(request, satusBean);</p><p><b>  }</b&g

75、t;</p><p><b>  /**</b></p><p>  * 初始化文件上傳狀態(tài)Bean</p><p><b>  */</b></p><p>  private FileUploadStatus initStatusBean(HttpServletRequest</p>

76、<p>  request) {</p><p>  FileUploadStatus satusBean = new FileUploadStatus();</p><p>  satusBean.setStatus("正在準(zhǔn)備處理");</p><p>  satusBean.setUploadTotalSize(request

77、.getContentLength());</p><p>  satusBean.setProcessStartTime(System.currentTimeMillis());</p><p>  satusBean.setBaseDir(request.getContextPath() + UPLOAD_DIR);</p><p>  return satus

78、Bean;</p><p><b>  }</b></p><p><b>  /**</b></p><p><b>  * 處理文件上傳</b></p><p><b>  */</b></p><p>  private vo

79、id processFileUpload(HttpServletRequest request,</p><p>  HttpServletResponse response) throws</p><p>  ServletException, IOException {</p><p>  DiskFileItemFactory factory = new Di

80、skFileItemFactory();</p><p>  //設(shè)置內(nèi)存緩沖區(qū),超過后寫入臨時(shí)文件</p><p>  factory.setSizeThreshold(10240000);</p><p>  //設(shè)置臨時(shí)文件存儲(chǔ)位置</p><p>  factory.setRepository(new File(request.get

81、RealPath("/upload/temp")));</p><p>  ServletFileUpload upload = new ServletFileUpload(factory);</p><p>  //設(shè)置單個(gè)文件的最大上傳值</p><p>  upload.setFileSizeMax(102400000);</p>

82、;<p>  //設(shè)置整個(gè)request的最大值</p><p>  upload.setSizeMax(102400000);</p><p>  upload.setProgressListener(new FileUploadListener(request));</p><p>  //保存初始化后的FileUploadStatus Bean&

83、lt;/p><p>  saveStatusBean(request, initStatusBean(request));</p><p>  String forwardURL = "";</p><p><b>  try {</b></p><p>  List items = upload.par

84、seRequest(request);</p><p><b>  //獲得返回url</b></p><p>  for (int i = 0; i < items.size(); i++) {</p><p>  FileItem item = (FileItem) items.get(i);</p><p>

85、  if (item.isFormField()) {</p><p>  forwardURL = item.getString();</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p

86、><p><b>  //處理文件上傳</b></p><p>  for (int i = 0; i < items.size(); i++) {</p><p>  FileItem item = (FileItem) items.get(i);</p><p><b>  //取消上傳</b>

87、;</p><p>  if (getStatusBean(request).getCancel()) {</p><p>  deleteUploadedFile(request);</p><p><b>  break;</b></p><p><b>  }</b></p>&

88、lt;p><b>  //保存文件</b></p><p>  else if (!item.isFormField() && item.getName().length() > 0) {</p><p>  String fileName = takeOutFileName(item.getName());</p><

89、p>  File uploadedFile = new File(request.getRealPath(UPLOAD_DIR) +</p><p>  File.separator + fileName);</p><p>  item.write(uploadedFile);</p><p>  //更新上傳文件列表</p><p>

90、;  FileUploadStatus satusBean =</p><p>  getStatusBean(request);</p><p>  satusBean.getUploadFileUrlList().add(fileName);</p><p>  saveStatusBean(request, satusBean);</p><

91、;p>  Thread.sleep(500);</p><p><b>  }</b></p><p><b>  }</b></p><p>  } catch (FileUploadException e) {</p><p>  uploadExceptionHandle(request

92、, "上傳文件時(shí)發(fā)生錯(cuò)誤:" + e.getMessage());</p><p>  } catch (Exception e) {</p><p>  uploadExceptionHandle(request, "保存上傳文件時(shí)發(fā)生錯(cuò)誤:" + e.getMessage());</p><p><b>  }&

93、lt;/b></p><p>  if (forwardURL.length() == 0) {</p><p>  forwardURL = DEFAULT_UPLOAD_FAILURE_URL;</p><p><b>  }</b></p><p>  request.getRequestDispatcher

94、(forwardURL).forward(request, response);</p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 回應(yīng)上傳狀態(tài)查詢</p><p><b>  */</b></p><

95、;p>  private void responseStatusQuery(HttpServletRequest request,</p><p>  HttpServletResponse response) throws</p><p>  IOException {</p><p>  response.setContentType("text

96、/xml");</p><p>  response.setHeader("Cache-Control", "no-cache");</p><p>  FileUploadStatus satusBean = getStatusBean(request);</p><p>  response.getWriter(

97、).write(satusBean.toJSon());</p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 處理取消文件上傳</p><p><b>  */</b></p><p>  priv

98、ate void processCancelFileUpload(HttpServletRequest request,</p><p>  HttpServletResponse response) throws</p><p>  IOException {</p><p>  FileUploadStatus satusBean = getStatusBean

99、(request);</p><p>  satusBean.setCancel(true);</p><p>  saveStatusBean(request, satusBean);</p><p>  responseStatusQuery(request, response);</p><p><b>  }</b&g

100、t;</p><p>  protected void doPost(HttpServletRequest request,</p><p>  HttpServletResponse response) throws ServletException,</p><p>  IOException {</p><p>  boolean is

101、Multipart = ServletFileUpload.isMultipartContent(request);</p><p>  if (isMultipart) {</p><p>  processFileUpload(request, response);</p><p><b>  } else {</b></p>

102、<p>  request.setCharacterEncoding("UTF-8");</p><p>  if (request.getParameter("uploadStatus") != null) {</p><p>  responseStatusQuery(request, response);</p>&l

103、t;p><b>  }</b></p><p>  if (request.getParameter("cancelUpload") != null) {</p><p>  processCancelFileUpload(request, response);</p><p><b>  }</b&g

104、t;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  2.1.4. 文件上傳狀態(tài)控制類(BeanControler)</p><p>  這是一個(gè)單例類

105、,它的功能是為客戶端保存文件上傳狀態(tài),這里我沒有使用Session來存儲(chǔ)文件上傳狀態(tài),因?yàn)閷?duì)于AJAX這種異步調(diào)用,服務(wù)器會(huì)開啟不同的Session,所以無法通過Session保存文件上傳狀態(tài)。 我并不認(rèn)為這種方法最好,如果有更好的方法,歡迎大家一起討論。 源代碼如下:</p><p><b>  /**</b></p><p>  * 本例程演示了通過Web上傳文件

106、過程中的進(jìn)度顯示。您可以對(duì)本例程進(jìn)行任何修改和使用。</p><p>  * 如果需要轉(zhuǎn)載本例程,請(qǐng)您注明作者。</p><p><b>  *</b></p><p><b>  * 作者: 劉作晨</b></p><p>  * EMail:liuzuochen@gmail.com</p&

107、gt;<p><b>  */</b></p><p>  package liuzuochen.sample.upload;</p><p><b>  /**</b></p><p>  * Title: 類控制器</p><p><b>  *</b>&l

108、t;/p><p>  * Description: 主要作用是對(duì)FileUploadStatus進(jìn)行管理,為客戶端提供相應(yīng)的</p><p>  * FileUploadStatus類對(duì)象。這是一個(gè)單例類。</p><p><b>  *</b></p><p><b>  */</b></p&g

109、t;<p>  import java.util.Vector;</p><p>  public class BeanControler {</p><p>  private static BeanControler beanControler = new BeanControler();</p><p>  private Vector vect

110、or = new Vector();</p><p>  private BeanControler() {</p><p><b>  }</b></p><p>  public static BeanControler getInstance() {</p><p>  return beanControler;&

111、lt;/p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 取得相應(yīng)FileUploadStatus類對(duì)象的存儲(chǔ)位置</p><p><b>  */</b></p><p>  private int i

112、ndexOf(String strID) {</p><p>  int nReturn = -1;</p><p>  for (int i = 0; i < vector.size(); i++) {</p><p>  FileUploadStatus status = (FileUploadStatus) vector.elementAt(i);<

113、;/p><p>  if (status.getUploadAddr().equals(strID)) {</p><p>  nReturn = i;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b> 

114、 }</b></p><p>  return nReturn;</p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 取得相應(yīng)FileUploadStatus類對(duì)象</p><p><b>  */

115、</b></p><p>  public FileUploadStatus getUploadStatus(String strID) {</p><p>  return (FileUploadStatus) vector.elementAt(indexOf(strID));</p><p><b>  }</b></p&

116、gt;<p><b>  /**</b></p><p>  * 存儲(chǔ)FileUploadStatus類對(duì)象</p><p><b>  */</b></p><p>  public void setUploadStatus(FileUploadStatus status) {</p><

117、;p>  int nIndex = indexOf(status.getUploadAddr());</p><p>  if ( -1 == nIndex) {</p><p>  vector.add(status);</p><p><b>  } else {</b></p><p>  vector.in

118、sertElementAt(status, nIndex);</p><p>  vector.removeElementAt(nIndex + 1);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  /**</b>&

119、lt;/p><p>  * 刪除FileUploadStatus類對(duì)象</p><p><b>  */</b></p><p>  public void removeUploadStatus(String strID){</p><p>  int nIndex = indexOf(strID);</p>

120、<p>  if(-1!=nIndex)</p><p>  vector.removeElementAt(nIndex);</p><p><b>  }</b></p><p><b>  }</b></p><p>  2.2. 客戶端代碼</p><p

121、>  客戶端我們采用Prototype框架。請(qǐng)下載。</p><p>  2.2.1. AjaxWrapper.js</p><p>  AjaxWrapper.js對(duì)Prototype進(jìn)行了封裝。請(qǐng)下載分析</p><p>  2.2.2. fileUpload.html</p><p>  fileUpload.

122、html是文件上傳界面。 請(qǐng)下載。 </p><p>  2.2.3. result.jsp</p><p>  result.jsp是文件上傳結(jié)果顯示界面。 請(qǐng)下載 </p><p>  2.2.4. fileUpload.css</p><p>  fileUpload.css是樣式文件。 源代碼如下:</p&g

123、t;<p>  body {  color:#000;  background-color:white;  font:15px Georgia, "Lucida Grande", Arial, sans-serif;   letter-spacing:0.01em;  margin:15px;

124、}#controlPanel,#resultPanel{  width:700px;  margin:20px auto;  padding:25px;  border:3px solid gray;  -moz-border-radius:10px;  background:#f8f8f8;}#er

125、rorArea{   width:400px;  margin:20px auto;  padding:25px;  border:3px solid gray;  -moz-border-radius:10px;  background:red;}#normalMessageArea{&#

126、160; width:400px;  margin:20px auto;  paddi</p><p><b>  2.3. 配置文件</b></p><p>  web.xml中完成Servlet的配置。</p><p>  <?xml version="1.0&

127、quot; encoding="UTF-8"?><web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sch

128、emaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><display-name>AjaxPractice</display-name><servlet>  <description></descri

129、ption>  <display-name>BackGroundService</display-name>  <servlet-name>BackGroundService</servlet-name>  <servlet-class>liuzuochen.sample.upload.BackG</

130、p><p><b>  3. 結(jié)語</b></p><p>  整個(gè)程序到這里就介紹完了,希望它多少能為您的工作或?qū)W習(xí)帶來點(diǎn)兒幫助。 </p><p>  大學(xué)本科生畢業(yè)設(shè)計(jì)(論文)撰寫規(guī)范</p><p>  本科生畢業(yè)設(shè)計(jì)(論文)是學(xué)生在畢業(yè)前提交的一份具有一定研究?jī)r(jià)值和實(shí)用價(jià)值的學(xué)術(shù)資料。它既是本科學(xué)生開始從

131、事工程設(shè)計(jì)、科學(xué)實(shí)驗(yàn)和科學(xué)研究的初步嘗試,也是學(xué)生在教師的指導(dǎo)下,對(duì)所進(jìn)行研究的適當(dāng)表述,還是學(xué)生畢業(yè)及學(xué)位資格認(rèn)定的重要依據(jù)。畢業(yè)論文撰寫是本科生培養(yǎng)過程中的基本訓(xùn)練環(huán)節(jié)之一,應(yīng)符合國(guó)家及各專業(yè)部門制定的有關(guān)標(biāo)準(zhǔn),符合漢語語法規(guī)范。指導(dǎo)教師應(yīng)加強(qiáng)指導(dǎo),嚴(yán)格把關(guān)。</p><p><b>  1、論文結(jié)構(gòu)及要求</b></p><p>  論文包括題目、中文摘要、外文

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論