Servlet
域对象
修改配置文件(web.xml)后需要重启
servlet介绍:
(151条消息) JavaWeb——Servlet(全网最详细教程包括Servlet源码分析)_刘扬俊的博客-CSDN博客_servlet
配置servlet:
(151条消息) web.xml中servlet配置及其含义_丑八怪28的博客-CSDN博客_web.xml中servlet配置及其含义
一、Servlet的生命周期
init( ),service( ),destroy( )是Servlet生命周期的方法。
1.init( ), 当Servlet第一次被请求时,Servlet容器就会开始调用这个方法来初始化一个Servlet对象出来,但是这个方法在后续请求中不会在被Servlet容器调用,就像人只能“出生”一次一样。我们可以利用init( )方法来执行相应的初始化工作。调用这个方法时,Servlet容器会传入一个ServletConfig对象进来从而对Servlet对象进行初始化。
2.service( )方法,每当请求Servlet时,Servlet容器就会调用这个方法。就像人一样,需要不停的接受老板的指令并且“工作”。第一次请求时,Servlet容器会先调用init( )方法初始化一个Servlet对象出来,然后会调用它的service( )方法进行工作,若在后续有多次请求,Servlet容器会不停调用service方法。
3.destory, 当要销毁Servlet时,Servlet容器就会调用这个方法,就如人一样,到时期了就得死亡。在卸载应用程序或者关闭Servlet容器时,就会发生这种情况,一般在这个方法中会写一些清除代码。
下面使用一个程序进行对servlet生命周期的验证,其中需要进行servlet类的定义和对应xml文件中的配置,在service方法中设置一个计数器i,从而进行对servlet服务调用的计数工作。
1. servlet类的定义
package com.edu;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class Servlet03 implements Servlet{
int i=1;
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("Servlet03 is being destroyed.");
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
System.out.println("Servlet03 is inited.");
}
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("Servlet03 is serving at."+ (i++) +"times");
}
}
2. 对应的web.xml配置
在配置Servlet时,需要配置以下两点:
- <servlet>,配置Servlet
- <servlet-Mapping>,配置其映射信息
(1)<servlet>
<servlet-name>可以随意指定,但要有一定的意义,一般取为类的名称,我的类名为Servlet03,这里取名为Servlet03
<servlet-class>是类的全路径,package+calssname,一般是包名+类名,因为我的servlet类所在的包名是com.edu,所以是com.edu.Servlet03,一定要是全路径!
(2)<servlet-Mapping>:映射信息
<servlet-name>,里面的名字是对应的Servlet名,即上面配置的Servlet名字Servlet03。
<url-patten>是映射路径,也就是访问Servlet的名称,是在访问Servlet在浏览器地址栏后面输入的信息,例如我的映射路径命名为/Servlet03,在地址栏中输入http://localhost/myweb01/Servlet03
注意:这里的映射路径一定要写成/servlet,不能是servlet,一定要带斜杠 / 表明映射的地址!
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>myweb01</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Servlet03</servlet-name>
<servlet-class>com.edu.Servlet03</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet03</servlet-name>
<url-pattern>/Servlet03</url-pattern>
</servlet-mapping>
</web-app>
配置结束后启动servlet,可以发现控制台中servlet被初始化了,多刷新几次后可以发现servlet不断的在进行服务。
在servers窗口手动关闭Tomcat服务器后,可以发现调用了destroy方法,servlet被销毁。至此一个生命周期结束。
servlet有两种创建方式,一种是创建dynamic web project时版本号选2.5,此时需要在web.xml文件中进行配置,其次,在创建项目时选择4.0的版本号,则可以通过注解直接引入servlet,而无需再进入配置文件中进行配置。