📄 40.html
字号:
<br>
注意,该Servlet要用到前面给出的ServletUtilities.java。另外还要用到:PrimeList.java,用于在后台线程中创建一个素数的Vector;Primes.java,用于随机生成BigInteger类型的大数字,检查它们是否是素数。(此处略去PrimeList.java和Primes.java的代码。) <br>
package hall;<br>
<br>
import java.io.*;<br>
import javax.servlet.*;<br>
import javax.servlet.http.*;<br>
import java.util.*;<br>
<br>
public class PrimeNumbers extends HttpServlet {<br>
private static Vector primeListVector = new Vector();<br>
private static int maxPrimeLists = 30;<br>
<br>
public void doGet(HttpServletRequest request,<br>
HttpServletResponse response)<br>
throws ServletException, IOException {<br>
int numPrimes = ServletUtilities.getIntParameter(request, "numPrimes", 50);<br>
int numDigits = ServletUtilities.getIntParameter(request, "numDigits", 120);<br>
PrimeList primeList = findPrimeList(primeListVector, numPrimes, numDigits);<br>
if (primeList == null) {<br>
primeList = new PrimeList(numPrimes, numDigits, true);<br>
synchronized(primeListVector) {<br>
if (primeListVector.size() >= maxPrimeLists)<br>
primeListVector.removeElementAt(0);<br>
primeListVector.addElement(primeList);<br>
}<br>
}<br>
Vector currentPrimes = primeList.getPrimes();<br>
int numCurrentPrimes = currentPrimes.size();<br>
int numPrimesRemaining = (numPrimes - numCurrentPrimes);<br>
boolean isLastResult = (numPrimesRemaining == 0);<br>
if (!isLastResult) {<br>
response.setHeader("Refresh", "5");<br>
}<br>
response.setContentType("text/html");<br>
PrintWriter out = response.getWriter();<br>
String title = "Some " + numDigits + "-Digit Prime Numbers";<br>
out.println(ServletUtilities.headWithTitle(title) +<br>
"<BODY BGCOLOR=\"#FDF5E6\">\n" +<br>
"<H2 ALIGN=CENTER>" + title + "</H2>\n" +<br>
"<H3>Primes found with " + numDigits +<br>
" or more digits: " + numCurrentPrimes + ".</H3>");<br>
if (isLastResult)<br>
out.println("<B>Done searching.</B>");<br>
else<br>
out.println("<B>Still looking for " + numPrimesRemaining +<br>
" more<BLINK>...</BLINK></B>");<br>
out.println("<OL>");<br>
for(int i=0; i<numCurrentPrimes; i++) {<br>
out.println(" <LI>" + currentPrimes.elementAt(i));<br>
}<br>
out.println("</OL>");<br>
out.println("</BODY></HTML>");<br>
}<br>
<br>
public void doPost(HttpServletRequest request,<br>
HttpServletResponse response)<br>
throws ServletException, IOException {<br>
doGet(request, response);<br>
}<br>
<br>
// 检查是否存在同类型请求(已经完成,或者正在计算)。<br>
// 如存在,则返回现有结果而不是启动新的后台线程。<br>
private PrimeList findPrimeList(Vector primeListVector,<br>
int numPrimes,<br>
int numDigits) {<br>
synchronized(primeListVector) {<br>
for(int i=0; i<primeListVector.size(); i++) {<br>
PrimeList primes = (PrimeList)primeListVector.elementAt(i);<br>
if ((numPrimes == primes.numPrimes()) &&<br>
(numDigits == primes.numDigits()))<br>
return(primes);<br>
}<br>
return(null);<br>
}<br>
}<br>
}<br>
<br>
<br>
<br>
<br>
PrimeNumbers.html <br>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><br>
<HTML><br>
<HEAD><br>
<TITLE>大素数计算</TITLE><br>
</HEAD><br>
<CENTER><br>
<BODY BGCOLOR="#FDF5E6"><br>
<FORM ACTION="/servlet/hall.PrimeNumbers"><br>
<B>要计算几个素数:</B><br>
<INPUT TYPE="TEXT" NAME="numPrimes" VALUE=25 SIZE=4><BR><br>
<B>每个素数的位数:</B><br>
<INPUT TYPE="TEXT" NAME="numDigits" VALUE=150 SIZE=3><BR><br>
<INPUT TYPE="SUBMIT" VALUE="开始计算"><br>
</FORM><br>
</CENTER><br>
</BODY><br>
</HTML> <br>
<br>
</td>
</tr>
<tr><td colspan=2 align=right class=t> <a href="http://www.chinajavaworld.com/doc/servlet-jsp/32.html" ></a> <a href="39.html" tppabs="http://www.chinajavaworld.com/doc/servlet-jsp/39.html" ></a> <a href="41.html" tppabs="http://www.chinajavaworld.com/doc/servlet-jsp/41.html" ></a> </td></tr>
</td>
</tr>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -