本系列博客汇总在这里:JavaWeb_servlet 汇总
目录
- 一、第一个例子
 - 二、操作流程
 - 三、实际操作
 - 四、JavaWeb 请求响应原理如下:
 
一、第一个例子
实现一个 servlet
servlet 是运行在 Web 服务器中的小型 Java 程序。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。也就是说,Servlet 是由我们自己来完成的!但 Servlet 一定要实现 javax.servlet.Servlet 接口,并且还要在 web.xml 文件中部署!不然 Tomcat 是找不到我们写的 Servlet 的,点击下载API。Servlet 接口

javax.servlet.Servlet 接口中方法如下:
(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。基本没用!
二、操作流程
- 第一步:创建 web project 实现 Servlet 的接口
 - 第二步:配置 servlet 的访问路径
 
三、实际操作
- 新建工程


 - 建包建类


 - 编码(实现 Servlet 的接口,实现接口中的方法)(完整源码见文末)

 - 配置 servlet 的访问路径(完整源码见文末)

 - 部署项目到 tomcat 服务器

 - 启动 tomcat

 - 测试,在浏览器地址栏输入 http://localhost:8080/servlet_demo1/hello 的结果图


 
四、JavaWeb 请求响应原理如下:
- 当 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 类名字(一个字符串而已)。
 - Tomcat 通过 Servlet 类名字去查找内存中是否存在 Servlet 对象,如果存在,那么就不用再去创建,直接获取这个 Servlet 实例,调用它的 service() 方法完成请求!
 - 如果这个 Servlet 不存在,那么 Tomcat 会通过反射来创建 Servlet 实例,并把 Servlet 实例存放到 Servlet 池中,再去调用 Servlet 的 service 方法处理请求。
 - 以上操作完整源码
demo1.java - web.xml
 
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());
  }
} 
<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>如有错误,欢迎指正!









