原文:http://nemuneko.com/servlet/thread.html
由于Servlet是用Java语言叙述,并且在Servlet容器中没有对使用Thread的限制,所以在Servlet中使用Thread是可能的。从Servlet使用Thread的用途来说,在一个耗时处理中,我们可以应用Thread将结果返回。而不需要持续等待到程序结束,这样我们可以得到一个更加友好的人机界面。
◆ Sample的概要
这是最简单的例子。只是等待的时间启动一个线程,该线程没有结束的时候,返回处理中的信息,处理完了的话则转到终了画面。以下是newthread.java序列图。
◆ 源程序文件
index.jsp文件
启动Servlet的Jsp页面
- <!-- Copyright (c) 2002 by ObjectLearn. All Rights Reserved. -->
- <%@ page language="java" contentType="text/html; charset=SHIFT_JIS" %>
- <%
- %>
- <html>
- <head>
- <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
- <title>Thread test start</title>
- </head>
- <body>
- <center>Thread test
- <form method="post" action="./thread") >
- <input type="submit" value="Push">
- </form></center>
- </body>
- </html>
Thread.java文件
Thread从这里启动。启动后将Servlet信息绑定到wait.jsp
- /*
- * 作成日: 2004/02/15
- *
- * この生成されたコメントの挿入されるテンプレートを変更するため
- * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
- */
- package com.nemuneko.thread;
- import java.io.IOException;
- import javax.servlet.ServletException;
- import javax.servlet.http.*;
- /**
- * @author Nemuneko
- *
- * この生成されたコメントの挿入されるテンプレートを変更するため
- * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
- */
- public class Thread extends HttpServlet {
- protected void doGet(
- HttpServletRequest request,
- HttpServletResponse response)
- throws ServletException, IOException {
- NewThread thread = new NewThread("Servlet thread");
- HttpSession session = request.getSession();
- session.setAttribute("thread", thread);
- response.sendRedirect("./wait.jsp");
- }
- protected void doPost(
- HttpServletRequest request,
- HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request, response);
- }
- }
wait.jsp文件
具有Http刷新功能,等待处理的结果。并且使用JavaScript持续检测Thread
- <%@ page language="java" contentType="text/html; charset=SHIFT_JIS" import="com.nemuneko.thread.*" %>
- <!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
- <%
- NewThread test = (NewThread)session.getAttribute("thread");
- if (test.isAlive() == false) response.sendRedirect("./complete.jsp");
- %>
- <html>
- <head>
- <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
- <META HTTP-EQUIV="refresh" CONTENT="2;URL=./wait.jsp">
- <title>Waiting JSP</title>
- </head>
- <body bgcolor="#FFFFFF">
- <center>
- <h2>Waiting!</h2>
- <p>Thread status : Please wait few more seconds!
- </center>
- </body>
- </html>
NewThread.java文件
线程处理,这个例子就是单纯的等待10秒,然后将控制台信息返回。在实际的Application中,这里可能就是DB处理或者图像处理这种长时间操作了。
- /*
- * 作成日: 2004/02/15
- *
- * この生成されたコメントの挿入されるテンプレートを変更するため
- * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
- */
- package com.nemuneko.thread;
- import java.lang.Thread;
- /**
- * @author Nemuneko
- *
- * この生成されたコメントの挿入されるテンプレートを変更するため
- * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
- */
- public class NewThread extends Thread {
- NewThread(String name) {
- super(name);
- start();
- }
- public void run() {
- try {
- Thread.sleep(10000);
- System.out.println(
- Thread.currentThread().getName() + " was terminated");
- System.out.println(
- Thread.currentThread().getThreadGroup().toString());
- } catch (InterruptedException e) {
- System.out.println(e.toString());
- }
- }
- }
complete.jsp文件
处理完了表示的Jsp页面
- <%@ page language="java" %>
- <!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
- <html>
- <head>
- <title>Complete</title>
- </head>
- <body bgcolor="#FFFFFF">
- <center>
- <h2>Congratulation!</h2>
- </center>
- </body>
- </html>
web.xml文件
Servlet的配置信息在此指定。
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
- "http://java.sun.com/dtd/web-app_2_3.dtd">
- <!-- Copyright (c) 2002 by ObjectLearn. All Rights Reserved. -->
- <web-app>
- <!-- Remove the comments below to define a servlet. -->
- <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
- <!-- <servlet> -->
- <!-- <servlet-name>MyServlet</servlet-name> -->
- <!-- <servlet-class>examples.MyServlet</servlet-class> -->
- <!-- <init-param> -->
- <!-- <param-name>myparam</param-name> -->
- <!-- <param-value>12345</param-value> -->
- <!-- </init-param> -->
- <!-- </servlet> -->
- <!-- -->
- <!-- -->
- <!-- <servlet-mapping> -->
- <!-- <servlet-name>MyServlet</servlet-name> -->
- <!-- <url-pattern>/mine/*</url-pattern> -->
- <!-- </servlet-mapping> -->
- <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
- <servlet>
- <servlet-name>thread</servlet-name>
- <servlet-class>com.nemuneko.thread.Thread</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>thread</servlet-name>
- <url-pattern>thread</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- <error-page>
- <error-code>404</error-code>
- <location>/error.jsp</location>
- </error-page>
- </web-app>
源程序设定文件下载:
本人废言:
看到这篇文章写得满基础,东西也很实用,虽然比较老了,翻译一下给大家多提供一个参考吧。
虽然估计大多数人对于此级别不屑……
完。