7、Servlet——Servlet核心接口和类、创建Servlet的三种方式

目录

一、Servlet核心接口和类

1、Servlet接口

2、GenericServlet抽象类 

3、HttpServlet类 

二、创建Servlet的三种方式

1、实现Servlet接口 

2、继承GenericServlet抽象类

3、继承HttpServlet类

三、web.xml中其他配置

1、启动优先级:

2、url-pattern定义匹配规则

四、 使用注解配置


一、Servlet核心接口和类

1、Servlet接口

在Servlet API中最重要的是Servlet接口,所有Servlet都会直接或间接的与该接口发生联系,或是直接实现该接口,或间接继承自实现了该接口的类。该接口中包括以下5个方法:

destroy()
ServletConfig getServletConfig()
String getServletInfo()
void init(ServletConfig arg0)
void service(ServletRequest arg0, ServletResponse arg1)

void init(ServletConfig arg0) Servlet实例化后,Servlet容器调用该方法完成Servlet的初始化工作
ServletConfig getServletConfig() 获取Servlet对象的配置信息
String getServletInfo() 返回包含Servlet对象的配置信息
void service(ServletRequest arg0, ServletResponse arg1)

负责响应用户的请求,当容器接收到客户端访问Servlet对象的请求时就会调用此方法。

容器会构造一个表示客户端请求信息的ServletRequest对象和一个用于响应客户端的ServletResponse对象作为参数传递给service()方法,在service()方法中可以通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse

void destroy() 负责释放Servlet对象占用的资源,当服务器关闭或者Servlet对象被移除时会销毁Servlet对象,此时会调用此方法

2、GenericServlet抽象类 

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

3、HttpServlet类 

HttpServlet是在继承GenericServlet的基础上进一步的扩展。提供将要被子类化以创建适用于Web站点的HTTP servlet的抽象类

HTTPServlet的子类至少必须重写一个方法,该方法通常是:

  • doGet():用于HTTP GET请求

  • doPost():用于HTTP POST请求

  • doPut():用于HTTP PUT请求

  • doDelete():用于HTTP DELETE请求

二、创建Servlet的三种方式

1、实现Servlet接口 



    
        myservlet
        com.servlet.demo.MyServlet
    
    
        myservlet
        /MyServlet
    
package com.servlet.demo;

import javax.servlet.*;
import java.io.IOException;

public class MyServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("第一个Servlet案例:实现Servley接口创建Servlet类");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

7、Servlet——Servlet核心接口和类、创建Servlet的三种方式_第1张图片

2、继承GenericServlet抽象类

实现一个类必须实现Servlet接口,但是真正使用到的只有一个service方法,其他的方法都没有使用到;GenericServlet抽象类只需要重写service方法即可。



    
        myservlet
        com.servlet.demo.MyGenericServlet
    
    
        myservlet
        /MyGenericServlet
    

package com.servlet.demo;

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

public class MyGenericServlet extends GenericServlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("第二个Servlet案例:继承GenericServlet抽象类创建Servlet");
    }
}

 7、Servlet——Servlet核心接口和类、创建Servlet的三种方式_第2张图片

3、继承HttpServlet类

创建一个类,继承HttpServlet类,重写doGet()doPost()方法,在doGet()方法中编辑要处理的代码,在doPost()中调用doGet()方法

        --->request是请求,浏览器中的请求,就通过request来获取(request操作后端);

        --->response是响应,浏览器的响应可以通过response来实现(response操作前端)。

在浏览器中输入访问地址,访问地址相当于发送一个请求,到后台来,servlet类处理请求,在servlet来中默认找doGet方法



    
        myservlet
        com.servlet.demo.MyHttpServlet
    
    
        myservlet
        /MyHttpServlet
    
package com.servlet.demo;

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 MyHttpServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("第三个servlet案例,继承HttpServlet类创建Servlet");
        resp.getWriter().println("Hello!Servlet");
    }

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

7、Servlet——Servlet核心接口和类、创建Servlet的三种方式_第3张图片

7、Servlet——Servlet核心接口和类、创建Servlet的三种方式_第4张图片

通过response对象调用一个输出流(PrintWriter),在浏览器页面进行输出。 

三、web.xml中其他配置

1、启动优先级:

节点中可设置启动的Servlet启动的优先级

1

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

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

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

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

2、url-pattern定义匹配规则

    精确匹配        /             具体的名称  只有url路径是具体的名称的时候才会触发Servlet
    后缀匹配        *.xxx      只要是以xxx结尾的就匹配触发Servlet
    通配符匹配      /*         匹配所有请求,包含服务器的所有资源
    通配符匹配      /          匹配所有请求,包含服务器的所有资源,不包括.jsp

四、 使用注解配置

所有的注解都以“@”开头(如@Override(重写));Servlet注解格式:@WebServlet( )

package com.servlet.study;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet(name = "Servlet", value = "/Servlet")
public class Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("第四个servlet案例:注解的使用");
        response.getWriter().println("@WebServlet");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

7、Servlet——Servlet核心接口和类、创建Servlet的三种方式_第5张图片 7、Servlet——Servlet核心接口和类、创建Servlet的三种方式_第6张图片

@WebServlet注解常用属性:

name:Servlet名字(可选);

value:配置url路径,可以配置多个;

urlPatterns:配置url路径,和value作用一样,不能同时使用;

loadOnStartup:配置Servlet的创建的时机,如果是0或者正数,启动程序时创建,如果是负数,则访问时创建。数字越小优先级越高。

 

 

 

你可能感兴趣的:(Servlet,servlet,java,前端)