Servlet
Servlet3.0
之前的版本都需要在web.xml
中配置servlet标签
,servlet标签
是由servlet
和servlet-mapping
标签组成的,两者之间通过在servlet
和servlet-mapping
标签中同样的servlet-name
名称来实现关联的。
定义一个 Servlet 很简单,只需要继承javax.servlet.http.HttpServlet
类并重写doXXX
(如doGet、doPost
)方法或者service
方法就可以了,其中需要注意的是重写HttpServlet
类的service
方法可以获取到上述七种Http请求方法的请求。
javax.servlet.http.HttpServlet:
在写之前我们先了解下HttpServlet
,javax.servlet.http.HttpServlet
类继承于javax.servlet.GenericServlet
,而GenericServlet
又实现了javax.servlet.Servlet
和javax.servlet.ServletConfig
。javax.servlet.Servlet
接口中只定义了servlet
基础生命周期方法:init(初始化)
、getServletConfig(配置)
、service(服务)
、destroy(销毁)
,而HttpServlet
不仅实现了servlet
的生命周期并通过封装service
方法抽象出了doGet/doPost/doDelete/doHead/doPut/doOptions/doTrace
方法用于处理来自客户端的不一样的请求方式,我们的Servlet只需要重写其中的请求方法或者重写service
方法即可实现servlet
请求处理。
请求TestServlet
示例:
Servlet Web.xml配置
定义好了Servlet类以后我们需要在web.xml
中配置servlet标签才能生效。
基于注解的Servlet:
值得注意的是在 Servlet 3.0 之后( Tomcat7+)可以使用注解方式配置 Servlet 了,在任意的Java类添加注解即可。
基于注解的方式配置Servlet实质上是对基于web.xml
方式配置的简化,极大的简化了Servlet的配置方式,但是也提升了对Servlet配置管理的难度,因为我们不得不去查找所有包含了@WebServlet
注解的类来寻找Servlet的定义,而不再只是查看web.xml
中的servlet
标签配置。
- 新增动态注册
Servlet
、Filter
和Listener
的API(addServlet
、addFilter
、addListener
)。 - 文件上传支持,
request.getParts()
。 非阻塞 IO
,添加异步 IO
。- 可插拔性(
web-fragment.xml
、ServletContainerInitializer
)。