文章说明:黑色字体-已知,蓝色字体-所见即所得,红色字体-还需要再找资料弄明白的,黄色背景-提炼关键信息
参考资料:很多参考资料,段落下有原文链接到原作者
简介
Servlet(server applet)动态web技术(sun公司),基于request-response编程模型。是一个接口,是定义了Java类被浏览器访问到(Tomcat 识别)规则的服务器端小程序。
发展史
版本如下
1997.06:Servlet 1.0、2.0
1998.11:Servlet 2.1
2003.11:Servlet 2.4
2005.09:Servlet 2.5
2009.12:Servlet 3.0
servlet 开发
实现了servlet接口的java程序,就是servlet程序。
定义一个Servlet接口实现类,复写方法,部署到服务器。
servlet接口官方实现类GenericServlet,官方实现类HttpServlet继承自GenericServlet,可以直接继承HttpServlet,复写HttpServlet里的doGet和doPost方法,部署到服务器。
servlet接口中的5个方法:
- 初始化方法,在Servlet被创建时执行,只会执行一次。
void init(ServletConfig servletConfig) throws ServletException {} - 获取ServletConfig配置对象:ServletConfig getServletConfig() {}
- 提供服务的方法,每次Servlet被访问的时候执行,可执行多次。
void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {} - 获取Servlet信息,如作者、版本等。
String getServletInfo() {} - 销毁方法,在服务器正常关闭的时候执行,执行一次。
void destroy() {}
public class oneServlet extends HttpServlet{
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException{
System.out.println("myServlet");
}
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException{
doGet();
}
}
在 web.xml 文件里面配置Servlet,在根标签里面加入如下配置
<!--配置Servlet -->
<servlet>
<servlet-name>servletname</servlet-name>
<servlet-class>web.servlet.oneServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletname</servlet-name>
<url-pattern>/servletname</url-pattern>
</servlet-mapping>
Servlet 分析
原理分析
1、当服务器接收到客户端浏览器的请求后,会解析请求的URL路径,获取访问的 Servlet 的资源路径。
2、查找 web.xml 文件,看是否有对应的标签体内容
3、如果有,则再找到对应的全类名
4、Tomcat 将字节码文件加载进内存,并创建其对象
5、调用其方法
生命周期
1、被创建:执行 init 方法,只执行一次。
- 默认情况下,第一次被访问时,Servlet 被创建。
- 可以配置执行 Servlet 的创建时机,可在标签中配置
配置第一次被访问时创建:标签配置为负数(默认为-1)
配置服务器启动时被创建:标签配置0或正数 - init 方法只执行一次,说明一个 Servlet 在内存中只存在一个对象,Servlet 是单例的
多个用户同时访问时,可能存在线程安全问题,所以尽量不要在Servlet中定义成员变量,即使定义了也不要对值进行修改
2、提供服务:执行 server 方法,可以执行多次。
每次访问 Servlet 时,Servlet 方法都会被调用一次
3、被销毁:执行 destory 方法,只执行一次。
Servlet 销毁时执行,只有服务器正常关闭时,才会执行 destory 方法
注解配置
Servlet3.0 以上的版本中,支持使用注解配置,在类上使用 @webServlet 注解进行配置,其实质就是配置WebServlet.class 文件里面的 urlPatterns 参数,urlPatterns 是一个 String 类型的数组,使用该数组来配置访问路径,该配置有多种方法:
- 一个 Servlet 可以定义一个访问路径:@WebServlet("/oneStar")
- 一个 Servlet 可以定义一个数组(多个)访问路径:@WebServlet({"/oneStar","/twoStar","/threeStar"})
- 支持多层路径:@WebServlet("/user/oneStar")
- 使用通配(任何目录):@WebServlet("/*")
- 使用通配(带后缀):@WebServlet("/*.do")
@WebServlet("/oneStar")
//@WebServlet({"/oneStar","/twoStar","/threeStar"})
//@WebServlet("/user/oneStar")
//@WebServlet("/*")
//@WebServlet("/*.do")
public class Main implements Servlet {}
参考文件如下:
狂神视频
原文链接:https://blog.csdn.net/One_L_Star/article/details/100118991
原文链接:https://blog.csdn.net/Ada_yangyang/article/details/81559436