JavaWeb小记——Servlet

news2024/11/25 9:59:26

目录

Servlet概念

Servlet快速入门

1.创建web项目

2.创建一个Java类,实现Servlet接口 

3.重写接口中的service()方法

4.配置Servlet——web.xml中

5.发布项目

6.发送请求,请求Servlet

Servlet原理

Servlet的生命周期

1.init()

2.service()

3.destroy()

Servlet配置对象——ServletConfig

1.获取初始化参数——getInitParameter(String str)

2.获取项目的上下文对象——ServletContext 

Servlet定义方式

注解方式配置Servlet

全局域对象——ServletContext

文件运行的真实路径


Servlet概念

运行在服务端的小程序

本质上是一个接口,定义了一个类被浏览器访问的规则。

作用:接收请求,处理请求,做出响应

Servlet快速入门

1.创建web项目

2.创建一个Java类,实现Servlet接口 

3.重写接口中的service()方法

4.配置Servlet——web.xml中

5.发布项目

6.发送请求,请求Servlet

 

Servlet原理

Servlet的生命周期

1.init()

默认情况下,Servlet第一次被访问时,被创建,调用init()方法。多次访问,只执行一次

servlet创建时机:  <load-on-startup>0</load-on-startup>

-1   表示在第一次被访问时创建

非负数   表示服务器启动时创建     数越小,优先级越高

2.service()

每一次被访问时,会调用service()方法提供服务。多次访问,多次执行。

3.destroy()

服务器关闭时,servlet被销毁。servlet在被销毁前,执行destroy()方法。

Servlet配置对象——ServletConfig

由服务器创建、管理和销毁。在init()方法中作为参数

ServletConfig是一个接口,在Servlet初始化的时候,有服务器创建其子类对象传递给 init()方法

配置对象中的方法:

1.获取初始化参数——getInitParameter(String str)

先要在配置文件(web.xml)中配置参数

然后在Java类中获取配置参数

请求访问后

2.获取项目的上下文对象——ServletContext 

Servlet定义方式

Java中有一个类,把Servlet接口中的四个方法重写,把service()方法抽象,这个类就是

GenericServlet。然后我们在定义一个类,继承于GenericServlet,把其中抽象的service()方法重写

这样我们就单独对service()方法进行了操作。

而这却不是我们最终的定义方式

Java中有一个类HttpServlet继承于这个GenericServlet,它也重写了service()方法。

它针对不同的请求方式进行处理。

这时,我们在定义一个类,继承于这个HttpServlet类,重写它的doGet()和doPost()方法。

但是,无论是get请求还是post请求,我们的业务逻辑总是相同,所有不用在doPost()方法中写和doGet()方法一样的内容,我们只需要在doPost()方法中写this.doGet(),就可以做到减少代码量和冗余量,以简便我们的代码工作。

但在实际开发中,这样定义一个类过于繁琐,IDEA就给我们提供了一个模板——Servlet模板

创建完之后是这样的:

下面是修改模板:

 

注解方式配置Servlet

value表示映射路径,name表示Servlet的名字,loadonstartup表示创建时机 等等

全局域对象——ServletContext

这个也叫项目的上下文对象,代表了整个web应用。

* 特点:
        * 由服务器创建
        * 单例

* 功能:
        * 域对象:在域的范围内共享数据
        * 范围:整个web应用
        * 存储所有用户共享的数据
                * setAttribute():
                * getAttribute():
                * removeAttribute():

* JavaWeb中四大域对象:
                * ServletContext:全局域对象,也叫项目的上下文对象,代表整个web应用
                * HttpSession:会话域
                * ServletRequest:请求域
                * PageContext:页面域

 

文件运行的真实路径

真实路径:指服务器路径

在项目编译后

在web目录下的文件,最终在项目的根目录下。

在web/WEB-INF下的文件,最终在 项目目录//WEB-INF下

在src下的文件,最终在 项目目录/WEB-INF/classes下

但在读取文件时,我们不建议将读取路径写死,因为自己的服务器和公司的服务器的路径不一致,会导致读取失败,如以下情况:

这时,为了不写死这个路径,我们将用到上下文对象ServletContext

 ServletContext context = this.getServletContext();
 String rootpath = context.getRealPath("/");

