`
cloud21
  • 浏览: 389871 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

关于Java钩子的使用

阅读更多
package test;

import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;

public class Untitled1 {

	public Untitled1(){
		doShutDownWork();
		
	}
	private void doShutDownWork(){
		Runtime.getRuntime().addShutdownHook(new Thread()
		{
			public void run(){
				try{
					FileWriter fw=new FileWriter("c:\\t.log");
					System.out.println("Im going to end");
					fw.write("The application ended! "+(new Date()).toString());
					fw.close();
				}catch(IOException ex){
					
				}
				
			}
			
		});
		
	}
	
	public static void main(String[] args){
		Untitled1 untitled11=new Untitled1();
		long s=System.currentTimeMillis();
		for(int i=0;i<1000000000;i++){
			
		}
		long se=System.currentTimeMillis();
		System.out.println(se-s);
		
	}
}


但是我还是不知道,tomcat是如何退出的,请教各位提提意见,一直想知道。
1
0
分享到:
评论
2 楼 xiegqooo 2012-12-21  
简单的关闭 tomcat
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class ShutdownService {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			Socket socket = new Socket("127.0.0.1", 8005);
			OutputStream stream = socket.getOutputStream();
			String shutdown = "SHUTDOWN";
			for (int i = 0; i < shutdown.length(); i++)
				stream.write(shutdown.charAt(i));
			stream.flush();
			stream.close();
			socket.close();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

1 楼 xiegqooo 2012-12-21  
下面是 tomcat 等待关闭的源代码  。 如何有退出 tomcat 。应该会明白的 。


org.apache.catalina.core.StandardServer

int port = 8005;
ServerSocket awaitSocket;

    /**
     * Wait until a proper shutdown command is received, then return.
     * This keeps the main thread alive - the thread pool listening for http 
     * connections is daemon threads.
     */
    public void await() {
        // Negative values - don't wait on port - tomcat is embedded or we just don't like ports
        if( port == -2 ) {
            // undocumented yet - for embedding apps that are around, alive.
            return;
        }
        if( port==-1 ) {
            try {
                awaitThread = Thread.currentThread();
                while(!stopAwait) {
                    try {
                        Thread.sleep( 10000 );
                    } catch( InterruptedException ex ) {
                        // continue and check the flag
                    }
                }
            } finally {
                awaitThread = null;
            }
            return;
        }
        
        // Set up a server socket to wait on
        try {
            awaitSocket =
                new ServerSocket(port, 1,
                                 InetAddress.getByName("localhost"));
        } catch (IOException e) {
            log.error("StandardServer.await: create[" + port
                               + "]: ", e);
            return;
        }

        try {
            awaitThread = Thread.currentThread();

            // Loop waiting for a connection and a valid command
            while (!stopAwait) {
                ServerSocket serverSocket = awaitSocket;
                if (serverSocket == null) {
                    break;
                }
    
                // Wait for the next connection
                Socket socket = null;
                StringBuilder command = new StringBuilder();
                try {
                    InputStream stream = null;
                    try {
                        socket = serverSocket.accept();
                        socket.setSoTimeout(10 * 1000);  // Ten seconds
                        stream = socket.getInputStream();
                    } catch (AccessControlException ace) {
                        log.warn("StandardServer.accept security exception: "
                                           + ace.getMessage(), ace);
                        continue;
                    } catch (IOException e) {
                        if (stopAwait) {
                            // Wait was aborted with socket.close()
                            break;
                        }
                        log.error("StandardServer.await: accept: ", e);
                        break;
                    }

                    // Read a set of characters from the socket
                    int expected = 1024; // Cut off to avoid DoS attack
                    while (expected < shutdown.length()) {
                        if (random == null)
                            random = new Random();
                        expected += (random.nextInt() % 1024);
                    }
                    while (expected > 0) {
                        int ch = -1;
                        try {
                            ch = stream.read();
                        } catch (IOException e) {
                            log.warn("StandardServer.await: read: ", e);
                            ch = -1;
                        }
                        if (ch < 32)  // Control character or EOF terminates loop
                            break;
                        command.append((char) ch);
                        expected--;
                    }
                } finally {
                    // Close the socket now that we are done with it
                    try {
                        if (socket != null) {
                            socket.close();
                        }
                    } catch (IOException e) {
                        // Ignore
                    }
                }

                // Match against our command string
                boolean match = command.toString().equals(shutdown);
                if (match) {
                    break;
                } else
                    log.warn("StandardServer.await: Invalid command '" +
                                       command.toString() + "' received");
            }
        } finally {
            ServerSocket serverSocket = awaitSocket;
            awaitThread = null;
            awaitSocket = null;

            // Close the server socket and return
            if (serverSocket != null) {
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    // Ignore
                }
            }
        }
    }

相关推荐

    java钩子实现源码

    http://blog.csdn.net/penngo/archive/2010/12/17/6081283.aspx附件源码

    Java钩子方法概念原理详解

    主要介绍了Java钩子方法概念原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    java鼠标钩子实现

    http://blog.csdn.net/penngo/archive/2010/12/17/6081283.aspx的附件运行程序

    java的鼠标键盘钩子程序swt实现

    java的鼠标键盘钩子程序swt实现,目前能找到的比较方现成的实现,用起来也比较方便。

    jnativehook_java键盘钩子_hookapi_jnativehook_

    钩子函数运用,结合java语言获取键盘、鼠标响应监控信息。

    java实现的鼠标键盘钩子程序

    我在jBuilder里面用swing实现的该程序,其实很简单,就是调用了里面库文件的两个监听事件,当程序失去焦点以后仍然可以显示出当前鼠标的坐标。之所以上传是因为不少人可能对swt extension并不熟悉,导致自己用JNI...

    JAVA实现键盘钩子的源代码

    仅用JAVA实现全局键盘钩子的功能,很好很强大,学习下

    java鼠标钩子 运行程序 显示鼠标位置

    java鼠标钩子 运行程序 显示鼠标位置

    键盘钩子实例(使用DLL和hook)

    使用动态链接库和Windows钩子技术实现键盘钩子,当每按下一个key时,会在客户区显示出来。

    hook 钩子技术

    hook 钩子 技术 hook 钩子 技术 hook 钩子 技术hook 钩子 技术hook 钩子 技术

    java源码包---java 源码 大量 实例

    关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥...

    JAVA虚拟机关闭钩子(Shutdown Hook).docx

    JAVA虚拟机关闭钩子(Shutdown Hook).docx

    JAVA_API1.6文档(中文)

    java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java....

    键盘钩子毕业论文

    2.钩子函数的分类、使用、安装和卸载等。 3.Windows动态链接库的运行机制和使用方法。 4.SOCKET编程原理。 5.VC++ MFC编程基础。 6.Andorid应用开发。 7. 计算机信息安全管理与防范意思的部分内容。

    JAVA上百实例源码以及开源项目

    关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥...

    JAVA上百实例源码以及开源项目源代码

    关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥...

    java源码包4

    关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥...

    java源码包3

    关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥...

    ZHookLib:android dalvik的java方法钩子库

    智库一个用于 android 的 java 钩子库,它包含一个 so 和一个 jar 文件。 以及来自的部分代码副本它与安卓 2.3-4.4 兼容。 艺术模式支持即将到来! 应用程序接口: com.morgoo.hook.zhook.ZHook类: 挂钩方法: ...

Global site tag (gtag.js) - Google Analytics