`

Tomcat启动后再启动另一个线程执行别的任务与Servlet获取Spring中的参数

阅读更多
年后的第一篇,先上代码:

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//此为Servlet类
public class NucleonEventProcessor extends HttpServlet {
	private static final long serialVersionUID=-9045451275234606838L;
	int num=0;//保证线程启动一次后就不再启动

	
	Timer timer=new Timer();

	//以下两个为了从spring中获取注入的service值
	ServletContext servletContext=null;
	WebApplicationContext webApplicationContext=null;

	//以下为某个Service
	//PersonService personService=null;


	/**
	 * Constructor of the object.
	 */
	public NucleonEventProcessor() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
		out.println("  <BODY>");
		out.print("    This is ");
		out.print(this.getClass());
		out.println(", using the GET method");
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}

	/**
	 * The doPost method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to post.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
		out.println("  <BODY>");
		out.print("    This is ");
		out.print(this.getClass());
		out.println(", using the POST method");
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occurs
	 */
	public void init() throws ServletException {
		// Put your code here
		FutureTask<String> task=new FutureTask<String>(new Callable<String>() {

			@Override
			public String call() throws Exception {
				// TODO Auto-generated method stub
				start();
				return "Collection Completed";
			}
		});
		servletContext=getServletContext();
		webApplicationContext=WebApplicationContextUtils.getWebApplicationContext(servletContext);
		//获取spring配置文件中的service
		//personService=(PersonService)webApplicationContext.getBean("personService");
		
		//线程启动
		new Thread(task).start();
	}
	private void start(){
		//要执行的方法
		if(num=0){
			timeschedule();
			num++;
		}
	}
	public void timeschedule(){
		timer.schedule(new TimerTask() {
			@Override
			public void run() {
				// TODO Auto-generated method stub
				//要执行的方法
				start();
			}
		}, 1000,2000);//1秒后执行,每隔2秒执行一次
	}
}


上面的代码是整个类的代码,大部分是继续HttpServlet后自动生成的,重要的是
【1】init【2】timeschedule里边的内容
分享到:
评论

相关推荐

    servlet 学习笔记

    Servlet与传统的CGI(Common Gateway Interface)相比,具有更好的性能和可维护性,因为它们在Java虚拟机(JVM)中运行,可以利用Java的多线程和内存管理机制。 二、Servlet工作原理 当一个HTTP请求到达Web服务器时...

    从连接器组件看Tomcat的线程模型——BIO模式(推荐)

    BIO是一种传统的I/O处理方式,当一个线程处理一个连接时,如果该连接处于等待数据的状态,那么线程会被阻塞,直到数据到达。在Tomcat中,BIO模式主要用于处理HTTP请求。 在高版本的Tomcat(如9及以上)中,BIO模式...

    ssh_jdk1.8+tomcat8.5 完整版

    而Tomcat8.5是Apache Tomcat服务器的一个版本,是一个轻量级的Java Servlet容器,它支持Servlet和JavaServer Pages(JSP)技术。Tomcat8.5引入了一些改进,包括更好的性能、对Java EE 7的支持以及更灵活的配置选项。...

    《IT学习资料》-Java web开发async机制学习.zip

    Spring MVC会自动将异步方法的结果存储在一个`AsyncResult`对象中,当结果准备好后,再由Spring MVC将结果发送给客户端。 再者,Tomcat作为常用的Java Web容器,也支持异步I/O(Non-Blocking I/O)。在Tomcat中,...

    《java学习》-Java web开发async机制学习.zip

    Spring MVC提供了对Servlet 3.0异步处理的封装,通过`@Async`注解标记在方法上,表示这个方法将在后台线程中执行。`@Async`方法所在的类需要配置为`@EnableAsync`的bean,这样Spring会自动创建一个TaskExecutor来...

    java面试题

    答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式允许其service方法,一个实例可以服务于多个请求,并且其实例一般不会被销毁,而CGI对每个请求都产生新的进程,服务完后就销毁,所以效率上...

    IT技术文章示例

    SELECT INTO FROM INSERT INTO SELECT是一种常见的SQL语句组合,用于将查询结果插入另一个表中。这种语句在数据迁移、数据复制等场景下非常有用。使用时需要注意源表和目标表的字段类型和数量是否匹配,以及是否需要...

    面试篇大全.docx

    - `CyclicBarrier`:让一组线程等待至某个状态后再全部同时执行。 ### Dubbo面试题 1. **Dubbo是什么?它解决了什么问题?** - Dubbo是一款高性能、轻量级的开源Java RPC框架。 - 它提供了一整套微服务解决方案...

    JAVA面试题附答案,祝你面试顺利

    - `Thread.join()`: 等待当前线程结束后再继续执行。 - `Object.wait()`: 释放对象锁,使线程进入等待状态。 - **题目解析**: `Thread.yield()`不会使线程进入阻塞状态,因此正确答案是`D: Thread.yield()`。 ###...

    网络爬虫,抓取视频信息

    在这个项目中,我们将使用Structs、Hibernate和Spring这三个核心框架构建一个完整的Web应用,以实现视频信息的抓取和处理。 首先,让我们详细了解这些关键技术: 1. **Structs**:这是一个用于构建动态Web应用的...

    最新Java面试宝典pdf版

    52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念、线程的基本状态以及状态之间的关系 34 54、简述synchronized和java.util.concurrent.locks.Lock...

    中科软JAVA面试题

    Struts是MVC框架,通过ActionServlet接收请求,调用Action类处理,再转发至JSP显示结果。 【page, request, session, application作用域】 page作用域仅限当前JSP页面;request作用域跨请求;session作用域跨会话;...

    Java学习从入门到精通.docx

    Tomcat是一个轻量级的Web容器,虽然不完全是一个App Server,但它支持Servlet和JSP,常用于小型到中型的Java Web应用。安装Tomcat相对简单,只需下载并解压,设置JAVA_HOME和CATALINA_HOME环境变量,然后通过执行...

    Java面试宝典2012版

    52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念、线程的基本状态以及状态之间的关系 34 54、简述synchronized和java.util.concurrent.locks....

    Java面试宝典-经典

    52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念、线程的基本状态以及状态之间的关系 34 54、简述synchronized和java.util.concurrent.locks.Lock...

    Java面试宝典2012新版

    52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念、线程的基本状态以及状态之间的关系 34 54、简述synchronized和java.util.concurrent.locks.Lock...

    java面试题大全(2012版)

    52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念、线程的基本状态以及状态之间的关系 34 54、简述synchronized和java.util.concurrent.locks.Lock...

    java面试宝典2012

    52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 37 53、线程的基本概念、线程的基本状态以及状态之间的关系 37 54、简述synchronized和java.util.concurrent.locks.Lock...

Global site tag (gtag.js) - Google Analytics