Web服务技术——Servlet

什么是 Servlet?

  1. 其实就是一个 Java 程序,运行在我们的 Web 服务器上,用于接收和响应客户端的 HTTP 请求。

  2. 更多的是配合动态资源来做。 当然静态资源也需要使用到 Servlet,只不过是Tomcat里面已经定义好了一个 DefaultServlet。

Servlet 的执行过程

第一步:类的定义

    package com.huang.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;
    
    /**
     *
     *@author	黄远志
     *@date		2019年7月4日下午7:08:19
     *@GitHub	https://github.com/huangyuanzhi1997
     */
    public class HelloServlet implements Servlet {
    
    	@Override
    	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
    		System.out.println("HelloServlet");
    	}
    	@Override
    	public void destroy() {
    	}
    
    	@Override
    	public ServletConfig getServletConfig() {
    
    		return null;
    	}
    
    	@Override
    	public String getServletInfo() {
    
    		return null;
    	}
    
    	@Override
    	public void init(ServletConfig config) throws ServletException {
    	}
    
    
    }

第二步:Servlet 的配置

    	<!-- 向tomcat报告, 我这个应用里面有这个servlet,名字叫做HelloServlet , 具体的路径是com.huang.servlet.HelloServlet -->
    	<servlet>
    		<servlet-name>HelloServlet</servlet-name>
    		<servlet-class>com.huang.servlet.HelloServlet</servlet-class>
    	</servlet>
    
    	<!-- 注册servlet的映射。 servletName : 找到上面注册的具体servlet,url-pattern: 在地址栏上的path一定要以/打头 -->
    	<servlet-mapping>
    		<servlet-name>HelloServlet</servlet-name>
    		<url-pattern>/a</url-pattern>
    	</servlet-mapping>

执行过程:

  1. 找到 Tomcat 应用
  2. 找到项目
  3. 找 web.xml,然后在里面找到 url-pattern,有没有哪一个 patten 的内容是 /a
  4. 找到第二步 servlet-mapping 中的那个 servlet-name(HelloServlet)
  5. 找到第二步上面定义的 servlet 元素中的 servlet-name(HelloServlet)
  6. 找到第二步下面定义的 servlet-class,然后开始创建该类的实例
  7. 继而执行该 servlet 中的 service 方法

Servlet 的通用写法:

        Servlet (接口)
             |
             |
        GenericServlet
             |
             |
        HttpServlet (用于处理http的请求)

定义一个类,继承 HttpServlet 复写 doGet 和 doPost

package com.huang.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 *@author	黄远志
 *@date		2019年7月4日下午7:51:01
 *@GitHub	https://github.com/huangyuanzhi1997
 */
public class HelloServlet02 extends HttpServlet {

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		System.out.println("HelloServlet02...");
	}

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		super.doGet(req, resp);
		System.out.println("get...");
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		super.doPost(req, resp);
		System.out.println("post...");
	}
}

Servlet 的生命周期

生命周期

从创建到销毁的一段时间。

生命周期方法

从创建到销毁,所调用的方法。

  1. init 方法
    在创建该 Servlet 的实例时,就执行该方法。一个 Servlet 只会初始化一次, init 方法只会执行一次。
    默认情况下是 : 初次访问该 Servlet,才会创建实例。
  2. service 方法
    只要客户端来了一个请求,那么就执行这个方法。该方法可以被执行很多次。 一次请求,对应一次 service 方法的调用。
  3. destroy 方法
    servlet 销毁的时候,就会执行该方法。
    (1). 该项目从 Tomcat 的里面移除。
    (2). 正常关闭 Tomcat 就会执行 shutdown.bat。

doGet 和 doPost 不算生命周期方法,所谓的生命周期方法是指,从对象的创建到销毁一定会执行的方法, 但是这两个方法,不一定会执行。

让 Servlet 创建实例的时机提前

  1. 默认情况下,只有在初次访问 Servlet 的时候,才会执行 init 方法。 有的时候,我们可能需要在这个方法里面执行一些初始化工作,甚至是做一些比较耗时的逻辑。
  2. 那么这个时候,初次访问,可能会在 init 方法中逗留太久的时间。 那么有没有方法可以让这个初始化的时机提前一点。
  3. 在配置的时候, 使用 load-on-startup 元素来指定, 给定的数字越小,启动的时机就越早。 一般不写负数, 从 2 开始即可。
       	<servlet>
       		<servlet-name>HelloServlet04</servlet-name>
       		<servlet-class>com.itheima.servlet.HelloServlet04</servlet-class>
       		<load-on-startup>2</load-on-startup>
       	</servlet>

什么是 ServletConfig

Servlet 的配置,通过这个对象,可以获取 Servlet 在配置的时候一些信息

  1. 未来我们自己开发的一些应用,使用到了一些技术,或者一些代码,我们不会。 但是有人写出来了。它的代码放置在了自己的 Servlet 类里面。
  2. 刚好这个 Servlet 里面需要一个数字或者叫做变量值。 但是这个值不能是固定了。 所以要求使用到这个 Servlet 的公司,在注册 Servlet 的时候,必须要在 web.xml 里面,声明 init-params。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章