Java学习路线:Servlet(一)认识和创建Servlet

news2025/1/4 11:45:38

目录

创建Servlet

@WebServlet

Servlet的生命周期

认识和使用HttpServlet 


Servlet是JavaEE的一个标准,他就像JDBC一样,由官方定义了一系列接口,而具体的实现由我们自己编写,最后交给Web服务器如Tomcat来运行我们编写的Servlet

Servlet的作用是实现动态网页相应,使用Servlet后,不再是直接由Tomcat服务器发送我们编写好的静态网页内容,而是由我们通过JAVA代码进行动态拼接,实现动态网页的返回

创建Servlet

前提:

  • 安装idea专业版
  • 在idea中配置好Tomcat

在idea中点击File->New Project,选择Jakarta EE,在application sever中选择配置好对应的Tomcat版本,点击next

系统会为我们自动生成Servlet的实现类

@WebServlet

为了将Servlet注册到Tomcat中,需要使用注解@WebServlet

@WebServlet的定义如下:

public @interface WebServlet {
    String name() default "";

    String[] value() default {};

    String[] urlPatterns() default {};

    int loadOnStartup() default -1;

    WebInitParam[] initParams() default {};

    boolean asyncSupported() default false;

    String smallIcon() default "";

    String largeIcon() default "";

    String description() default "";

    String displayName() default "";
}

 

  • name属性就是Servlet的名称
  • urlPatterns和value的功能相同,表示当前Servlet的访问路径:

 

@WebServlet("/test")

 

这个访问路径不仅仅可以是一个固定值,也可以使用通配符匹配:

@WebServlet("/test/*")

以上代码表示所有匹配  /test/随便什么  的路径名称都可以访问该Servlet

也可以使用扩展名称的匹配:

@WebServlet("*.js")

这样的话任何以.js结尾的文件,都会由我们自己定义的Servlet处理

当路径为“/”的时候,表示如果没有找到匹配当前访问路径的Servlet,就会使用该Servlet进行处理

此外,还可以为一个Servlet配置多个访问路径

@WebServlet("/test1","/test2")
  • loadOnStartUp属性决定了是否在Tomcat启动时就加载此Servlet

默认情况下,Servlet只有在被访问时才会加载

当loadOnStartUp=-1(默认)时,表示不在启动时加载,当loadOnStartUp>0时,开启启动时加载,且数字的大小决定了此Servlet启动的优先级,数字越小启动的优先级越高

 

Servlet的生命周期

我们来看一下Servlet接口中存在的5个方法:

@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) throws ServletException, IOException {

    }

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

    @Override
    public void destroy() {

    }
}

 

  • 在首次启动服务器时,会先调用构造方法(如果有的话)
  • 接着调用init方法, 进行Servlet初始化
  • 初始化结束后,会调用service方法来处理客户端的请求
  • 在关闭浏览器时,会调用destroy方法来销毁Servlet。

 

需要注意的是,尽管多次尝试去访问页面,init和构造方法都只会执行一次

而每次访问都会创建一个新的线程,去执行service方法,来处理用户的请求

我们注意到,service方法中传入了两个参数,分别为servletRequest和servletResponse

实际上,用户发起的HTTP请求被Tomcat服务器封装成了一个servletRequest对象,我们得到的是Tomcat服务器帮助我们创建的实现类,HTTP请求报文中的所有内容,都可以从servletRequest对象中获取

同理,servletResponse就是我们需要返回给浏览器HTTP响应报文实体类封装

 

认识和使用HttpServlet 

 

我们知道,访问浏览器有很多不同的请求,例如GET、POST等,而HttpServlet 则是 Java Servlet API 中的一个抽象类,专门用于处理 HTTP 请求和响应

HttpServlet 提供了处理常见 HTTP 方法,如 GETPOSTPUTDELETE

httpServlet中最常用的方法:

  • doGet(HttpServletRequest request, HttpServletResponse response):处理 HTTP GET 请求
  • doPost(HttpServletRequest request, HttpServletResponse response):处理 HTTP POST 请求

 

而我们只需要继承httpServlet并重新doxxx方法,即可以处理http请求

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String name = request.getParameter("name");
    response.getWriter().write("Hello, " + name);
}

重写了doGet方法后,在使用get方法访问浏览器后,会在浏览器中打印出hello和请求中的参数name对应的值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2269189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

公路边坡安全监测中智能化+定制化+全面守护的应用方案

面对公路边坡的安全挑战,我们如何精准施策,有效应对风险?特别是在强降雨等极端天气下,如何防范滑坡、崩塌、路面塌陷等灾害,确保行车安全?国信华源公路边坡安全监测解决方案,以智能化、定制化为…

机器人对物体重定向操作的发展简述

物体重定向操作的发展简述 前言1、手内重定向和外部重定向2、重定向原语3、重定向状态转换网络4、连续任意姿态的重定向5、利用其他环境约束重定向总结Reference 前言 对于一些特殊的任务(如装配和打包),对物体放置的位姿由明确的要求&#…

【AndroidAPP】权限被拒绝:[android.permission.READ_EXTERNAL_STORAGE],USB设备访问权限系统报错

一、问题原因 1.安卓安全性变更 Android 12 的安全性变更,Google 引入了更严格的 PendingIntent 安全管理,强制要求开发者明确指定 PendingIntent 的可变性(Mutable)或不可变性(Immutable)。 但是&#xf…

windows系统安装完Anaconda之后怎么激活自己的虚拟环境并打开jupyter

1.在win主菜单中找到Anaconda安装文件夹并打开终端 文件夹内有所有安装后的Anaconda的应用软件和终端窗口启动窗口 点击Anaconda Prompt(Anaconda)就会打开类似cmd的命令终端窗口,默认打开的路径是用户名下的路径 2.激活虚拟环境 使用命令…

