JAVAEE——Servlet(介绍 配置 API)

Servlet简介

1. 什么是Servlet (Server applet)

Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。但servlet的实质就是java代码,通过java的API 动态的向客户端输出内容

servlet规范:包含三个技术点

servlet技术
filter技术---过滤器
listener技术---监听器

2. Servlet快速入门

实现步骤:
创建类实现Servlet接口
覆盖尚未实现的方法---service方法
在web.xml进行servlet的配置

但在实际开发中,我们不会直接去实现Servlet接口,因为那样需要覆盖的方法太多, 我们一般创建类继承HttpServlet
实现步骤:
创建类继承HttpServlet类
覆盖doGet和doPost
在web.xml中进行servlet的配置

画图描述整个访问过程:


image.png

Servlet的API(生命周期)

Servlet接口中的方法

init(ServletConfig config)

在Servlet创建的时候执行,只执行一次
何时执行:servlet对象创建的时候执行
Servlet的Init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的

  • 多个用户同时访问时,可能会存在线程安全问题,所以尽量不要在Servlet中定义成员变量,即使定义了成员变量,也不要修改成员变量的值

SrvletConfig : 代表的是该servlet对象的配置信息

service(ServletRequest request,ServletResponse response)

何时执行:每次请求都会执行 会执行多次

ServletRequest :代表请求 认为ServletRequest 内部封装的是 http请求的信息

ServletResponse :代表响应 认为要封装的是响应的信息

destroy() 何时执行:servlet销毁的时候执行 只执行一次

  • 只有服务器正常关闭时,才会执行destroy方法
  • destory执行时机

HttpServlet类的方法

init()
doGet(HttpServletRequest request,HttpServletResponse response)
doPost(HttpServletRequest request,HttpServletResponse response)
destroy()

Servlet的生命周期

  • Servlet何时创建
  1. 默认第一次访问servlet时创建该对象
  2. 服务器启动时创建
    取决于Servlet的配置
  • 下标签配置

    1. 的值为0
    2. 的值为0或正整数
  • Servlet何时销毁
    服务器关闭servlet就销毁了

  • 每次访问必然执行的方法
    service(ServletRequest req, ServletResponse res)方法
    ServletRequest 代表请求 认为ServletRequest内部封装的是http请求的信息
    ServletResponse 代表响应 认为要封装的是响应的信息

问题:对XXXServlet进行了10次访问,init(),destory(),service(),doGet(),doPost() 一共执行力多少次?request对象创建几个?response创建几个?

Servlet的配置

基本配置

image.png
  • 其中url-pattern的配置方式:
    完全匹配 访问的资源与配置的资源完全相同才能访问到


    image.png
  • 目录匹配 格式:/虚拟的目录../* *代表任意

image.png
  • 扩展名匹配 格式:*.扩展名


    image.png

** 注意:第二种与第三种不要混用 /aaa/bbb/.abcd(错误的*

Servlet 3.0 注解配置

在Servlet3.0 开始支持注解配置,可以不需要web.xml了

步骤

  1. 创建JavaEE项目,选择Servlet版本3.0以上,可以不创建web.xml
  2. 定义Servlet 实现Servlet接口
  3. 实现方法
  4. 在Servlet上使用@WebServlet类作为注解

在WebServlet的定义中 定义了name、urlPattern name对应web.xml中的 标签。urlPattern对应web.xml中的标签。name默认是类名 urlPattern可以在注解属性里指定。可以省略key,注解WebServlet中定义的url-pattern是一个数组,可以定义多个映射路径

@WebServlet("urlpattern")

IDEA与tomcat的相关配置

  1. IDEA会为每一个tomcat部署的项目单独建立一份配置文件
  2. 工作空间项目和tomcat部署的web项目
    • tomcat真正访问的是tomcat部署的web项目 对应着idea工作空间的web目录 下的所有资源
    • WEB-INF目录下的资源不能被直接访问

服务器启动实例化Servlet配置

Servlet的何时创建:默认第一次访问时创建
为什么是默认?
当在servlet的配置时 加上一个配置 servlet对象在服务器启动 时就创建

缺省Servlet

可以将url-pattern配置一个/,代表该servlet是缺省的servlet
什么是缺省的servlet?
当你访问资源地址所有的servlet都不匹配时 , 缺省的servlet负责处理

其实,web应用中所有的资源的响应都是servlet负责,包括静态资源

欢迎页面

欢迎页面配置.png

Servlet体系结构

Servlet----接口

  • GenericServlet(实现Servlet接口的抽象类 空实现)

  • HttpServlet(继承GenericServlet的抽象类):对http协议的一种封装,简化操作

ServletContext对象

什么是ServletContext对象

ServletContext代表是一个web应用的环境(上下文)对象,ServletContext对象 内部封装是该web应用的信息,ServletContext对象一个web应用只有一个

问题:一个web应用有几个servlet对象?----多个
有几个ServletContext对象---一个

ServletContext对象的生命周期?

创建:该web应用被加载(服务器启动或发布web应用(前提,服务器启动状
态))
销毁:web应用被卸载(服务器关闭,移除该web应用)

怎样获得ServletContext对象

ServletContext servletContext = config.getServletContext();
ServletContext servletContext = this.getServletContext();

ServletContext的作用

获得web应用全局的初始化参数

外,独立标签

web.xml中配置初始化参数


image.png
  • 通过context对象获得参数


    image.png

获得web应用中任何资源的绝对路径(重要 重要 重要)

方法:String path = context.getRealPath(相对于该web应用的相对地址);

ServletContext是一个域对象(重要 重要 重要)

  • 什么是域对象?什么是域?
    存储数据的区域就是域对象

ServletContext域对象的作用范围:

整个web应用(所有的web资源都可以随意向 servletcontext域中存取数据,数据可以共享)

域对象作用范围

域对象的通用的方法:

setAtrribute(String name,Object obj);
getAttribute(String name);
removeAttribute(String name);

你可能感兴趣的:(JAVAEE——Servlet(介绍 配置 API))