//得到的是服务器中项目路径

如果一个普通的Java工具类,想要获取项目中的文件,那么该怎么做呢?

这时我们用不了这个上下文对象了,因为它不是一个Servlet了。

我们只能通过获取类加载器对象,来获取文件。

InputStream stream = MyUtil.class.getClassLoader().getResourceAsStream("/a.txt");

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

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

相关文章

el-form 表单项前面显示星号 但又不校验这一项代码怎么实现

效果图&#xff1a; 1.将 prop 属性设置为空字符串&#xff1b; 2.同时将 required 属性设置为 true。 这样就可以显示星号但不进行校验。 示例代码&#xff1a; <el-form> <el-form-item label"姓名" prop"name" required> <el-input…

SAP ERP系统PP模块控制BOM的变更是否需要ECN的三种解决方法<转载>

原文链接&#xff1a;http://www.360doc.com/content/12/0121/07/1079063886_1079063886.shtml BOM简称物料清单&#xff0c;它是PC和MC部门编制生产计划&#xff0c;物料采购和生产计划的依据&#xff0c;也是财务成本核算的基础&#xff0c;它的重要性不言而喻。 一个公司的…

Go语言精进之路读书笔记—第二章 项目结构、代码风格与标识符命名

上面是go语言库项目结构&#xff0c;细节补充如下&#xff1a; cmd目录&#xff1a; 存放项目要构建的可执行文件对应的main包源文件。 pkg目录&#xff1a; 项目自身要使用并且同样也是可执行文件对应main包要依赖的库文件。 makefile&#xff1a; 代码任何第三方构建工具脚本…

设备算法加密授权“安全+易用=?”

一提到软件授权&#xff0c;大家的第一反应都是“安全”和“易用”的问题&#xff0c;尤其是在算法加密授权领域。软件企业想要十足的安全性用来防止反编译&#xff0c;同时又需要具备灵活和易用来促使企业商业模式落地。那现在市面上是否有这样一款兼顾“安全性”和“易用性”…

谈谈:File、Blob、FileReader、ArrayBuffer、base64

JavaScript 提供了一些 API 来处理文件或原始文件数据&#xff0c;例如&#xff1a;File、Blob、FileReader、ArrayBuffer、base64 等。下面就来看看它们都是如何使用的&#xff0c;它们之间又有何区别和联系。 1. Blob Blob全称为binary large Object 即二进制大对象&#x…

嵌入式软件开发工程师具体可以分三类

嵌入式软件开发工程师可以根据其职责和专长分为以下三类&#xff1a;底层固件开发工程师&#xff1a;底层固件开发工程师负责编写和优化嵌入式系统的底层软件&#xff0c;与硬件密切相关。他们通常需要熟悉处理器架构、寄存器级编程、中断处理、设备驱动程序和实时操作系统&…

Oracle21C + PLSQL Developer 15 + Oracle客户端21安装配置完整图文版

一、Oracle21C PLSQL Developer 15 Oracle客户端文件下载 1、Oracl21C下载地址&#xff1a;https://www.oracle.com/cn/database/technologies/oracle-database-software-downloads.html 2、 PLSQL Developer 15下载地址&#xff1a;https://www.allroundautomations.com/re…

微信支付(JSAPI支付)/支付宝支付(手机网站支付)实现思路及实现方案-无源码

背景 停车系统 一个二维码同时支持微信及支付宝扫码付款&#xff0c;使用手机网站实现 临时车费用缴费二维码需要通知支持微信及支付宝。用户缴纳的停车费直接到各个商户的账户上&#xff0c;不经过停车系统开发公司。 方案 微信&#xff1a;使用微信服务商提供的服务支付…

【twcc】学习2:cc-feedback包送去cc预估码率

继续学习1,学习1中是准备知识,实际操练是在本文的预估中。 主要是对照大神的神作第八章 学习。 大量引用了大神的内容。 学习1中,大神主要论述了发送侧如何构造cc-fb,等待收到rtcp-cc-fb后进行再更新,然后最终交给cc模块。 这是大神绘制的图片,总结的非常清晰到位: 大神…

归一化详细推导

