Servlet规范(1)——简单的Servlet建立

目录

一、servlet

1、什么是Servlet

2、什么是servlet容器

二、Servlet核心技术

1、Servlet的生命周期

2、实现一个Servlet


一、servlet

servlet规范文档:

Jakarta Servlet Specificationicon-default.png?t=M3K6https://jakarta.ee/specifications/servlet/5.0/jakarta-servlet-spec-5.0.html#what-is-a-servlet

1、什么是Servlet

       servlet 是基于 Jakarta 技术的 Web 组件,由容器管理,可生成动态内容。与其他基于 Jakarta 技术的组件一样,servlet 是独立于平台的 Java 类,它们被编译为平台中立的字节码,可以动态加载到支持 Jakarta 技术的 Web 服务器中并由其运行。容器,有时称为 servlet 引擎,是提供 servlet 功能的 Web 服务器扩展。Servlet 通过 Servlet 容器实现的请求/响应范例与 Web 客户端交互。

2、什么是servlet容器

       servlet 容器是 Web 服务器或应用程序服务器的一部分,它提供用于发送请求和响应的网络服务、解码基于 MIME 的请求以及格式化基于 MIME 的响应。servlet 容器还包含并管理 servlet 的整个生命周期。

       servlet 容器可以内置到主机 Web 服务器中,或者作为附加组件通过该服务器的本机扩展 API 安装到 Web 服务器。Servlet 容器也可以内置或可能安装到支持 Web 的应用程序服务器中。

       所有 servlet 容器都必须支持 HTTP 作为请求和响应协议,但可能支持其他基于请求/响应的协议,例如 HTTPS(基于 SSL 的 HTTP)。容器必须实现的 HTTP 规范的必需版本是 HTTP/1.1 和 HTTP/2。当支持 HTTP/2 时,servlet 容器必须支持“h2”和“h2c”协议标识符(如 HTTP/2 RFC 的 3.1 节中所指定)。这意味着所有 servlet 容器都必须支持 ALPN。因为容器可能具有 RFC 7234(HTTP/1.1 缓存)中描述的缓存机制,它可以在将来自客户端的请求传递给 servlet 之前修改它们,可以在将它们发送给客户端之前修改 servlet 产生的响应,或者可以响应在符合 RFC 7234 的情况下请求而不将它们传递给 servlet。

       servlet 容器可以对 servlet 执行的环境设置安全限制。可以使用 Java 平台定义的权限体系结构来设置这些限制。例如,一些应用服务器可能会限制Thread对象的创建,以确保容器的其他组件不会受到负面影响。

       Java SE 8 是构建 servlet 容器时必须使用的底层 Java 平台的最低版本。

二、Servlet核心技术

1、Servlet的生命周期

       servlet 通过定义良好的生命周期进行管理,该生命周期定义了如何加载和实例化、初始化、处理来自客户端的请求以及停止服务。这个生命周期在 API 中由所有 servlet 必须通过 或抽象类直接或间接实现的接口的initservicedestroy方法表示。jakarta.servlet.Servlet``GenericServlet``HttpServlet

package com.tang;
import jakarta.servlet.*;
import java.io.IOException;
import java.io.PrintWriter;
​
public class HelloServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init()...只会被执行一次!");
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        PrintWriter writer = servletResponse.getWriter();
        writer.print("hello Servlet");
        writer.flush();
    }
    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public void destroy() {
        System.out.println("destroy()..只有一次");
    }
}

2、实现一个Servlet

       当服务器接收到一个请求,就要有一个Servlet去处理这个请求,所以完成一个Servlet通常需要两步走。一方面要写一个java程序定义一个Servlet,另一方面需要配置Servlet确定Servlet要处理哪一个请求。

1)创建Servlet的三种方式

  • 实现javax.servlet.Servlet接口

    public class HelloServlet implements Servlet {
        @Override
        public void init(ServletConfig servletConfig) throws ServletException {
            System.out.println("init()...只会被执行一次!");
        }
        @Override
        public ServletConfig getServletConfig() {
            return null;
        }
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            PrintWriter writer = servletResponse.getWriter();
            writer.print("helloServlet");
            writer.flush();
        }
        @Override
        public String getServletInfo() {
            return null;
        }
        @Override
        public void destroy() {
            System.out.println("destroy()..只有一次");
        }
    }
  • 继承javax.servlet.GenericServlet类

    public class HelloServlet2 extends GenericServlet {
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            PrintWriter writer = servletResponse.getWriter();
            writer.print("helloServlet");
            writer.flush();
        }
    }
  • 继承javax.servlet.http.HttpServlet类

    public class HelloServlet3 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            PrintWriter writer = resp.getWriter();
            writer.print("helloServlet");
            writer.flush();
        }
    }

一般用第三种会比较方便

       注意:创建Servlet文件后,需要在web.xml文件中完成Servlet的配置才能使用

配置Servlet:       使用web.xml文件配置

<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.tang.HelloServlet</servlet-class>
</servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello1</url-pattern>
    </servlet-mapping>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐富贵666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值