Servlet使用线程(thread)

原文:http://nemuneko.com/servlet/thread.html

 

        由于Servlet是用Java语言叙述,并且在Servlet容器中没有对使用Thread的限制,所以在Servlet中使用Thread是可能的。从Servlet使用Thread的用途来说,在一个耗时处理中,我们可以应用Thread将结果返回。而不需要持续等待到程序结束,这样我们可以得到一个更加友好的人机界面。

 


    ◆ Sample的概要


     这是最简单的例子。只是等待的时间启动一个线程,该线程没有结束的时候,返回处理中的信息,处理完了的话则转到终了画面。以下是newthread.java序列图。

 

 


    ◆ 源程序文件


     index.jsp文件

        启动Servlet的Jsp页面

  1. <!-- Copyright (c) 2002 by ObjectLearn. All Rights Reserved. -->
  2. <%@ page language="java" contentType="text/html; charset=SHIFT_JIS" %>
  3. <%
  4. %>
  5. <html>
  6.     <head>
  7.     <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
  8.         <title>Thread test start</title>
  9.     </head>
  10.     <body>
  11.         <center>Thread test
  12.         <form method="post" action="./thread">
  13.         <input type="submit" value="Push">
  14.         </form></center>
  15.     </body>
  16. </html>

    Thread.java文件

        Thread从这里启动。启动后将Servlet信息绑定到wait.jsp

  1. /*
  2.  * 作成日: 2004/02/15
  3.  *
  4.  * この生成されたコメントの挿入されるテンプレートを変更するため
  5.  * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
  6.  */
  7. package com.nemuneko.thread;
  8. import java.io.IOException;
  9. import javax.servlet.ServletException;
  10. import javax.servlet.http.*;
  11. /**
  12.  * @author Nemuneko
  13.  *
  14.  * この生成されたコメントの挿入されるテンプレートを変更するため
  15.  * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
  16.  */
  17. public class Thread extends HttpServlet {
  18.     protected void doGet(
  19.         HttpServletRequest request,
  20.         HttpServletResponse response)
  21.         throws ServletException, IOException {
  22.         NewThread thread = new NewThread("Servlet thread");
  23.         HttpSession session = request.getSession();
  24.         session.setAttribute("thread", thread);
  25.         response.sendRedirect("./wait.jsp");
  26.     }
  27.     protected void doPost(
  28.         HttpServletRequest request,
  29.         HttpServletResponse response)
  30.         throws ServletException, IOException {
  31.         doGet(request, response);
  32.     }
  33. }

    wait.jsp文件

        具有Http刷新功能,等待处理的结果。并且使用JavaScript持续检测Thread

  1. <%@ page language="java" contentType="text/html; charset=SHIFT_JIS" import="com.nemuneko.thread.*" %>
  2. <!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
  3. <%
  4.      NewThread test = (NewThread)session.getAttribute("thread");
  5.     if (test.isAlive() == false) response.sendRedirect("./complete.jsp");
  6. %>
  7. <html>
  8. <head>
  9.     <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
  10.     <META HTTP-EQUIV="refresh" CONTENT="2;URL=./wait.jsp">
  11. <title>Waiting JSP</title>
  12. </head>
  13. <body bgcolor="#FFFFFF">
  14. <center>
  15. <h2>Waiting!</h2>
  16. <p>Thread status : Please wait few more seconds!
  17. </center>
  18. </body>
  19. </html>

    NewThread.java文件

        线程处理,这个例子就是单纯的等待10秒,然后将控制台信息返回。在实际的Application中,这里可能就是DB处理或者图像处理这种长时间操作了。

  1. /*
  2.  * 作成日: 2004/02/15
  3.  *
  4.  * この生成されたコメントの挿入されるテンプレートを変更するため
  5.  * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
  6.  */
  7. package com.nemuneko.thread;
  8. import java.lang.Thread;
  9. /**
  10.  * @author Nemuneko
  11.  *
  12.  * この生成されたコメントの挿入されるテンプレートを変更するため
  13.  * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
  14.  */
  15. public class NewThread extends Thread {
  16.     NewThread(String name) {
  17.         super(name);
  18.         start();
  19.     }
  20.     public void run() {
  21.         try {
  22.             Thread.sleep(10000);
  23.             System.out.println(
  24.                 Thread.currentThread().getName() + " was terminated");
  25.             System.out.println(
  26.                 Thread.currentThread().getThreadGroup().toString());
  27.         } catch (InterruptedException e) {
  28.             System.out.println(e.toString());
  29.         }
  30.     }
  31. }

    complete.jsp文件

        处理完了表示的Jsp页面

  1. <%@ page language="java" %>
  2. <!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
  3. <html>
  4. <head>
  5. <title>Complete</title>
  6. </head>
  7. <body bgcolor="#FFFFFF">
  8. <center>
  9. <h2>Congratulation!</h2>
  10. </center>
  11. </body>
  12. </html>

    web.xml文件

        Servlet的配置信息在此指定。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  3.                          "http://java.sun.com/dtd/web-app_2_3.dtd">
  4. <!-- Copyright (c) 2002 by ObjectLearn. All Rights Reserved. -->
  5. <web-app>
  6.     <!-- Remove the comments below to define a servlet.          -->
  7.     <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
  8.     <!--     <servlet>                                           -->
  9.     <!--       <servlet-name>MyServlet</servlet-name>            -->
  10.     <!--       <servlet-class>examples.MyServlet</servlet-class> -->
  11.     <!--       <init-param>                                      -->
  12.     <!--         <param-name>myparam</param-name>                -->
  13.     <!--         <param-value>12345</param-value>                -->
  14.     <!--       </init-param>                                     -->
  15.     <!--     </servlet>                                          -->
  16.     <!--                                                         -->
  17.     <!--                                                         -->
  18.     <!--     <servlet-mapping>                                   -->
  19.     <!--           <servlet-name>MyServlet</servlet-name>        -->
  20.     <!--           <url-pattern>/mine/*</url-pattern>            -->
  21.     <!--     </servlet-mapping>                                  -->
  22.     <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
  23.     <servlet>
  24.         <servlet-name>thread</servlet-name>
  25.         <servlet-class>com.nemuneko.thread.Thread</servlet-class>
  26.     </servlet>
  27.     <servlet-mapping>
  28.         <servlet-name>thread</servlet-name>
  29.         <url-pattern>thread</url-pattern>
  30.     </servlet-mapping>
  31.     <welcome-file-list>
  32.         <welcome-file>index.jsp</welcome-file>
  33.     </welcome-file-list>
  34.     <error-page>
  35.         <error-code>404</error-code>
  36.         <location>/error.jsp</location>
  37.     </error-page>
  38. </web-app>

    源程序设定文件下载:

        DL:Eclipse工程zip文件

 


      本人废言:

                看到这篇文章写得满基础,东西也很实用,虽然比较老了,翻译一下给大家多提供一个参考吧。

                虽然估计大多数人对于此级别不屑……

                完。


 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值