Servlet
1.什么是 Servlet
- Servlet是JavaWeb的三大组件之一(Servlet、Filter(过滤器)、Listener(监听器)),它属于动态资源。
- 从广义上来讲,Servlet规范是Sun公司制定的一套技术标准,包含与Web应用相关的一系列接口,是Web应用实现方式的宏观解决方案。而具体的Servlet容器负责提供标准的实现。
- 从狭义上来讲,Servlet指的是javax.servlet.Servlet接口及其子接口,也可以指实现了Servlet接口的实现类。
- 如果把Web应用比作一个餐厅,Servlet就是餐厅中的服务员——负责接待顾客、上菜、结账。
- Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理。
- 在Servlet中通常需要:
1.接收请求数据;
2.处理请求;
3.完成响应。
2. 为什么要选择使用Servlet
-
使用一个接口的传统方式:
1.创建一个类实现接口
2.new 实现类对象
3.调用类的方法等 -
使用Servlet接口的方式
1.创建一个类实现Servlet接口
2.在web.xml中“注册”这个实现类
3.Tomcat(Servlet容器)会创建实现类对象
servlet不需要我们自己创建对象,由Tomcat来完成,这样就省了很多不必要的麻烦。
实现Servlet有三种方式:
实现javax.servlet.Servlet接口(不方便);
继承javax.servlet.GenericServlet类(不方便);
继承javax.servlet.http.HttpServlet类(方便);
- Servlet中的方法大多数不由我们来调用,而是由Tomcat来调用。并且Servlet的对象也不由我们来创建,由Tomcat来创建!
3.使用Servlet
一般通过web.xml文件来访问Servlet
1.给Servlet指定一个Servlet路径(让Servlet 与一个路径绑定在一起)
2.浏览器访问Servlet路径
<servlet>
<!-- 为Servlet指定一个名称,以便于引用 -->
<servlet-name>XXX</servlet-name>
<!-- 注册Servlet实现类的全类名 -->
<servlet-class>hello.web.servlet.AServlet</servlet- class>
</servlet>
<!-- 建立一个从虚拟路径到Servlet之间的映射 关系 -->
<servlet-mapping>
<!-- 引用Servlet名称 -->
<servlet-name>XXX</servlet-name>
<!-- 映射到Servlet的虚拟路径:“/ helloworld”-->
<!--必须以“/”开头,路径可任意 -->
<url-pattern>/helloworld</url-pattern>
</servlet-mapping>
-
在web.xml中配置Servlet的是为了把访问路径与一个Servlet绑定到一起,上面配置是把访问路径:“/helloworld”与“hello.web.servlet.AServlet”绑定到一起。
<servlet>:指定AServlet这个Servlet的名 称为XXX; <servlet-mapping>:指定/helloworld访问路径所以访问的Servlet名为XXX 。 <servlet>和<servlet-mapping>通过<servlet-name>这个元素关联在一起了!
4.Servlet的生命周期
-
所谓xxx的生命周期,就是说xxx的出生、服务,以及死亡。Servlet生命周期也是如此。
-
与Servlet的生命周期相关的方法有:
void init(ServletConfig); void service(ServletRequest,ServletResponse); void destroy();
5.服务器使用Servlet的过程
1) 服务器创建Servlet:
- 当Servlet第一次被请求时,或服务器启动时,服务器会创建Servlet实例。
- 服务器默认是在servlet第一次被请求时创建Servlet实例,如果希望服务器启动时就创建Servlet实现需要在web.xml中配置。
- 服务器只为一个类型的Servlet创建一个实例对象,所以Servlet是单例的;
2) 服务器初始化Servlet:
- 当服务器创建Servlet实例后会马上调用Servlet的init(ServletConfig)方法,可以把对Servlet的初始化工作放到init方法中;
- init(ServletConfig)只会被调用一次,而且一个Servlet的一生。这个方法只会被调用一次。这好比小孩子出生后马上就要去剪脐带一样,而且剪脐带一生只有一次。
- 服务器会在调用init()方法时传递ServletConfig参数
3) 服务器使用Servlet处理请求:
- 当Servlet被请求时,服务器会调用Servlet的service(ServletRequest,ServletResponse)方法
- 服务器接收到一次请求,就会调用service(ServletRequest,ServletResponse)se方法一次,所以它可能会被调用N次
- 可以把处理请求的代码写到service()方法中
4)服务器销毁Servlet
- 服务器通常不会销毁Servlet,通常只有在服务器关闭时才会销毁Servlet
- 服务器会在销毁Servlet之前调用Servlet的destory()方法
- 可以在destory()方法中给出释放Servlet占有的资源,但通常Servlet是没什么可要释放的,所以该方法一般都是空的
总结来说就是
- Servlet第一次请求
1.创建对象
2.执行init()方法
3.执行service()方法 - 后面请求
执行service()方法 - 对象销毁前
执行destroy()方法
另外:
-
getServletConfig():可以用来获取Servlet的配置信息
-
getServletInfo():可以用来获取Servlet的信息
-
一个类只有一个对象;当然可能存在多个Servlet类。Servlet类由我们来写,但对象由服务器来创建,并且由服务器来调用相应的方法。
关于HttpServlet和其他相关的知识以后再介绍