作用:
(运行在服务器端的小程序)
用于开发动态web的技术,定义了被tomcat识别的规则
依赖服务器才能运行,由Tomcat执行
基础使用:
创建JavaEE项目,写一个类实现Servlet接口,配置Servlet
其中service方法是用来重写提供服务的方法
配置在web.xml文件中添加servlet在项目中的路径(<servlet-class>)和servlet的映射(<servlet-mapping>)
结构:
Java中servlet的结构为:
Servlet类(接口)—继承—>GenericServlet类(抽象类)—继承—>HttpServlet(抽象类)
实现:
配置(传统):
<servlet>
<servlet-name>servlet name</servlet-name>
<servlet-class>处理请求的类的完整路径</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet name</servlet-name>
<url-pattern>请求名(url)</url-pattern>
</servlet-mapping>
配置(注解):不需要web.xml,直接在Servlet实现类上方使用@WebServlet注解
@WebServlet(urlPatterns="url内容")
//实现类
@WebServlet({"//url内容1","//url内容2","/url内容3"})
//实现类
补充:路径定义规则
多层路径:xxx/xxx url需要多层进行访问
通配符:/* url后面写任何内容都返回相同内容
通配符接具体内容:/*xxx 必须以xxx结尾之前随意
另外一般会在Tomcat中配置虚拟目录以方便url路径的管理
一,实现Servlet接口
提供五个抽象方法:
void init(ServletConfig servletConfig){
//初始化方法,在servlet被创建时执行
}
void service(ServletRequest servletRequest, ServletResponse servletResponse){
//处理get/post请求的方法(提供服务的方法)
}
void destroy(){
//销毁的方法
}
ServletConfig getServletConfig(){
return servletConfig;
//用于获取ServletConfig对象(Servlet配置对象)
}
String getSerletInfo(){
return info;
//用于获取版本作者等信息
}
二,继承GenericServlet
GenericServlet类对Servlet接口的部分方法进行了默认的实现,所以继承GenericServlet类可以只重写Service方法,重点关注Service的实现
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
// 处理请求
}
三,继承HttpServlet类
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 处理 GET 请求的逻辑
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 处理 POST 请求的逻辑
}
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 处理 PUT 请求的逻辑
}
protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 处理 DELETE 请求的逻辑
}
原理:
第一步当服务器接受到客户端请求后,会先解析请求URL路径,获取访问的servlet资源路径
第二步查找web.xml文件是否有对应的<url-parttern>,如果找到那么直接找到其对应的<servlet-class>
第三步Tomcat将字节码文件加载到内存(.class文件),创建实现了servlet类的对象,然后调用其方法(service方法)
生命周期:
实现Servlet接口的生命周期:
-被创建(init方法执行)
默认情况下第一次访问时创建,可以配置<load-on-startup></load-on-startup>,(配置正整数或0时,在服务器启动时创建;配置负数时则在第一次被访问时创建)
init方法只执行一次,说明一个Servlet在内存中只存在一个,Servlet是单例的,多个用户同时访问时也就可能存在安全问题:解决方法是尽量不要在Servlet中定义成员变量,一般在Service方法中直接定义变量即可,如果一定要定义,那就不要修改成员变量值
-提供服务(service方法执行)
-被销毁(destroy方法执行)