本文共 3495 字,大约阅读时间需要 11 分钟。
一 Servlet简介
Servlet是JavaWeb三大组件之一 运行在服务器上的小程序
Servlet是一个接口 定义了Java类被服务器(Tomcat等等)识别的规则
二 新建一个Servlet
2. 自定义一个类 实现Servlet接口
/** * Servlet快速入门 * Created by Hy on 2020/6/29. */public class ServletDemo1 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 { System.out.println("hello world"); } @Override public String getServletInfo() { return null; } @Override public void destroy() {}}
3. 配置Servlet web.xml
demo1 com.hy.servlet.ServletDemo1 demo1 /demo1
启动项目 访问 http://localhost:8080/demo1
三 Servlet执行原理
浏览器输入地址 -> 找到对应主机对应端口对应项目对应资源名称 -> 服务器检索web.xml -> 根据servlet-mapping匹配servlet -> 服务器将全类名对应的字节码文件加载进内存 创建实例 调用service()
四 Servlet生命周期
/** * Servlet生命周期 * Created by Hy on 2020/6/29. */public class ServletDemo2 implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { // 生命周期方法 创建 // 在Servlet被创建时执行 只会执行一次 System.out.println("init()"); } @Override public ServletConfig getServletConfig() { // 获取Servlet的配置对象 return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { // 生命周期方法 提供服务 // 每一次Servlet被访问时执行 执行多次 System.out.println("service()"); } @Override public String getServletInfo() { // 获取Servlet的一些信息 比如版本 作者等等 return null; } @Override public void destroy() { // 生命周期方法 销毁 // 在服务器正常关闭时执行 只会执行一次 System.out.println("destroy()"); }}
1. 被创建 执行init() 只会执行一次
Servlet在内存中只存在一个实例 Servlet是单例的
当多个用户同时访问时 可能存在线程安全问题 所以尽量不要在Servlet中定义需要修改的成员变量
Servlet默认情况下 第一次被访问时创建 可以配置Servlet创建时机 web.xml
demo2 com.hy.servlet.ServletDemo2 1 demo2 /demo2
2. 提供服务 执行service() 执行多次
每次访问Servlet时 service()都会被调用一次
3. 被销毁 执行destroy() 只会执行一次
Servlet被销毁前执行 服务器正常关闭时 Servlet被销毁
五 Servlet3.0注解
使用注解代替web.xml配置
/** * Servlet3.0注解 路径定义规则 * 1. /xxx 路径匹配 * 2. /xxx/xxx 多层路径 目录结构 * 3. *.do 扩展名匹配 * 注意: *是匹配所有 但是优先级最低 * Created by Hy on 2020/6/29. *///@WebServlet("/demo3") //路径匹配//@WebServlet(urlPatterns = "/demo3", loadOnStartup = 1) //路径匹配 配置Servlet创建时机//@WebServlet({"/demo3", "/d3"}) //一个Servlet可以定义多个访问路径@WebServlet({"/demo3", "/d3", "/user/d", "/abc/*", "*.do"})public class ServletDemo3 implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("init..."); } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("service..."); } @Override public String getServletInfo() { return null; } @Override public void destroy() { System.out.println("destroy..."); }}
六 Servlet体系结构
转载地址:http://kdmuz.baihongyu.com/