java web 开启线程_JavaWeb 服务启动时,在后台启动加载一个线程或加载一个程序...

昨天老大分了个任务,让我监控web站的异常,记录所有方法调用情况并存入数据库如果发现异常就发邮件给负责人,所以我研究了一下决定试试能不能用线程解决(我是没毕业也没用过线程的小白),这是我看了别人的博客为了防止忘记写下来。

原文博客地址:http://blog.csdn.net/it_wangxiangpan/article/details/7168286

两种方法,第一种是监听(Listener),第二种是配置随项目启动而启动的Servlet。第三种配置一个servlet项目开始时直接运行那个类的main方法

1.使用Servlet,在项目启动的时候启动它。

首先我要在web.xml下配置一个servlet来监控或者调用

MyListener

com.ite.wxp.MyServlet

9

MyListener

/test

然后创建一个Servlet,继承HttpServlet:

package com.wxp.thread;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.ite.common.Constants;

public class MyServlet extends HttpServlet{

private static final long serialVersionUID = 1L;

private MyThread1 myThread1;

public MyServlet(){

}

public void init(){

String str = null;

if (str == null && myThread1 == null) {

myThread1 = new MyThread1();

myThread1.start(); // servlet 上下文初始化时启动 socket

}

}

public void doGet(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse)

throws ServletException, IOException{

}

public void destory(){

if (myThread1 != null && myThread1.isInterrupted()) {

myThread1.interrupt();

}

}

}

/**

* 自定义一个 Class 线程类继承自线程类,重写 run() 方法,用于从后台获取并处理数据

*

* @author Champion.Wong

*

*/

class MyThread1 extends Thread {

public void run() {

while (!this.isInterrupted()) {// 线程未中断执行循环

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

// ------------------ 开始执行 ---------------------------

System.out.println("____FUCK TIME:" + System.currentTimeMillis());

}

}

}

其中,Listener的方式,该线程肯定是项目中首先启动的,优先于任何一个Servlet。而Servlet的方式,可以设置与其它Servlet启动的顺序。如果有时候需要首先启动一个Servlet或者它们之间的启动顺序有特殊要求的时候,这个就很有作用了。

2.监听(Listener)

首先,我们创建一个监听的类,继承ServletContextListener,如下:

package com.wxp.thread;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.ite.common.Constants;

public class MyServlet extends HttpServlet{

private static final long serialVersionUID = 1L;

private MyThread1 myThread1;

public MyServlet(){

}

public void init(){

String str = null;

if (str == null && myThread1 == null) {

myThread1 = new MyThread1();

myThread1.start(); // servlet 上下文初始化时启动 socket

}

}

public void doGet(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse)

throws ServletException, IOException{

}

public void destory(){

if (myThread1 != null && myThread1.isInterrupted()) {

myThread1.interrupt();

}

}

}

/**

* 自定义一个 Class 线程类继承自线程类,重写 run() 方法,用于从后台获取并处理数据

*

* @author Champion.Wong

*

*/

class MyThread1 extends Thread {

public void run() {

while (!this.isInterrupted()) {// 线程未中断执行循环

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

// ------------------ 开始执行 ---------------------------

System.out.println("____FUCK TIME:" + System.currentTimeMillis());

}

}

}

然后,在web.xml中配置

MyListener

com.ite.wxp.MyServlet

9

MyListener

/test

3.运行程序的main方法(Listener)

1:首先让你要自动运行的类继承

javax.servlet.http.HttpServlet

2:把你要自动运行的类中写一个main方法。(Java应用程序启动的入口就是main方法)

public static void main(String args[]){

System.out.println("这样在web容器启动的时候,,就会执行这句话了!");

}

3:在web.xml中新建一个servlet,如下:

GenerateData

com.yq.javaSCADA.business.impl.GenerateData

1

4:启动的web服务器,tomcat,weblogic,jboss,就会自动运行你类中的main方法了。

注:web项目中,servlet才是底层最精华的东西!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值