概念
Servet = Server applet 运行在服务器的小程序
Servlet就是一个接口,定义了Java类被浏览器访问到的规则。
将来定义一个类,实现Servlet接口,复写方法即可。
快速入门
步骤:
1.创建JavaEE项目
2.定义一个类,实现Servlet接口
3.实现接口中的抽象方法
4.配置Servlet
示例:
(0)创建一个Web项目,虚拟路径指定为/Servlet
(1)继承Servlet接口:
package com.yatolove;
import javax.servlet.*;
import java.io.IOException;
public class ServerletDemo01 implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
(2)配置Servlet 访问路径
在web.xml中的根标签内部配置:
<servlet>
<servlet-name>demo01</servlet-name>
<servlet-class>com.example._01_servlet.ServletDemo01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo01</servlet-name>
<url-pattern>/demo01</url-pattern>
</servlet-mapping>
(3)启动Tomcat,并通过浏览器访问
http://localhost:8080/Servlet/demo01
demo01就是配置中的url-pattern
Servlet执行原理
浏览器通过: ip:port/项目虚拟路径/Servlet资源名称
找到此Servlet
先找到web项目,然后找web.xml,然后找Servlet的url-pattern,然后根据映射关系找到Servlet类
Servlet生命周期
Servlet生命周期分为三个阶段:
1,初始化阶段 调用init()方法
2,响应客户请求阶段 调用service()方法
3,终止阶段 调用destroy()方法
- init()方法在Servlet类被加载的时候执行,且仅执行一次
Servlet类加载时机根据web.xml中的配置决定:load-on-startup<0
第一次请求此Servlet的时候加载Servlet类;load-on-startup>=0
启动Tomcat容器的时候加载Servlet类
<servlet>
<servlet-name>demo01</servlet-name>
<servlet-class>com.example._01_servlet.ServletDemo01</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>demo01</servlet-name>
<url-pattern>/demo01</url-pattern>
</servlet-mapping>
1.Serverlet的int只执行一次,说明只有一个Servlet对象,Servlet对象是单例的;
2.多个用户同时访问同一个Servlet的时候,可能存在线程安全问题
尽量不要在Servlet中定义成员变量,定义了成员变量,也不要对其进行set操作。
-
service() 每接收一次请求,调用一次
-
destroy()在Servlet销毁的时候执行,且仅执行一次
服务器正常关闭的时候才会销毁Servlet
Servlet 注解配置
注解配置,就不用在web.xml中配置了,在创建web项目的时候可以不创建web.xml
Servlet必须在3.0及以上版本才可以。
配置方式:1. @WebServlet(urlPattern="/demo01")
2. @WebServlet(value="/demo01")
注解类型中,如果只有一个属性的话,可以省去value3. @WebServlet("/demo01")
Servlet体系结构
Servlet接口
|
GenericServlet抽象类
|
HttpServlet 抽象类
1.GenericServlet 继承 只需要复写Service;对Serverlet接口的其他方法做了默认实现
public class ServletDemo02 extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
}
2.HttpServlet抽象类
对http协议封装了,只需要复写doGet/doPost方法即可
Servlet url配置
1.@WebServlet可以指定多个访问路径@WebServlet{"/d4","/dd4","/ddd4"}
2.路径定义规则:
1./xxx
2./xxx/xx 多层路径
3.*.do