Servlet创建的时机及方式

Servlet创建的时机

默认情况下是当第一次访问servlet(在浏览器中访问)的时候去创建servlet

当init()的内容比较多时,在初始化时希望访问数据库来加载一些数据,但过程比较耗时,就一直在执行init()方法,所以在第一次访问时创建就不太合适了,所以,此时希望servlet在服务器启动时就创建来节省时间:

在配置文件web.xml中:设置当服务器启动时就加载:(创建servlet)

<load-on-startup>2</load-on-startup>从2开始起,1已经被默认的servlet占用了

数字的含义:启动的顺序


servlet创建的方式

创建一个servlet有3种方式:

1)     采用实现servlet接口, (不推荐)

 

2)     采用继承GenericServlet类(不推荐)

抽象类

处理所有的协议

默认调用带参的init()方法,当没写带参的时候,会调用无参的:

因为是继承,把父类中的带参的init()方法继承过来了,而父类的init()中又调用了无参的init()

即父类中带参的init方法调用了无参的方法init(),调用的这个无参的方法是自己写的,不是父类中的(父类的无参什么都没做)。子类(即自己写的)重写了父类中的无参的

所以在创建时可以写带参的,也可以写无参的,当需要用到ServletConfig对象时(init方法中的参数),就写带参的,不需要时就写无参的。

import java.io.IOException;

import javax.servlet.GenericServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

//演示如何创建servet对象
public class ServletDemo4 extends GenericServlet {

	@Override
	public void init() throws ServletException {
		System.out.println("我是无参的init方法");
	}
	
	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("我是带参的init方法");
	}
	
	@Override
	public void service(ServletRequest arg0, ServletResponse arg1)
			throws ServletException, IOException {
		// TODO Auto-generated method stub

	}

}


3)     采用继承HttpServlet(推荐)

继承于HttpServlet(为GenericServlet的子类)

HttpServlet里面的service方法做了一个转发的动作

通常在类里写doGet方法来处理页面上的get请求

实际上是service方法把这个请求转发过来,所以在访问servlet的时候,其实调用的是service方法:

service方法起了转发的作用,把请求分别转发到doGet和doPost,根据请求的方式。

所以在继承HttpServlet时,doGet和doPost两个方法都会写上。

通常只在doGet方法中写,再在doPost方法中调用doGet方法就可以了。

此种方式不能重写service方法,重写了的话,就不会执行doGet和doPost方法,就不会有转发的这个动作了

import java.io.IOException;

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

//创建servlet的第三种办法(继承httpServlet) : 此类中的service方法是做了一个转发的动作。
public class ServletDemo5 extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doGet(req, resp) ;
	}
	
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值