0
点赞
收藏
分享

微信扫一扫

JavaWeb_servlet(2)_ 第一个例子

倚然君 2022-03-30 阅读 114


本系列博客汇总在这里:JavaWeb_servlet 汇总


目录

  • ​​一、第一个例子​​
  • ​​二、操作流程​​
  • ​​三、实际操作​​
  • ​​四、JavaWeb 请求响应原理如下:​​

一、第一个例子

  1. 实现一个 servlet
    servlet 是运行在 Web 服务器中的小型 Java 程序。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。也就是说,Servlet 是由我们自己来完成的!但 Servlet 一定要实现 javax.servlet.Servlet 接口,并且还要在 web.xml 文件中部署!不然 Tomcat 是找不到我们写的 Servlet 的,点击下载API。

  2. Servlet 接口
    JavaWeb_servlet(2)_ 第一个例子_java
    javax.servlet.Servlet 接口中方法如下:
    JavaWeb_servlet(2)_ 第一个例子_java_02
    (1)​void init(ServletConfig servletConfig)​:当 Tomcat 创建 Servlet 实例后,马上调用 init() 方法。这个方法只在创建后调用一次!用来做 Servlet 初始化工作!一个 Servlet 实例只被创建一次,所以 init() 方法也只被调用一次!(本方法编写对 Servlet 的初始化代码)
    (2)​void service(ServletRequest request, ServletResponse response)​:Servlet 实例在每次处理请求时都调用 service() 方法。
    (3)​void destroy()​:当 Tomcat 要销毁 Servlet 实例时,会先调用 destroy() 方法,再销毁它。所谓销毁Servlet,其实就是在 Servlet 缓存池中把 Servlet 移除!一般只有 Tomcat 关闭时,才会销毁 Servlet 实例!
    (4)​ServletConfig getServletConfig()​:这个方法返回 ServletConfig 对象,但我们不能自己去创建ServletConfig 对象,所以一般我们会在 init() 方法中把 init() 方法的参数保存起来,然后再在本方法中返回它。ServletConfig 对象对应 web.xml 中当前 Servlet 实例的配置信息。
    (5)​String getServletInfo()​:这个方法只是返回一个字符串,用来说明当前 Servlet。基本没用!

二、操作流程

  1. 第一步:创建 web project 实现 Servlet 的接口
  2. 第二步:配置 servlet 的访问路径

三、实际操作

  1. 新建工程
    JavaWeb_servlet(2)_ 第一个例子_第一个例子_03
    JavaWeb_servlet(2)_ 第一个例子_java_04
  2. 建包建类
    JavaWeb_servlet(2)_ 第一个例子_tomcat_05
    JavaWeb_servlet(2)_ 第一个例子_xml_06
  3. 编码(实现 Servlet 的接口,实现接口中的方法)(完整源码见文末)
    JavaWeb_servlet(2)_ 第一个例子_xml_07
  4. 配置 servlet 的访问路径(完整源码见文末)
    JavaWeb_servlet(2)_ 第一个例子_第一个例子_08
  5. 部署项目到 tomcat 服务器
    JavaWeb_servlet(2)_ 第一个例子_第一个例子_09
  6. 启动 tomcat
    JavaWeb_servlet(2)_ 第一个例子_第一个例子_10
  7. 测试,在浏览器地址栏输入 http://localhost:8080/servlet_demo1/hello 的结果图
    JavaWeb_servlet(2)_ 第一个例子_第一个例子_11
    JavaWeb_servlet(2)_ 第一个例子_servlet_12

四、JavaWeb 请求响应原理如下:

  1. 当 Tomcat 接收到请求(http://localhost:8080/servlet_demo1/hello )后,Tomcat 会找到 servlet_demo1 项目中的 web.xml 文件,然后通过 hello 这个请求路径,查找处理这个请求的 Servlet 类型。这刚好与<url-pattern>/hello</url-pattern> 匹配,这说明存在一个可以通过这个请求的 Servlet。然后再通过<url-pattern>/hello</url-pattern> 查找到 <servlet-name>helloServlet</servlet-name>,然后再通过<servlet-name>helloServlet </servle-name>查找到<servlet-class>com.rl.servlet/demo1</servlet-class>。这时 Tomcat 已经得到了一个 Servlet 类名字(一个字符串而已)。
  2. Tomcat 通过 Servlet 类名字去查找内存中是否存在 Servlet 对象,如果存在,那么就不用再去创建,直接获取这个 Servlet 实例,调用它的 service() 方法完成请求!
  3. 如果这个 Servlet 不存在,那么 Tomcat 会通过反射来创建 Servlet 实例,并把 Servlet 实例存放到 Servlet 池中,再去调用 Servlet 的 service 方法处理请求。
  4. 以上操作完整源码
    demo1.java
  5. package com.wyx.servlet;
    import java.io.IOException;
    import javax.servlet.Servlet;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;

    public class demo1 implements Servlet
    {
    /**
    * 执行时机是 Servlet 的实例对象被销毁的时候调用,主要做一些收尾或清理的工作
    */
    public void destroy()
    {
    System.out.println("servlet 销毁了");
    }

    /**
    * 获得 ServletConfig 的配置对象
    */
    public ServletConfig getServletConfig()
    {
    return null;
    }

    /**
    * 获得当前的 Servlet 的一些属性信息(了解)
    */
    public String getServletInfo()
    {
    return null;
    }

    /**
    * 执行时机是当 Servlet 实例被创建的时候被调用,做初始化工作 ServletConfig:Servlet的配置对象,初始化的时候可以进行配置
    */
    public void init(ServletConfig arg0) throws ServletException
    {
    System.out.println("servlet组件被创建了");
    }

    /**
    * 执行时机是当一个请求来请求当前的 Servlet 的时候被调用,处理当前的 Servlet 的业务逻辑并且把相应返回给浏览器
    */
    public void service(ServletRequest request, ServletResponse response)
    throws ServletException, IOException
    {
    System.out.println("相应请求");
    response.getOutputStream().write("<font color='red'>你好,陌生人!</font>".getBytes());
    }
    }
  6. web.xml
  7. <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
    <display-name>servlet_demo</display-name>
    <servlet>
    <!-- 设置servlet的名字 -->
    <servlet-name>helloServlet</servlet-name>
    <!-- 具体的servlet的类 -->
    <servlet-class>com.wyx.servlet.demo1</servlet-class>
    </servlet>

    <servlet-mapping>
    <!-- 指定要映射 的servlet的名字 -->
    <servlet-name>helloServlet</servlet-name>
    <!-- servlet的具体映射路径 -->
    <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    </web-app>

如有错误,欢迎指正!



举报

相关推荐

0 条评论