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


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

  2. Servlet 接口
    JavaWeb_servlet(2)_ 第一个例子_servlet
    javax.servlet.Servlet 接口中方法如下:
    JavaWeb_servlet(2)_ 第一个例子_第一个例子_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)_ 第一个例子_xml_03
    JavaWeb_servlet(2)_ 第一个例子_java_04
  2. 建包建类
    JavaWeb_servlet(2)_ 第一个例子_servlet_05
    JavaWeb_servlet(2)_ 第一个例子_tomcat_06
  3. 编码(实现 Servlet 的接口,实现接口中的方法)(完整源码见文末)
    JavaWeb_servlet(2)_ 第一个例子_java_07
  4. 配置 servlet 的访问路径(完整源码见文末)
    JavaWeb_servlet(2)_ 第一个例子_servlet_08
  5. 部署项目到 tomcat 服务器
    JavaWeb_servlet(2)_ 第一个例子_tomcat_09
  6. 启动 tomcat
    JavaWeb_servlet(2)_ 第一个例子_xml_10
  7. 测试,在浏览器地址栏输入 http://localhost:8080/servlet_demo1/hello 的结果图
    JavaWeb_servlet(2)_ 第一个例子_servlet_11
    JavaWeb_servlet(2)_ 第一个例子_xml_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
    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.xml
    <?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>
    

如有错误,欢迎指正!