Servlet学习日记5——Servlet核心接口与类

目录

一、Servlet 核心接口和类

1.1 Servlet 接口

1.2 GenericServlet抽象类

1.3 HttpServlet类(推荐使用这个)

1.4 注意

二、servlet的两种配置方式

2.1 配置 web.xml(Servlet2.5之前使用)

2.2 使用注解(Servlet3.0之后支持,推荐使用)


一、Servlet 核心接口和类

在Servlet体系结构中,除了实现 Servlet 接口,还可以通过继承 GenericServlet 或 HttpServlet 类,完成编写。

1.1 Servlet 接口

在Servlet API中最重要的是Servlet接口,所有Servlet都会直接或间接的与该接口发生联系,或是直接实现该接口,或间接继承自实现了该接口的类。

该接口包括以下五个方法:

init(ServletConfig config)

ServletConfig getServletConfig()

service(ServletRequest req,ServletResponse res)

String getServletInfo()

destroy()

1.2 GenericServlet抽象类

GenericServlet 使编写 Servlet 变得更容易。它提供生命周期方法 init 和 destory 的简单实现,要编写一般的 Servlet,只需重写抽象 Servlet 方法即可

1、抽象类源码:

Servlet学习日记5——Servlet核心接口与类_第1张图片

 Servlet学习日记5——Servlet核心接口与类_第2张图片

 Servlet学习日记5——Servlet核心接口与类_第3张图片

 Servlet学习日记5——Servlet核心接口与类_第4张图片

service是抽象方法,子类必须重写

2、继承抽象类写法:

Servlet学习日记5——Servlet核心接口与类_第5张图片

package com.ha.servlet;

import javax.servlet.GenericServlet;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;

public class GenServlet extends GenericServlet {
    
    public void service(ServletRequest ServletRequest, ServletResponse ServletRespense) throws IOException {
        System.out.println("hello world");
    }
}

3、配置文件增加两行:

Servlet学习日记5——Servlet核心接口与类_第6张图片

4、运行

Servlet学习日记5——Servlet核心接口与类_第7张图片

1.3 HttpServlet类(推荐使用这个)

httpServlet是继承GenericServlet的基础上进一步的拓展。

提供将要被子类化以创建适用于web站点的 HTTP servlet 的抽象类。HttpServlet的子类至少必须重写一个方法,该方法通常是以下这些方法之一:

        doGet,如果 servlet 支持 HTTP GET 请求

        doPost,用于 HTTP POST 请求

        doPut,用于 HTTP PUT 请求

        doDelete,用于 HTTP DELETE 请求

1、抽象类源码

Servlet学习日记5——Servlet核心接口与类_第8张图片

 抽象类进行了重写,给不同的处理方式,进行不同的请求

Servlet学习日记5——Servlet核心接口与类_第9张图片

 Servlet学习日记5——Servlet核心接口与类_第10张图片

2、代码

因为有中文,所以在cmd命令行编译Java的时候要加上这一句话 -encoding utf8

Servlet学习日记5——Servlet核心接口与类_第11张图片

package com.ha.servlet;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class HttpsServlet extends HttpServlet {
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
        System.out.println("hello HttpsServlet");
    }

    /*
     * HttpsServlet要求所有的service请求要跟Http协议有关,
     * 下面的普通的service 和 上面的重载的 不同之处有
     *  一、修饰符不同
     *   public是接口提供的
     *   protected是HttpServlet重载的
     *  二、参数列表不同
     *   HttpServletRequest、HttpServletResponse
     *   ServletRequest、ServletResponse
     */
    /* 
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
    }
    */
}

3、配置文件增加两行:

Servlet学习日记5——Servlet核心接口与类_第12张图片

4、运行

Servlet学习日记5——Servlet核心接口与类_第13张图片

5、HttpServlet的特点

根据不同的请求方式处理不同的结果

package com.ha.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class HttpsServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("这是get请求过来的内容");
    }

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("这是post请求过来的内容");
    }
}

Servlet学习日记5——Servlet核心接口与类_第14张图片

浏览器访问的方式是get,

1.4 注意

Servlet学习日记5——Servlet核心接口与类_第15张图片

配置文件中的名字不能够相同,不然tomcat会报错 

地址配置错误(com.ha.servlet. ...)或者访问的时候输入的URL(.../hss)错误也会报404错误

二、servlet的两种配置方式

2.1 配置 web.xml(Servlet2.5之前使用)

1、配置





  
  
    my
    com.ha.servlet.myServet 
  

  
  
    my 
    /servlet  
  


  
    gs
    com.ha.servlet.GenServlet
  

  
    gs
    /gs
  


  
    hs
    com.ha.servlet.HttpsServlet
  

  
    hs
    /hs
  


2、url-pattern定义匹配规则,取值说明:

精确匹配        /具体的名称        只有url路径是具体的名称的时候才会触发Servlet

后缀匹配        *.xxx                   只要是以.xxx结尾的就匹配出发Servlet

通配符匹配    /*                         匹配所有请求,包含服务器的所有资源

通配符匹配    /                          匹配所有请求,包含服务器的所有资源,不包括.jsp

例1

Servlet学习日记5——Servlet核心接口与类_第16张图片

浏览器中输入:

http://localhost:8080/myweb/abc.action

会执行HttpsServlet.class这个文件

例2

Servlet学习日记5——Servlet核心接口与类_第17张图片

 浏览器中输入:

http://localhost:8080/myweb/[任何内容]

会执行HttpsServlet.class这个文件

如果输入的是gs等精确访问的内容,那么就去执行GenServlet.class这个文件

例3

使用通配符匹配 /,在浏览器中输入:

http://localhost:8080/myweb/aaa.jsp

不会执行对应的.class文件

3、load-on-startup

(1)元素标记容器是否应该在web应用程序启动的时候就加载这个servlet。

(2)它的值必须是一个整数, 表示servlet被加载的先后顺序。

(3)如果该元素的值为负数或者没有设置,则容器会当Servlet被请求时再加载。

(4)如果值为正整数或者0时,表示容器在应用启动时就加载并初始化这个servlet,值越小, servlet的优先级越高,就越先被加载。值相同时,容器就会自己选择顺序来加载。






  
  
    my
    com.ha.servlet.myServet 
    0
  

  
  
    my 
    /servlet  
  


  
    gs
    com.ha.servlet.GenServlet
    1
  

  
    gs
    /gs
  


  
    hs
    com.ha.servlet.HttpsServlet
    2
  

  
    hs
    /hs
  

Servlet学习日记5——Servlet核心接口与类_第18张图片

 Servlet学习日记5——Servlet核心接口与类_第19张图片

 Servlet学习日记5——Servlet核心接口与类_第20张图片

 运行结果:

Servlet学习日记5——Servlet核心接口与类_第21张图片

 注意:这个函数只执行一次

public void init(ServletConfig servletConfig) throws ServletException {
    System.out.println("GenServet init");
}

2.2 使用注解(Servlet3.0之后支持,推荐使用)

Servlet学习日记5——Servlet核心接口与类_第22张图片

Servlet学习日记5——Servlet核心接口与类_第23张图片

你可能感兴趣的:(JavaWeb,前端,java,服务器)