首 页中国梦想方达科技Loveshine'Blog绿区文章绿区下载绿区图像客户留言绿区论坛繁體中文
设为首页
加入收藏
联系我们
您当前的位置:绿色生活社区 -> 网络编程 -> JSP 教程 -> 文章内容 退出登录 用户管理
栏目导航
· ASP 教程 · ASP.NET教程
· PHP 教程 · JSP 教程
· 其他语言
热门文章
· [组图] 网页导航条素..
· QQ空间相册密码破解..
· 【推荐收藏】【MSDN..
· WIN2003产品密钥
· 越狱全集高速下载
· 新东方在线 4+1 网络..
· 空间代码----最新去..
· 用于格式化后硬盘数..
· 新东方在线 4+1 网络..
· 新东方在线 4+1 网络..
相关文章
· 用sqlplus只输出数据..
· PHP+MYSQL实例:网站..
· 实例:WINDOWS 2000..
· [图文] 第一个CSS布局..
· 建筑图综合实例房屋..
· FreeHand 图形特效实..
· [图文] FREEHAND实例..
· [图文] corelDRAW 10..
· [图文] 看磁盘设计实..
· PHP新手上路【3】:..
实例:内容改变时自动刷新页面
作者:不详  来源:转载  发布时间:2007-1-15 12:29:05  发布人:loveshine

减小字体 增大字体

 下面这个Servlet用来计算大素数。因为计算非常大的数字(例如500位)可能要花不少时间,所以Servlet将立即返回已经找到的结果,同时在后台继续计算。后台计算使用一个优先级较低的线程以避免过多地影响Web服务器的性能。如果计算还没有完成,Servlet通过发送Refresh头指示浏览器在几秒之后继续请求新的内容。  

   注意,本例除了说明HTTP应答头的用处之外,还显示了Servlet的另外两个很有价值的功能。首先,它表明Servlet能够处理多个并发的连接,每个都有自己的线程。Servlet维护了一份已有素数计算请求的Vector表,通过查找素数个数(素数列表的长度)和数字个数(每个素数的长度)将当前请求和已有请求相匹配,把所有这些请求同步到这个列表上。第二,本例证明,在Servlet中维持请求之间的状态信息是非常容易的。维持状态信息在传统的CGI编程中是一件很麻烦的事情。由于维持了状态信息,浏览器能够在刷新页面时访问到正在进行的计算过程,同时也使得Servlet能够保存一个有关最近请求结果的列表,当一个新的请求指定了和最近请求相同的参数时可以立即返回结果。  

   PrimeNumbers.java  

   注意,该Servlet要用到前面给出的ServletUtilities.java。另外还要用到:PrimeList.java,用于在后台线程中创建一个素数的Vector;Primes.java,用于随机生成BigInteger类型的大数字,检查它们是否是素数。(此处略去PrimeList.java和Primes.java的代码。)  
package hall; 

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.util.*; 

public class PrimeNumbers extends HttpServlet { 
  private static Vector primeListVector = new Vector(); 
  private static int maxPrimeLists = 30; 
   
  public void doGet(HttpServletRequest request, 
                    HttpServletResponse response) 
      throws ServletException, IOException { 
    int numPrimes = ServletUtilities.getIntParameter(request, "numPrimes", 50); 
    int numDigits = ServletUtilities.getIntParameter(request, "numDigits", 120); 
    PrimeList primeList = findPrimeList(primeListVector, numPrimes, numDigits); 
    if (primeList == null) { 
      primeList = new PrimeList(numPrimes, numDigits, true); 
      synchronized(primeListVector) { 
        if (primeListVector.size() >= maxPrimeLists) 
          primeListVector.removeElementAt(0); 
        primeListVector.addElement(primeList); 
      } 
    } 
    Vector currentPrimes = primeList.getPrimes(); 
    int numCurrentPrimes = currentPrimes.size(); 
    int numPrimesRemaining = (numPrimes - numCurrentPrimes); 
    boolean isLastResult = (numPrimesRemaining == 0); 
    if (!isLastResult) { 
      response.setHeader("Refresh", "5"); 
    } 
    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 
    String title = "Some " + numDigits + "-Digit Prime Numbers"; 
    out.println(ServletUtilities.headWithTitle(title) + 
                "<BODY BGCOLOR=\"#FDF5E6\">\n" + 
                "<H2 ALIGN=CENTER>" + title + "</H2>\n" + 
                "<H3>Primes found with " + numDigits + 
                " or more digits: " + numCurrentPrimes + ".</H3>"); 
    if (isLastResult) 
      out.println("<B>Done searching.</B>"); 
    else 
      out.println("<B>Still looking for " + numPrimesRemaining + 
                  " more<BLINK>...</BLINK></B>"); 
    out.println("<OL>"); 
    for(int i=0; i<numCurrentPrimes; i++) { 
      out.println("  <LI>" + currentPrimes.elementAt(i)); 
    } 
    out.println("</OL>"); 
    out.println("</BODY></HTML>"); 
  } 

  public void doPost(HttpServletRequest request, 
                     HttpServletResponse response) 
      throws ServletException, IOException { 
    doGet(request, response); 
  } 

  // 检查是否存在同类型请求(已经完成,或者正在计算)。 
  // 如存在,则返回现有结果而不是启动新的后台线程。 
  private PrimeList findPrimeList(Vector primeListVector, 
                             int numPrimes, 
                             int numDigits) { 
    synchronized(primeListVector) { 
      for(int i=0; i<primeListVector.size(); i++) { 
        PrimeList primes = (PrimeList)primeListVector.elementAt(i); 
        if ((numPrimes == primes.numPrimes()) && 
            (numDigits == primes.numDigits())) 
          return(primes); 
      } 
      return(null); 
    } 
  } 


   PrimeNumbers.html  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<HTML> 
<HEAD> 
  <TITLE>大素数计算</TITLE> 
</HEAD> 
<CENTER> 
<BODY BGCOLOR="#FDF5E6"> 
<FORM ACTION="/servlet/hall.PrimeNumbers"> 
  <B>要计算几个素数:</B> 
  <INPUT TYPE="TEXT" NAME="numPrimes" VALUE=25 SIZE=4><BR> 
  <B>每个素数的位数:</B> 
  <INPUT TYPE="TEXT" NAME="numDigits" VALUE=150 SIZE=3><BR> 
  <INPUT TYPE="SUBMIT" VALUE="开始计算"> 
</FORM> 
</CENTER> 
</BODY> 
</HTML>  

[] [返回上一页] [打 印] [收 藏]
上一篇文章:八、设置HTTP应答头
下一篇文章:九、处理Cookie
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 绿区社区
Copyright © 2002-2006 1Lives.Com. All Rights Reserved .
冀ICP备06009849号