django33全栈班2025年004 录入数据

前言 通过前面的学习, 我们已经算是Python基本入门了. 如果你能熟练的掌握的话, 至少让你换台电脑, 在新电脑上搭建Python的开发环境肯定是没问题的. 我们呢也学习了第一行Python代码, 但是我们不知道这行代码是什么意思, 为什么能够运行, 怎么就能输出到控制台呢? 还有, …

Zeotero安装”translate for Zotero“插件

一、Zeotero6translate for Zotero 1.0.28 二、打开Zeotero官网,找到下面圈起来的 三、点击以上连接跳转,Releases windingwind/zotero-pdf-translate 下载 zotero-pdf-翻译.xpi 四、打开zeotero,工具>附加组件(或插件&am…

郑州时空-TMS运输管理系统 GetDataBase 信息泄露漏洞复现

0x01 产品简介 郑州时空-TMS运输管理系统是一款专为物流运输企业设计的综合性管理软件,旨在提高运输效率、降低运输成本,并实现供应链的协同运作。系统基于现代计算机技术和物流管理方法,结合了郑州时空公司的专业经验和技术优势,为物流运输企业提供了一套高效、智能的运输…

小程序信息收集(小迪网络安全笔记~

免责声明:本文章仅用于交流学习,因文章内容而产生的任何违法&未授权行为,与文章作者无关!!! 附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,…

前端(九)js介绍(2)

js介绍(2) 文章目录 js介绍(2)一、函数1.1函数的两种形式1.2函数的作用域1.3声明与提升 二、bom操作三、dom操作 一、函数 1.1函数的两种形式 //有参函数 //js中的函数只能返回一个值,如果要返回多个需要放在数组或对象中 function func(a,b){return ab } func(1,…

国标GB28181-2022视频平台EasyGBS如何获取设备镜像ID?

在安防监控领域,随着技术的发展和标准的统一,国标GB28181-2022成为了视频监控系统互联互通的重要协议。EasyGBS作为一个遵循该国标的平台,为用户提供了强大的视频监控和管理功能。 在EasyGBS平台的使用过程中,设备镜像ID的获取是一…

【ADAS】高级驾驶辅助系统

自动驾驶入门—ADAS(Advanced Driving Assistance System)高级辅助驾驶系统 一、ADAS的官方介绍 二、信息辅助 1、行车监控类 2、危险预警类 3、驾驶便利类 三、控制辅助 1、紧急应对类 2、驾驶便利类 3、是车道保持类 4、智能灯光类 参考链接&#xff1…

Spring Boot + MinIO 实现分段、断点续传,让文件传输更高效

一、引言 在当今的互联网应用中,文件上传是一个常见的功能需求。然而,传统的文件上传方式在面对大文件或不稳定的网络环境时,可能会出现性能瓶颈和上传失败的问题。 传统文件上传,就像是用一辆小推车搬运大型家具,一…

搭建android开发环境 android studio

1、环境介绍 在进行安卓开发时,需要掌握java,需要安卓SDK,需要一款编辑器,还需要软件的测试环境(真机或虚拟机)。 早起开发安卓app,使用的是eclipse加安卓SDK,需要自行搭建。 目前开…

开发过程优化·自定义鼠标右键菜单

为了改善日常工作中的开发体验,我希望在某个项目目录下点击鼠标右键的快捷菜单,让程序自动为该项目引入一个内部的工具库文件并挂载到项目中。 实现该功能需要组装一些零碎的电脑应用知识,下面徐徐渐进依次说明: 1、在右键菜单中…

搭建ZooKeeper分布式集群

ZooKeeper分布式集群部署旨在通过多节点协作实现高可用性和容错能力。本次实战以三台服务器(master、slave1、slave2)为例,详细介绍了从下载安装到配置启动的全过程。首先,下载并解压ZooKeeper安装包至/usr/local目录,…

elasticsearch-java客户端jar包中各模块的应用梳理

最近使用elasticsearch-java客户端实现对elasticsearch服务的Api请求,现对elasticsearch-java客户端jar包中各模块的应用做个梳理。主要是对co.elastic.clients.elasticsearch路径下的各子包的简单说明。使用的版本为:co.elastic.clients:elasticsearch-…

【AIGC】使用Java实现Azure语音服务批量转录功能:完整指南

文章目录 引言技术背景环境准备详细实现1. 基础架构设计2. 实现文件上传功能3. 提交转录任务crul4. 获取转录结果 使用示例结果示例最佳实践与注意事项总结 引言 在当今数字化时代,将音频内容转换为文本的需求越来越普遍。无论是会议记录、视频字幕生成&#xff0c…

InstructGPT:基于人类反馈训练语言模型遵从指令的能力

大家读完觉得有意义记得关注和点赞!!! 大模型进化树,可以看到 InstructGPT 所处的年代和位置。来自 大语言模型(LLM)综述与实用指南(Amazon,2023) 目录 摘要 1 引言 …

kafka开机自启失败问题处理

前言:在当今大数据处理领域,Kafka 作为一款高性能、分布式的消息队列系统,发挥着举足轻重的作用。无论是海量数据的实时传输,还是复杂系统间的解耦通信,Kafka 都能轻松应对。然而,在实际部署和运维 Kafka 的…

在Linux上获取MS(如Media Server)中的RTP流并录制为双轨PCM格式的WAV文件

在Linux上获取MS(如Media Server)中的RTP流并录制为双轨PCM格式的WAV文件 一、RTP流与WAV文件格式二、实现步骤三、伪代码示例四、C语言示例代码五、关键点说明六、总结在Linux操作系统上,从媒体服务器(如Media Server,简称MS)获取RTP(Real-time Transport Protocol)流…