当前位置: 首页 > news >正文

Servlet的注册和生命周期

Servlet的注册

添加注解`@WebServlet`来进行注册(推荐使用)

@WebServlet("/test")
public class TestServlet implements Servlet {
		...实现接口方法
}

在`web.xml`中进行注册

<servlet>
    <servlet-name>test</servlet-name>
    <servlet-class>com.example.webtest.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>test</servlet-name>
    <url-pattern>/test</url-pattern>
</servlet-mapping>

实际上,Tomcat服务器会为我们提供一些默认的Servlet,也就是说在服务器启动后,即使我们什么都不编写,Tomcat也自带了几个默认的Servlet,他们编写在conf目录下的web.xml中,它可以帮助我们去访问一些静态资源,这也是为什么我们启动Tomcat服务器之后,能够直接访问webapp目录下的静态页面。

探究Servlet的生命周期

@WebServlet("/test")
public class TestServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) {

    }

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

    @Override
    public void destroy() {

    }
}

 一个Servlet的生命周期为

- 首先执行构造方法完成 Servlet 初始化

- Servlet 初始化后调用 **init ()** 方法。

- Servlet 调用 **service()** 方法来处理客户端的请求。

- Servlet 销毁前调用 **destroy()** 方法。

- 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

实际上在Web应用程序运行时,每当浏览器向服务器发起一个请求时,都会创建一个线程执行一次`service`方法,来让我们处理用户的请求,并将结果响应给用户

整个HTTP请求报文中的所有内容,都可以通过`HttpServletRequest`对象来获取

`ServletResponse`是服务端的响应内容,可以在这里填写我们想要发送给浏览器显示的内容

相关文章:

  • [Latex] \bibitem{} | .bbl 格式参考文献转换与获得
  • cmake和makefile区别和cmake指定编译器(cmake -G)
  • JavaWeb对于Listener的运用详解【利用Session统计在线人数】
  • Windows命令: net与sc的区别
  • 向量数据库是如何检索的?基于 Feder 的 HNSW 可视化实现
  • 架构师的 36 项修炼第11讲:致未来的架构师
  • 基于springboot+vue的商城系统(电商平台)
  • Linux CentOS 8(用户组的管理实验)
  • .net core开源商城系统源码,支持可视化布局小程序
  • ElasticSearch诞生
  • DRM系列(7)之drmModeAtomicCommit底层流程
  • R语言ggplot2可视化:使用ggpubr包的ggline函数可视化折线图(点线图、line plot)
  • PHP FTP 函数
  • PHP Filter 函数
  • 14---OpenCV:图像检测之边缘检测
  • Android 架构优化~MVP 架构改造
  • Django 博客开发教程 16 - 统计文章阅读量
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Selenium实战教程系列(二)---元素定位
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 从重复到重用
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 实战|智能家居行业移动应用性能分析
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 听说你叫Java(二)–Servlet请求
  • 赢得Docker挑战最佳实践
  • 你对linux中grep命令知道多少?
  • ionic异常记录
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #图像处理
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (十一)手动添加用户和文件的特殊权限
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)h264中avc和flv数据的解析
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET Core 成都线下面基会拉开序幕
  • .net core使用ef 6
  • .NET MVC第五章、模型绑定获取表单数据
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .net经典笔试题
  • .NET项目中存在多个web.config文件时的加载顺序
  • .net中应用SQL缓存(实例使用)
  • @vue/cli 3.x+引入jQuery
  • [CSS] 点击事件触发的动画
  • [go] 策略模式
  • [IE技巧] IE 中打开Office文件的设置
  • [leetcode]114. Flatten Binary Tree to Linked List由二叉树构建链表
  • [python3] 装饰器
  • [Python人工智能] 四十.命名实体识别 (1)基于BiLSTM-CRF的威胁情报实体识别万字详解
  • [svc]ftp协议数据连接的2种模式
  • [SWPUCTF 2021 新生赛]crypto8
  • [SWPUCTF 2021 新生赛]ez_unserialize