1. 一组数减去平均数的差的和为0。 一组数:a1,a2,a3,……,an, 平均数:a=(a1+a2+……+an)/n, 则 a1+a2+……+an=n*a, 从而,每一个数减去平均数的差的和为 (a1-a)+(a2-a)+……+(an-a) =(a1+a2+……+an)-n*a =0 2. 设原始数据均值及标准差为,将原始数组经过变换后得到使得均…

保护您的网站免受黑客攻击的七个良好习惯

世界上通常有三种类型的网站/APP拥有者&#xff1a;第一种是一直具备较高风险意识的人、第二种是非常自信认为没有任何东西可以攻击和破坏他们网站的人&#xff0c;第三种&#xff1a;根本不关心它的人。 第二种远比另外两种人更容易感受后悔和痛苦。实际上&#xff0c;黑客攻…

autocad中的快文件

一、块的定义 图块也称块&#xff0c;它是由一组图形对象组成的集合&#xff0c;一组对象一旦被定义为图块&#xff0c;它们将成 为一个整体&#xff0c;选中图块中任意一个图形对象即可选中构成图块的所有对象。AutoCAD 把一个 图块作为一个对象进行编辑修改等操作&…

docker常用基本命令及安装

docker常用基本命令及安装 1. docker启动等命令2. 常用基本操作命令3. 删除镜像3.1 步骤如下&#xff1a;3.2 可能会出现的问题 4. 宿主机与容器之间拷贝文件5. 关于docker的安装5.1 安装5.2 解决拉取镜像失败&#xff08;超时&#xff09;——配置 docker 镜像加速 1. docker启…

有什么好用的mp3转wav软件?分享这几个方法!

无论是在日常生活还是工作中&#xff0c;我们经常需要进行音频格式转换&#xff0c;如将MP3转换为WAV。通常情况下&#xff0c;为了解决这个问题&#xff0c;我们需要依赖专业的音频转换工具。下面介绍三款非常好用的音频转换软件&#xff0c;供参考&#xff1a; 一、记灵在线…

Git(1)

文章目录 1. 初始 Git2. 安装 Git3. 创建仓库4. 新增配置项5. 认识 Git 工作区 &#xff0c; 缓存区 &#xff0c; 版本库6. 添加文件7. 查看 .git 文件8. 修改文件9. 版本回退10. 撤销修改11 . 总结 1. 初始 Git 提出问题 : 图一 : 图二 : 图三 : 2. 安装 Git 3. 创建仓库 只…

一个资深测试工程师面试一来就问我这些题目

作为一个已经工作有10年经验的测试工程师&#xff0c;其间也辗转了几个大的互联网公司&#xff0c;虽然确实缺少了一些稳定性&#xff0c;但同时也积累了一些面试的经验&#xff0c;不才分享一些给大家。那么主要是针对测试工程师的一些总结&#xff0c;对于其他的工种&#xf…

9.Sentinel控制台 配置 nacos持久化

一、Sentinel 持久化机制 推送模式说明优点缺点原始模式API将规则推送至客户端并直接更新到内存中,扩展写数据源简单、无任何依赖不保证一致性;规则保存在内存中,重启不建议用于生产环境PULL模式客户端主动向某个规则管理中心定期轮询拉取规则,<br />这个规则中心可以…

Python面向对象编程1-面向过程的简单纸牌游戏程序 项目1.5 抽两张牌比较大小

总项目目标&#xff1a;用面向过程思想设计一个简单的纸牌游戏程序&#xff0c;称为"Higher or Lower"&#xff08;高还是低&#xff09;。游戏中&#xff0c;玩家需要猜测接下来的一张牌是比当前牌高还是低。根据猜测的准确性&#xff0c;玩家可以得到或失去相应的积…

elementui el-image组件 点击预览图片

效果&#xff1a;点击单个图片&#xff0c;查看大图 <template><el-container class"platform-list-page"><el-main class"stationList"><data-tableref"DataTable":default-show-type"defaultShowType":default…

Axure教程—对称对比图(中继器)

本文将教大家如何用AXURE中的中继器制作对称对比图 一、效果 预览地址&#xff1a;https://c517td.axshare.com 二、功能 修改中继器的数据&#xff0c;可自动生成对比图 三、制作 1、中继器 拖入一个中继器&#xff0c;并对其赋值&#xff0c;如图&#xff1a; 2、中继器内部…