Servlet

作者: iDevOps | 来源:发表于2019-09-17 10:32 被阅读0次

Servlet是一个接口,定义了java类被浏览器访问到tomcat的规则

创建一个Servlet实现类
  • 创建JavaEE项目


    image.png
  • 依赖
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
</dependency>
  • 定义一个类,实现Servlet接口
public class ServletDemo 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 {

    }

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

    @Override
    public void destroy() {

    }
}
  • 配置Servlet

web.xml

 <!--配置Servlet -->
<servlet>
    <servlet-name>demo</servlet-name>
    <servlet-class>com.test.web.servlet.ServletDemo</servlet-class>
</servlet>
        
<servlet-mapping>
    <servlet-name>demo</servlet-name>
    <url-pattern>/demo</url-pattern>
</servlet-mapping>
执行流程
  1. 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
  2. 查找web.xml文件,是否有对应的<url-pattern>标签体内容。
  3. 如果有,则在找到对应的<servlet-class>全类名
  4. tomcat会将字节码文件加载进内存,并且创建其对象
  5. 调用其方法
生命周期方法
  • init
    1.被创建,只执行一次,说明Servlet使得单例的
    2.默认Servlet会在第一次访问时被创建,可以通过配置修改Servlet的创建时机,在<servlet>标签下配置<load-on-startup>的值为0或正整数
    3.Servlet是单例的,多个用户同时访问时,可能存在线程安全问题,所以尽量不要在Servlet中定义成员变量
  • 提供服务
    每次访问Servlet时,Service方法都会被调用一次
  • 被销毁
    1.执行destroy方法,只执行一次
    2.服务器正常关闭时,Servlet被销毁,会执行
    3.destroy在Servlet被销毁之前执行,一般用于释放资源
Servlet3.0

支持注解了,可以不创建web.xml了

@WebServlet("/demo")
public class ServletDemo implements Servlet
Servlet常用实现类
  • GenericServlet
    抽象类
    将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象,将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可
  • HttpServlet
    抽象类
    对http协议的一种封装,简化操作,定义类继承HttpServlet,复写doGet/doPost方法。
# 可以定义多个路由地址
@WebServlet({"/demo1", "/demo2"})
public class ServletDemo implements HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}
HttpServletRequest 和 HttpServletResponse

HttpServletRequest 获取请求消息
HttpServletResponse 设置响应消息

ServletContext

代表整个web应用,可以和程序的容器(服务器)来通信

  • 获取
1. 通过request对象获取
request.getServletContext();
2. 通过HttpServlet获取
this.getServletContext();

相关文章

  • servlet 笔记

    servlet servlet 声明周期 Servlet 的线程安全 Servlet 获取配置信息 Servlet...

  • Servlet

    Servlet介绍 Servlet开发步骤 创建Servlet 配置Servlet 配置Servlet中设置初始化...

  • 深入理解Servlet技术

    1. 什么是servlet servlet Servlet是javax.servlet.Servlet包中定义的一...

  • Servlet与Jsp(1)

    Servlet 实现原理Servlet接口使Servlet容器能将Servlet类载入内存,并在Servlet实例...

  • web.xml不同版本之间头信息的区别

    一、Servlet 2.3 二、Servlet 2.4 三、Servlet 2.5 四、Servlet 3.0 五...

  • Servlet入门

    Servlet简介 Servlet(Servlet Applet)是Java Servlet的简称,称为小服务程序...

  • Servlet 实例

    Servlet 实例 Servlet 是服务 HTTP 请求并实现 javax.servlet.Servlet 接...

  • Java Servlet API

    Servlet 支持的版本 Servlet 3.0 新特性详解 Servlet 3.0 新特性概述Servlet ...

  • 简单认识Servlet

    Servlet与JSP的关系 初识Servlet Servlet层级关系 顶层Servlet接口 GenericS...

  • 2019-10-14 SpringMVC与Servlet接口 S

    SpringMVC与Servlet接口 Servlet接口规范 Servlet 接口 定义servlet接口规范i...

网友评论

      本文标题:Servlet

      本文链接:https://www.haomeiwen.com/subject/cgffuctx.html