Web 三大组件

Servlet 程序

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
一个 Servlet 只会有一个对象,服务所有的请求。一次创建,到处服务。

Servlet 的生命周期

即 从 Servlet 被创建 到 Servlet 被销毁的过程:实例化、初始化、服务、销毁

  1. 执行 Servlet 构造方法创建对象,即实例化
  2. 执行 init() 初始化 (在第一次访问的时候,创建 Servlet 程序才会调用,只执行一次)
  3. 执行 service() (每次访问都会调用)
  4. 执行 destroy() 销毁 (在 web 工程停止的时候才会调用,即停止 Tomcat时调用)

    也可以指定 Servlet 在服务器第一次启动时被加载 执行 init() 初始化 init() 简单地创建或加载一些数据 service() 由 Servlet 容器 (即 Web 服务器 )调用 service() 来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。 每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务 destroy() 可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。 在调用 destroy() 之后,servlet 对象被标记为垃圾回收

实现 Servlet 的方式

方式1:实现 Servlet 接口

  1. public class HelloServlet implements Servlet {
  2. @Override
  3. public void init(ServletConfig servletConfig) throws ServletException {
  4. }
  5. @Override
  6. public ServletConfig getServletConfig() {
  7. return null;
  8. }
  9. @Override
  10. public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
  11. }
  12. @Override
  13. public String getServletInfo() {
  14. return null;
  15. }
  16. @Override
  17. public void destroy() {
  18. }
  19. }

方式2:继承 HttpServlet

  1. public class HelloServlet extends HttpServlet {
  2. @Override
  3. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  4. }
  5. @Override
  6. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  7. }
  8. }

方式3:继承 GenericServlet 类 (极少用)

  1. public class HelloServlet extends GenericServlet {
  2. @Override
  3. public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
  4. }
  5. }

其他知识点

ServletConfig 实现类 它是 Servlet 程序的配置信息类,他的作用

  1. @Override
  2. public void init(ServletConfig servletConfig) throws ServletException {
  3. // 获取初始化参数 init-param (web.xml 中指定)
  4. servletConfig.getInitParameter();
  5. // 获取所有的初始化参数
  6. servletConfig.getInitParameterNames();
  7. // 获取 ServletContext 对象
  8. servletConfig.getServletContext();
  9. // 获取 Servlet 程序的别名 servlet-name 的值(在 web.xml 中自己写的)
  10. servletConfig.getServletName();
  11. }

ServletContext 实现类 它表示 Servlet 上下文对象

  • 在 web 工程部署启动的时候创建。 在 web 工程停止的时候销毁
  • 一个 web 工程, 只有一个 ServletContext 对象实例
  • 域指的是存取数据的操作范围, 整个 web 工程

ServletContext 实现类 的作用

  • 像 Map 一样存取数据 |
    | 存数据 | 取数据 | 删除数据 | | —- | —- | —- | —- | | Map | put() | get() | remove() | | 域对象 | setAttribute() | getAttribute() | removeAttribute() |
  1. public class HelloServlet extends HttpServlet {
  2. @Override
  3. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  4. // 获取上下文参数 context-param (web.xml 中配置的)
  5. ServletContext context = getServletConfig().getServletContext();
  6. String username = context.getInitParameter("username");
  7. // 获取当前的工程路径, 格式: /工程路径
  8. String contextPath = context.getContextPath();
  9. // 获取工程部署后在服务器硬盘上的绝对路径
  10. // 斜杠被服务器解析地址为:http://ip:port/工程名/ 映射到 IDEA 代码的 web 目录
  11. System.out.println("工程部署的路径:" + context.getRealPath("/"));
  12. System.out.println("工程下 css 目录的绝对路径是:" + context.getRealPath("/css"));
  13. }
  14. }

context-param & init-param 的区别

  • context-param 是 application 范围内的参数,存放在 servletcontext 中
  • init-param 是 servlet 范围内的参数,只能在 servlet 的 init() 中取得 ```xml name value

name value 0

  1. <a name="CKMBE"></a>
  2. ## Filter 过滤器
  3. **Filter 的生命周期**:实例化、init() 初始化、doFilter() 执行、destroy() 销毁<br />Filter 过滤器可以实现以下目的:(**拦截请求,过滤响应**)
  4. - 在客户端的请求访问后端资源之前,拦截这些请求。
  5. - 在服务器的响应发送回客户端之前,处理这些响应。
  6. Filter 的执行顺序与在 web.xml 配置文件中的配置顺序一致,一般把 Filter 配置在所有的 Servlet 之前<br />**FilterConfig 类的作用**
  7. ```java
  8. public void init(FilterConfig filterConfig) throws ServletException {
  9. // 获取 Filter 的名称 filter-name 的内容
  10. filterConfig.getFilterName();
  11. // 获取在 web.xml 中配置的 init-param 初始化参数
  12. filterConfig.getInitParameter("username");
  13. // 获取 ServletContext 对象
  14. filterConfig.getServletContext();
  15. }

Listener 监听器

Listener 监听器的作用:监听某种事物的变化,然后通过回调函数,反馈给客户(程序)去做一些相应的处理
ServletContextListener 监听器

  • ServletContextListener 可以监听 ServletContext 对象的创建 和 销毁
  • 监听到 ServletContext 对象创建 和 销毁之后都会分别调用 ServletserContextListener 监听器的方法反馈

    1. public interface ServletContextListener extends EventListener {
    2. //在 ServletContext 对象创建之后马上调用,做初始化
    3. public void contextInitialized(ServletContextEvent sce);
    4. //在 ServletContext 对象销毁之后调用
    5. public void contextDestroyed(ServletContextEvent sce);
    6. }
  • 使用步骤:编写一个类去实现 ServletContextListener、实现其两个回调方法、到 web.xml 中去配置监听器

    Cookie & Session

    Cookie

  • Cookie 是服务器发送到浏览器,并保存在浏览器端的一小块数据,用于在客户端记录用户的数据。

  • 浏览器下次访问该服务器时,会自动携带该块数据,将其发送给服务器。

Session

  • Session 是 JavaEE 的标准,用于在服务器端记录客户端信息
  • 数据存放在服务器端更安全,但是会增加服务器端的内存压力