Servlet: server applet
* 概念:运行在服务器端的小程序
    * Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。
    * 将来我们自定义一个类,实现Servlet接口,复写方法。

* 快速入门:
  1. 创建JavaEE项目
  2. 定义一个类,实现Servlet接口

      public class ServletDemo1 implements Servlet

  3. 实现接口中的抽象方法
  4. 配置Servlet
    在web.xml中配置:

<!--配置Servlet -->
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping> 

* 执行原理:
  1. 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
  2. 查找web.xml文件,是否有对应的<url-pattern>标签体内容。
  3. 如果有,则在找到对应的<servlet-class>全类名
  4. tomcat会将字节码文件加载进内存,并且创建其对象
  5. 调用其方法

* Servlet中的生命周期方法:
  1. 被创建:执行init方法,只执行一次
    * Servlet什么时候被创建?
      * 默认情况下,第一次被访问时,Servlet被创建
      * 可以配置执行Servlet的创建时机。
        * 在<servlet>标签下配置
          1. 第一次被访问时,创建
            * <load-on-startup>的值为负数
          2. 在服务器启动时,创建
            * <load-on-startup>的值为0或正整数

    * Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的
    * 多个用户同时访问时,可能存在线程安全问题。
    * 解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要修改值

  2. 提供服务:执行service方法,执行多次
    * 每次访问Servlet时,Service方法都会被调用一次。   

  3. 被销毁:执行destroy方法,只执行一次
    * Servlet被销毁时执行。服务器关闭时,Servlet被销毁
    * 只有服务器正常关闭时,才会执行destroy方法。
    * destroy方法在Servlet被销毁之前执行,一般用于释放资源

* Servlet3.0:
  * 好处: 支持注解配置。可以不需要web.xml了。

  * 步骤:
    1. 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
    2. 定义一个类,实现Servlet接口
    3. 复写方法
    4. 在类上使用@WebServlet注解,进行配置

 @WebServlet("资源路径")
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
String name() default "";//相当于<Servlet-name> String[] value() default {};//代表urlPatterns()属性配置 String[] urlPatterns() default {};//相当于<url-pattern> int loadOnStartup() default -1;//相当于<load-on-startup> WebInitParam[] initParams() default {}; boolean asyncSupported() default false; String smallIcon() default ""; String largeIcon() default ""; String description() default ""; String displayName() default "";
}

*  Servlet的体系结构

    Servlet -- 接口
      |
   GenericServlet -- 抽象类
      |
    
HttpServlet -- 抽象类

  * GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象
    * 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可

  * HttpServlet:对http协议的一种封装,简化操作
    1. 定义类继承HttpServlet
    2. 复写doGet/doPost方法

* Servlet相关配置
  1. url-partten:Servlet访问路径
    1. 一个Servlet可以定义多个访问路径 : @WebServlet({"/d4","/dd4","/ddd4"})
  2. 路径定义规则:
    1. /xxx:路径匹配
    2. /xxx/xxx:多层路径,目录结构
    3. *.do:扩展名匹配(无论是get请求 还是post请求,都可以使用*.do)

* ServletContext对象:
  1. 概念:代表整个web应用,可以和程序的容器(服务器)来通信
  2. 获取:
    1. 通过request对象获取
       request.getServletContext();
    2. 通过HttpServlet获取
       this.getServletContext();
    3. 功能:
      1. 获取MIME类型:
        * MIME类型:在互联网通信过程中定义的一种文件数据类型
          * 格式: 大类型/小类型 text/html image/jpeg

          * 获取:String getMimeType(String file)
  2. 域对象:共享数据
    1. setAttribute(String name,Object value)
    2. getAttribute(String name)
    3. removeAttribute(String name)

    * ServletContext对象范围:所有用户所有请求的数据
  3. 获取文件的真实(服务器)路径
    1. 方法:String getRealPath(String path)

      ServletContext context = request.getServletContext();

      String b = context.getRealPath("/b.txt");//web目录下资源访问
      System.out.println(b);

      String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目录下的资源访问
      System.out.println(c);

      String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目录下的资源访问
      System.out.println(a);

  

Servlet知识点小结的更多相关文章

  1. C++重要知识点小结---3

    C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.html C++重要知识点小结---2:http://www.cnblogs.co ...

  2. C++重要知识点小结---2

    C++重要知识点小结--1 :http://www.cnblogs.com/heyonggang/p/3246631.html 1.C++允许程序员声明一个不能有实例对象的类,这样的类惟一的用途是被继 ...

  3. Servlet知识点大纲

    这是我整理的Servlet知识点大纲,可按照它的顺序来学习-..具体的内容在我的博客中都可以找到!

  4. React及Nextjs相关知识点小结

    React及Nextjs知识点小结 函数式组件和类组件区别是什么 1.函数式组件是用于创建无状态的组件,组件不会被实例化,无法访问this中的对象,无法访问生命周期方法,是无副作用的,相比于类组件函数 ...

  5. 【SpringBoot MQ 系列】RabbitMq 核心知识点小结

    [MQ 系列]RabbitMq 核心知识点小结 以下内容,部分取材于官方教程,部分来源网络博主的分享,如有兴趣了解更多详细的知识点,可以在本文最后的文章列表中获取原地址 RabbitMQ 是一个基于 ...

  6. SpringBoot 系列教程之事务隔离级别知识点小结

    SpringBoot 系列教程之事务隔离级别知识点小结 上一篇博文介绍了声明式事务@Transactional的简单使用姿势,最文章的最后给出了这个注解的多个属性,本文将着重放在事务隔离级别的知识点上 ...

  7. disruptor笔记之四:事件消费知识点小结

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. promise知识点小结

    断断续续学习es6也有一段时间了,趁着开学空闲对知识点做一些小结. 为什么使用promise 谈到Promise,我们知道,这是社区较理想的异步编程解决方案.想要掌握promise,我们首先要知道其提 ...

  9. Servlet学习小结

    最近有点小累啊,上课平均一天6小时,再去修一修代码就没什么多的时间了.现在写我最近学习的成果:想想最近软件工程老师留的题目,我还有一些重要的地方没有想清楚.题目是这样的:生成四则运算的题目,算术题目包 ...

随机推荐

  1. vue提示插件[vscode]

    在VSCode Marketplace 搜素Vue 出现关于语法高亮的插件有 vue,vue-beautify,vue-color,VueHelper,vertur等等.比较了下载数量可以了解到,ve ...

  2. windows下dos窗口实现持续ping显示时间保存至日志

    效果图 右击新建 ping.bat 文件(ping为文件名称,随便起),内容如下: cscript ping.vbs  127.0.0.1 -t >log.txt 127.0.0.1 修改为你自 ...

  3. CF830E Perpetual Motion Machine

    题面 题解 神仙构造题. 分五种情况考虑: 如果存在一个环,那么令环上的点权值为\(1\),其余点权值为\(0\). 如果存在一个度数大于\(3\)的点,令这个点的权值为\(2\),和它相邻的点权值为 ...

  4. 深入理解数据库索引采用B树和B+树的原因

    前面几篇关于数据库底层磁盘文件读取,数据库索引实现细节进行了深入的研究,但是没有串联起来的讲解为什么数据库索引会采用B树和B+树而不是其他的数据结构,例如平衡二叉树.链表等,因此,本文打算从数据库文件 ...

  5. ubuntu之路——day14 只用python的numpy在底层实现多层神经网络

    首先感谢这位博主整理的Andrew Ng的deeplearning.ai的相关作业:https://blog.csdn.net/u013733326/article/details/79827273 ...

  6. Tomcat的安装以及环境变量的配置

    目录 下载 解压并配置环境变量 测试 关闭服务 Tomcat启动时,控制台和IDEA控制台中文乱码解决方案 下载 官方网址:Apache Tomcat® https://tomcat.apache.o ...

  7. 关于SpringCloud、SpringBoot简单讲解

     什么是Spring Boot 用我的话来理解,Spring Boot就是整合了框架的框架,它让一切依赖都变得有序简单,你不用操心A.jar是什么版本,又依赖哪些版本的jar,它默认配置了很多框架的使 ...

  8. 转载:Java对Base64处理的细节

    https://baike.baidu.com/item/base64/8545775?fr=aladdin import java.util.Base64; 对于标准的Base64: 加密为字符串使 ...

  9. php常用命令

    --------------------------------------------------------------- 重启phpservice php-fpm restart ------- ...

  10. excel矩阵运算操作-转置 行列式 相乘 逆阵

    excel矩阵运算操作-转置 行列式 相乘 逆阵 https://jingyan.baidu.com/article/154b463128e13928ca8f41a4.html Excel中矩阵的相关 ...