目录
Servlet是运行在Java服务器端的程序,用于接收和相应来自客户端基于HTTP协议的请求。
如果想要实现Servlet功能,可以通过实现javax.servlet.Servlet接口或者继承它的实现类。
Servlet是单例模式,也就是整个应用中只有一个实例对象,虽然是单线程,但是也存在线程不安全,解决办法:不要定义成员变量,而是要定义局部变量,或者加上synchronized(this){代码}
核心方法:service(),任何客户端的请求都会经过该方法。
小tips:如果读者是web项目,那么可以在WEB-INF文件夹下的web.xml文件里加入如下配置来更改默认访问的主页
//修改访问tomcat默认主页
<welcome-file-list>
<welcome-file>自己的访问主页路径</welecome-file>
</welcome-file-list>
Servlet入门:
servlet是一个接口,运行在web服务器中的小程序,实现servlet功能有三种方式:
1.实现servlet接口 2.继承GenericServlet 3.继承HttpServlet
tip1.servlet初始化时都会执行init方法;
tip2.所有客户端请求都会经过service()方法;
tip3.当servlet从服务器中移除的时候会调用destroy()方法,最后由垃圾回收器进行回收。
Servlet关系视图 :
Servlet映射方式:
No.1 具体名称的的方式
No.2 /开头+通配符*的方式,只要符合目录结构,不用考虑结尾是什么
No.3 通配符*+固定格式结尾的方式。只要符合固定结尾的格式即可,不用考虑前面的路径
优先级问题:越是具体的优先级越高,No.1 > No.2 > No.3
Servlet创建时机:
1. 第一次访问时创建
- 优势:减少对服务器内存的浪费,提高了服务器启动的效率
- 弊端:如果有一些要在应用加载时就做的初始化操作,无法完成
2. 服务器加载时创建
- 优势:提前创建好对象,提高了首次执行的效率,可以完成一些应用加载时要做的初始化操作
- 弊端:对服务器内存占用较多,影响了服务器启动的效率
实现方法:
在<servlet>标签中,添加<load-on-startup>标签。
<servlet>
<servlet-name>servletDemo</servlet-name>
<servlet-class>com.kolacc.demo.demo01</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>servletDemo</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
- 正整数代表服务器加载时创建,值越小,优先级越高。负整数或不写代表第一次访问时创建。
默认Servlet
- 默认servlet是有服务器提供的一个servlet。它配置在Tomcat的conf目录中的web.xml中。
- 它的映射路径是<url-pattern>/</url-pattern>,我们在发送请求时,首先会在我们项目中的web.xml中查找映射配置,找到则执行。但当找不到对应的Servlet路径时,就去找默认的Servlet处理,所以,一切都是Servlet。
<!-- The mapping for the default servlet -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
ServletConfig
- ServletConfig是Servlet的配置参数对象,在Servlet的规范中,允许为每一个Servlet都提供一些初始化的配置。所以,每个Servlet都有一个自己的ServletConfig。
- 作用:在Servlet的初始化时,把一些配置信息传递给Servlet。
- 生命周期:和Servlet相同。
ServletConfig 配置方式
- 在<servlet>标签中,通过<init-param>标签来配置,有两个子标签。
- <param-name>:代表初始化的key。
- <param-value>:代表初始化的value。
通过init方法对ServletConfig对象赋值
ServletConfig 常用方法
- getInitParameter(String name) 根据参数名称获取参数的值 返回值String类型
- getInitParameterNames() 获取所有参数名称的枚举 返回Enumeration类型
- getServletName() 获取Servlet名称 返回String类型
- getServletContext() 获取ServletContext对象 返回ServletContext
ServletContext 介绍
- ServletContext是应用上下文对象(应用域对象)。每一个应用中只有一个ServletContext对象
- 作用:可以配置和获取应用的全局初始化参数,可以实现Servlet之间的数据共享。
- 生命周期:应用一加载则创建,应用被停止则销毁
域对象
- 域对象指的是对象有作用域。也就是有作用范围。域对象可以实现数据的共享。不同作用范围的域对象,共享数据的能力也不一样。
- 在Servlet规范中,一共有4个域对象。ServletContext就是其中的一个。它也是web应用中最大的作用域,也叫application域。它可以实现整个应用之间的数据共享!
ServletContext 配置方式
- 在<web-app>标签中,通过<context-param>标签来配置。有两个子标签。
- <param-name>:代表全局初始化参数的key。
- <param-value>:代表全局初始化参数的value。
ServletContext 常用方法
- getInitParameter(String name) 根据名称获取全局配置的参数 返回值为String类型
- getContextPath() 获取当前应用的访问虚拟目录 返回值为String类型
- getRealPath(String path) 根据虚拟目录获取应用部署的磁盘绝对路径 返回值为String类型
- setAttribute(String name,Object value) 向应用域对象中存储数据 没有返回值
- getAttribute(String name) 通过名称获取应用域对象中的数据 返回值为Object类型
- removeAttribute(String name) 通过名称移除应用域对象中的数据 没有返回值
注解开发Servlet
配置文件开发servlet是基于servlet2.5,servlet3.0之后就可以使用注解来进行开发servlet,同时也可以使用注解方式开发,因为向下保留
直接使用@WebServlet("/访问路径")
抖一抖
definition n.定义;阐述;清晰度
BeanDefinition
一个接口,包含了一些bean的基本信息(名称,所属类名称,是否单例,作用域等等)