zl程序教程

您现在的位置是:首页 >  工具

当前栏目

【JavaWeb】Servlet的应用全面讲解(一)

应用Servlet 讲解 全面 javaweb
2023-09-11 14:18:28 时间

一、Servlet的初步应用

应用Servlet,我们要以Java类去实现或继承相关类和接口去实现。常用的方法是继承HttpServlet类,来应用Servlet。除此之外,我们需要知道的是,HttpServlet也是通过继承GenericServlet类来实现符合http协议的Servlet应用。并且,GenericServlet类是通过实现Servlet接口来应用Servlet。因此,我们除了常规地可以继承HttpServlet类,还可以通过继承GenericServlet类或者实现Servlet接口来进行Servlet的初步应用。

(一)继承HttpServlet的应用

1. 步骤

/**
 * 实现servlet
 * 1. 创建普通Java类
 * 2. 实现Servlet的规范,继承HTTPServlet类
 * 3. 重写service方法,用来处理请求
 * 4. 设置注解@WebServlet(),指定访问的路径
 */

2. 代码演示

//@WebServlet的用法
//@WebServlet(name = "Servlet01",value = "/ser01")
//@WebServlet(name = "Servlet01",value = {"/ser01","/ser02"})
//@WebServlet(name = "Servlet01",urlPattens = "/ser01")
//@WebServlet(name = "Servlet01",urlPattens = {"/ser01","/ser02"})
@WebServlet("/ser01") // 路径中的‘/’ 不要忘记
public class Servlet01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 打印内容在控制台
        System.out.println("Hello Servlet!");
        //通过流输出数据到浏览器
        resp.getWriter().write("Hello Servlet?");
    }
}

(二)继承GenericServlet类的应用

1. 代码演示

@WebServlet("/ser02")
public class Servlet02 extends GenericServlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("继承GenericServlet类...");
    }
}

(三)实现Servlet接口的应用

1. 代码演示

@WebServlet("/ser03")
public class Servlet03 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接口...");
    }

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

    @Override
    public void destroy() {

    }
}

二、Servlet的方法

service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。本质上Service()方法才是servlet中真正用于处理请求的方法。

每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。

(1)service()

	//若Servlet存在service方法,则优先调用service方法处理get/post请求
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("service...");
    }

(2)doGet()

	//处理Get方法的请求
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Get请求...");
    }

(3)doPost()

	//处理Post方法的请求
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Post请求...");
        //可以调用Get请求
        doGet(req,resp);
    }

(4)Servlet的生命周期

/**
 * 演示Servlet生命周期
 */

@WebServlet("/ser05")
public class Servlet05 extends HttpServlet {
    /**
     * 就绪/服务方法(处理请求数据)
     * 系统方法,服务器自动调用
     * 当有请求到达Servlet时,就会调用该方法
     * 方法可以被多次调用
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Servlet被调用了...");
    }

    /**
     * 销毁方法
     * 系统方法,服务器自动调用
     * 当服务器关闭或应用停止时,调用该方法
     * 方法只会执行一次
     */
    @Override
    public void destroy() {
        System.out.println("Servlet被销毁了...");
    }

    /**
     * 初始化方法
     * 系统方法,服务器自动调用
     * 当请求到达Servlet容器时,Servlet容器会判断该Servlet对象是否存在,如果不存在,则创建实例并初始化
     * 方法指挥执行一次
     * @throws ServletException
     */
    @Override
    public void init() throws ServletException {
        System.out.println("Servlet被创建了...");
    }
}