servlet的生命周期

299 篇文章 5 订阅

1、当servlet首次被调用的时候,会触发init函数,该函数会把servlet转载到内存中,init函数只会被调用一次。
2、然后去调用servlet的service函数(即大家常见的req和res)
3、当第二次访问,就直接调用service函数
4、当web应用reload  或者  关闭tomcat  或者 关机都会调用destroy函数。
详细的工作原理见:点击打开链接
servlet的基本函数:

1)实现servlet接口

package com.lmy1;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class Myfirstweb implements Servlet
{
	//该函数用于初始化Servlet,即把servlet加载到内存中
	//该函数只会被调用一次
	public void init(ServletConfig config)
		throws ServletExpection{
		}
		
		//得到ServletConfig对象
	public ServletConfig getServletConfig(){
		return null;
	}
	
	
	//该函数是服务函数,我们的业务逻辑代码
	//该函数每次都会被调用
	public void service(ServletRequest req, ServletResponse res)
		throws ServletExpection, java.io.IOException{
			
			//也可以连接数据库,便于更新数据
			
			//在控制台输出
			System.out.println("hello"+ new java.util.Date());
			//在浏览器输出
			res.getWriter().println("hello"+ new java.util.Date());
		}
		
		
		//该函数得到servlet的配置信息
		public java.lang.String getServletInfo(){
		return null;
		}
		
		//销毁Servlet,从内存中清除,该函数被调用一次
		public void destroy(){
		}
	
}


2)继承GenericServlet(略)



3)继承HttpServlet

package com.lmy;
import javax.servlet.*;
import javax.servlet.http*;
import java.io.*;

public class MyfirstHttpservlet extends HttpServlet
{
	//在httpServlet中,get 和 post 提交 默认get
	//<form action="" method= "">
	protect void doGet (HttpServletRequest req, HttpServletResponse resp)
		throw ServletExpection,
		java.io.IOException{
			
		}
		
		
	protect void doPost (HttpServletRequest req, HttpServletResponse resp)
		throw ServletExpection,
		java.io.IOException{
			
		}
}

4、

synchronized()  解决servlet的单例 引起的线程安全问题。

1)、一个变量多个用户共享的话应该加同步机制 , 如下

synchronized(对象){

//同步代码

}

2)、如果不需要共享则直接在doGet 或者 doPoet里面定义

package com.lmy1;

import java.io.IOException;
import java.io.PrintWriter;

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

public class servlet1 extends HttpServlet {

	int ticket = 0;
	int i = 0;//成员变量
	/**
	 * Constructor of the object.
	 */
	public servlet1() {
		super();
	}

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

	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		int j = 0;//局部变量
		i++;
		j++;
		
		//一般开发人员讲doGet()和doPos()t和二为一
		response.getWriter().println("hello"+new java.util.Date().toString()+"i="+i+"j="+j);

		/*ticket++;
		synchronized (this) {
			if(ticket>0){
			System.out.println("你能买到票");
			try {
				Thread.sleep(10*1000);
				
			} catch (Exception e) {
				// TODO: handle exception
			}
			ticket--;
		}else{
			System.out.println("你不能买到票");
			
		}
		
		}*/
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		this.doGet(request, response);
	}


	public void init() throws ServletException {
		// Put your code here
	}

}


5、servlet的<load-on-startup>

(初始化任务,应用于定时日志,定时备份数据,定时发送电子邮件)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lm_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值