什么是Servlet?
Servlet 是一个单实例多线程的普通的 java 类——校验多线程的安全问题的标准 Servlet 的两个重要对象 - servletConfig:servlet 的配置对象 - servletContext:全局管理者对象(一个web application 只有一个ServletContext) 1)获取上下文路径 2)可以请求转发 3)可以作为域对象使用:request servletContext 4)获取某个文件的真是路径 5)如果不借助于 servletContext 对象,要获取 classes 目录文件路径只能使用类加载器 classLoader
1、Server + let
(1)Servlet 就是运行在服务器端的小程序。
Servlet实际上就是一个接口。
- 狭义上的Servlet,指的就是Servlet接口
- 广义上的我们认为凡是实现Servlet接口的类,我们都称他是一个Servlet
(2)Servlet 的作用:
a.接收用户发送的请求
b.调用其他的java程序来处理请求
c.根据处理结果,返回给用户一个页面
(3)Servlet的HelloWorld
a.创建一个类并实现Servlet接口
b.在web.xml文件中对Servlet进行配置
<servlet>
<servlet-name>别名</servlet-name>
<servlet-class>全类名</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>别名</servlet-name>
<url-pattern>需要servlet处理的请求地址</url-pattern>
</servlet-mapping>
(3)Servlet的三个名字:
<servlet-name>
//Servlet的别名,程序员通过别名对Servlet进行配置
<servlet-class>
//Servlet的全类名,服务器通过全类名来创建Servlet的实例
<url-pattern>
//Servlet映射的请求地址,用户通过该地址访问Servlet
2、Servlet 的生命周期(重点)
Servlet 的创建过程----Tomcat 服务器
1)Servlet 初始化:init() init(SetvletConfig config)
2)Servlet 的服务方法:业务方法
3)Servlet 销毁过程
(1)Servlet 的生命周期,指 Servlet 的对象从被创建到被销毁的过程。<?b>
(2)Servlet 的生命周期方法:
a.构造器:
- Servlet第一次处理请求时,会调用构造器,来创建Servlet实例。
- 只会调用一次,Servlet是单例模式,他是以多线程的方式调用service()方法.
- Servlet不是线程安全,所以尽量不要再service()方法中操作全局变量。
b.init()方法:
- 构造器调用之后马上被调用,用来初始化Servlet,只会调用一次。
c.service()方法:
- Servlet每次处理请求时都会调用service()方法,用来处理请求,会调用多次。
d.destroy()方法:
- Servlet对象销毁前(WEB项目卸载时)调用,用来做一些收尾工作,释放资源。
3、接口
①ServletConfig
(1)定义:当前Servlet的配置信息,每一个Servlet都有其唯一对应的ServletConfig。
<servlet>
<servlet-name>AServlet</servlet-name>
<servlet-class>com.atguigu.servlet.AServlet</servlet-class>
<init-param>
<param-name>user</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123123</param-value>
</init-param>
</servlet>
(2)获取:由Tomcat服务器创建,最终作为参数传递到init()方法中,我们可以在init()方法直接使用。
当我们通过继承HttpServlet创建Servlet时,由于父类已经实现ServletConfig接口,
所以我们可以在Servlet中直接调用ServletConfig的方法。
(3)功能:
【1】 获取Servlet的别名
【2】 获取当前Servlet的初始化参数。
<init-param>
<param-name>user</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123123</param-value>
</init-param>
【3】 获取当前WEB应用的ServletContext对象。
②ServletContext
(1)定义:当前的WEB应用,一个WEB应用对应一个唯一的ServletContext对象,
ServletContext对象在项目启动时创建,在项目卸载时销毁。
(2)获取:通过ServletConfig的getServletContext()方法获取。
(3)功能:
【1】 可以获取整个WEB应用的初始化参数
<context-param>
<param-name>phone</param-name>
<param-value>1388888888</param-value>
</context-param>
【2】 可以获取资源的真实路径(物理路径),主要在文件的上传和下载时使用。
【3】 可以作为一个域对象在不同的web资源之间共享数据。(下回分解)
ServletContext 的其他作用: 1)作为域对象使用 2)请求转发
请求转发和重定向的区别?
1)地址是否发生变化
前者不会
后者进一步请求会发生变化
2)是否需要用到域对象
前者在业务中跳转页面,需要用域对象(request 域)
后者在跳转页面后,无法从 request 域中获取数据
3)从内存角度的 request 对象
前者始终只有一个 request 对象(还需要用到业务需求上)
后者会产生两个 request 对象
转发 | 重定向 | |
---|---|---|
请求的次数 | 1 | 2 |
发生的位置 | 服务器内部 | 浏览器 |
浏览器地址栏 | 不改变 | 改变 |
浏览器的感知 | 不知道 | 知道 |
GenericServlet - 通用Servlet的父类 - 相比Servlet接口GenericServlet更加简单一些,但是我们最终实际上使用的HttpServlet