一、什么是Servlet
Servlet(Server applet)服务器的小程序, Servlet是JavaWeb的三大组件之一,它属于动态资源, 也是JavaEE中的一个规范。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要进行下面三步,实现动态页面输出。
Servlet必须实现javax.servlet.Servlet
接口
二、实现Servlet的方式
实现Servlet有三种方式:
1.实现javax.servlet.Servlet接口
2.继承javax.servlet.GenericServlet类
3.继承javax.servlet.httpServlet类
步骤一:创建一个FirstServlet类实现javax.servlet.Servlet接口
public class FirstServlet implements Servlet {
/*
* 它是生命周期方法
* 它会在Servlet对象创建之后马上执行,并只执行一次
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init()...");
}
/*
* 它是生命周期方法
* 它会被调用多次,每次处理请求都是在调用这个方法!
* */
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service()...");
}
/*
* 它是生命周期方法
* 它会在Servlet被销毁之前调用,并且它只会被调用一次!
* */
@Override
public void destroy() {
System.out.println("destroy()...");
}
/*
* 可以用来获取Servlet的配置信息
* */
@Override
public ServletConfig getServletConfig() {
System.out.println("getServletConfig()...");
return null;
}
/*
* 获取Servlet的信息
* */
@Override
public String getServletInfo() {
System.out.println("getServletInfo()...");
return null;
}
}
步骤二:在web.xml中配置Servlet
<servlet>
<servlet-name>firstServlet</servlet-name>
<servlet-class>com.sunny.servlet.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>firstServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
然后通过IDEA启动Tomcat, 在浏览器中输入http://localhost:8080/FirstServlet
就可以看到IDEA控制台调用Servlet中的方法。
三、Servlet的生命周期
void init (ServletConfig servletConfig)初始化方法
1.如果有构造器,会先调用构造方法(优先于init)。
2、当Servlet被创建的时候执行init方法,且执行一次。
3、默认情况下,第一次被访问时,Servlet被创建。
4、可以在web.xml中servlet标签下配置Servlet的创建时间。
<load-on-startup>负数</load-on-startup>第一次访问时创建
<load-on-startup>正数</load-on-startup>服务器启动时创建
5、因为init方法只被执行一次,所以一个Servlet在内存中只存在一个对象,Servlet是单例. 多个用户同时访问时,可能存在线程安全问题。
解决: 尽量不要在Servlet中定义成员变量。
void service (ServletRequest servletRequest, ServletResponse servletResponse)方法
每当访问Servlet时,Servlet方法都会被调用一次。
void destroy()销毁方法
1、Servlet被销毁时执行,服务器关闭时,Servlet被销毁
2、只有服务器正常关闭时,才会执行destory方法
3、destory方法在Servlet被销毁之前执行,一般用于释放资源
注意:Servlet类由我们编写,但对象由服务器创建,并且由服务器来调用对应的方法。
前端发出HTTP请求时,通过URL找个Servlet实例,tomcat会让这个Servlet实例初始化,请求处理完成后,不会立刻销毁实例。
当前端发送请求后,通过继承的HttpServlet中的service方法,通过service方法判断解析后的http请求是get还是post请求或者是其他类型的请求,大多数请求都是get和post请求,创建的servlet实例中重写了doget()和dopost()方法,然后通过service方法调用重写后的get或post请求。