【写一个hello的html页面,将页面放到服务器,通过浏览器访问页面,这个过程是怎么实现的?】第一个 servlet 程序

news2024/12/26 10:40:00

第一个 servlet 程序

    • 第一个 servlet 程序
        • 1. 创建项目
            • 创建好后的 默认目录 解析
        • 2. 引入依赖
            • 为什么要引入依赖?
        • 3. 创建目录结构
            • 1、在 main 目录下创建一个 webapp 目录
            • 2、在 webapp 下创建一个 WEB-INF 目录
            • 3、在 WEB-INF 目录下创建一个 web.xml 文件
            • 4、web.xml 需要配置
        • 4. 代码编写
        • 5. 打包程序
          • 为什么要打包
            • 1、点击右侧的 maven ,打开面板
            • 2、选中此时的 Lifecyle 下的 package
            • 3、成功之后就会显示 build success
            • 4、修改 jar 包 为 war 包
            • 5、右键打开 war 包
        • 6. 部署
        • 7 验证

第一个 servlet 程序

写一个hello的html页面,将页面部署到服务器,通过浏览器访问页面,这个过程是怎么实现的?

首先,我们使用的是tomcat服务器
这个服务器下载到本地硬盘,硬盘容量,就作为服务器容量

然后回答上述问题,怎么实现的呢?是通过servlet程序,把浏览器发送出来的请求 读取 然后 通过读取的信息 访问服务器,实现出来

那么 如何实现 servlet 程序

1. 创建项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建好后的 默认目录 解析

在这里插入图片描述
main 底下存放的是 业务代码,java 目录底下存放的是 java 代码。
resources 里存放的是程序依赖的文件,此处再是不涉及。
test 目录下的 java 存放的是 测试代码
pom.xml 是 maven 项目的配置文件,后面会经常用到

2. 引入依赖

为什么要引入依赖?

因为servlet是要依赖 tomcat 才能运行
但是 我们在 maven中 使用 servlet 所以 我们需要 引入 tamcat 但是呢 我们之前已经把 tomcat 下载到 本地硬盘了,所以 我们只需要 去官网 找到tomcat 提供的 依赖的代码,也就是 其他程序中 ,写入 tomcat 提供的依赖的 代码,就能 使用tomcat了

那么 在 maven中 也就是用 pom.xml 配置了


搜索 https://mvnrepository.com/ 打开 maven 仓库。
在这里插入图片描述
搜索 servlet 选择当前的圈出的。
在这里插入图片描述
点击进去,选择 3.1.0 版本
在这里插入图片描述
在这里插入图片描述
选中当前的 maven,将上述的代码复制到 pom.xml 里,要复制到 dependencies 标签里。
在这里插入图片描述

    <dependencies>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

如果复制后 是 红色字体,表示还没下载完

3. 创建目录结构

虽然 maven 已经帮我们自动的创建了一些目录,但是还是不够。
此处需要使用 maven 开发一个 web 程序,还需要别的目录。

1、在 main 目录下创建一个 webapp 目录

在这里插入图片描述
选择 Directory,创建 webapp 目录。

2、在 webapp 下创建一个 WEB-INF 目录

在这里插入图片描述
选择 Directory,创建 WEB-INF 目录。

3、在 WEB-INF 目录下创建一个 web.xml 文件

在这里插入图片描述
选择 File 创建文件。

4、web.xml 需要配置
<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
    <display-name>Archetype Created Web Application</display-name>
</web-app>

直接将上面的这段代码复制到 web.xml 文件中。
在这里插入图片描述
圈出的部分可能会是红色的,但是不一定是错误的,可以使用 alt + enter 使使。

webapp 目录就是未来部署到 Tomcat 中的一个重要的目录.当前我们可以往 webapp 中放一些静态资源,比如 html,css 等.
在这个目录中还有一个重要的文件 web.xml. Tomcat 找到这个文件才能正确处理 webapp 中的动态资源

4. 代码编写

创建一个 HelloServlet 类。
在这里插入图片描述
HttpServlet 是 servlet api 里提供的现成的类,一般写 servlet 代码一般都是继承 HttpServlet

这个类需要重写 doGet 方法,如果是一个 Post 请求,那就是重写一个 doPost 请求。

public class HelloWorld extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //super.doGet(req, resp);
    }
}

@Override 表示的是方法重写,
HttpServletRequest request 这个参数表示一个 http 请求。
HttpServletResponse response 这个参数表示一个 http 响应。

doGet 方法的效果就是 根据请求计算响应Tomcat 收到 get 请求就会触发 doGet 方法Tomcat 就会构造好两个参数,
一个是 rep一个是 resp。

repTCP socket 中读出来的字符串,按照 http 协议解析得到的对象。
resp 则只是一个 空的对象

super.doGet(req, resp); 这儿条语句一定要注释掉。

编写业务代码,也就是我们的 hello world 。

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

// 这是一个注解
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doGet(req, resp);
        System.out.println("Hello World"); // 这是控制台打印
        // 返回到客户端的打印
        // getWriter 会得到一个 Writer 对象
        resp.getWriter().write("Hello World");
    }
}

需要注意的是,doGet 是 Tomcat 收到 GET 请求的时候就会调用。
具体要不要调用 doGet,还要看当前的 GET 请求的路径是什么,不同的路径可以触发不同的代码。
(关联到不同的类上)

一个 Servlet 程序中,可以有很多的 Servlet 类,每个 Servlet 都可以关联到不同的路径,也就是对应到不同的资源,因此多个 Servlet 就实现了不同的功能,但是一个 Servlet 类是不可以对应多个路径的。对应的,一个路径也不能对应多个 Servlet,路径 和 Servlet 类之间是一对一之间的关系。

5. 打包程序

为什么要打包

在这里插入图片描述

程序编译好之后,会得到一些.class 文件,此时要把这文件打成 war 包。
war 是 tomcat 专属的用来描述 webapp 的程序,一个 war 就是一个 webapp。

1、点击右侧的 maven ,打开面板

在这里插入图片描述

2、选中此时的 Lifecyle 下的 package

在这里插入图片描述
可以直接双击运行。

也可以右键选中上面的 Run 运行。

打完之后再左侧的 target 目录里就包含了 所打的包,默认情况下打的是一个 jar 包

在这里插入图片描述

3、成功之后就会显示 build success
4、修改 jar 包 为 war 包

先在 pom.xml 文件中的 project 标签里加入一个 packaging 标签。
在这标签里写下指定的包是哪一种,我们打的是 war 包,此处就写的是 war 包。

 <packaging>war</packaging>

还需要有一个 build 标签,在 这个 build 标签里也要有一个 finalName 标签。
此处的 finalName 标签里写的就是包的名字。

<build>
    <finalName>test01</finalName>
</build>

再次打包
发现
在这里插入图片描述

5、右键打开 war 包

在这里插入图片描述

6. 部署

部署就是将之前的 war 文件 拷贝到 tomcat 的 webapps 目录即可,无论 tomcat 是不是在你的同一个电脑上,都是如此拷贝。

拷贝后,启动 tomcat。

如果 tomcat 正在运行,直接拷贝的时候 tomcat 也可以识别,但是在 windows 中可能存在 bug,
实际工作中,tomcat 基本都是在 linux 上运行的。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
之后启动 tomcat 。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7 验证

打开地址栏,输入 url ,测试写好的代码。

127.0.0.1:8080 服务器的ip 也就是部署在自己本机上的tomcat服务器IP

在这里插入图片描述
20230507 是 第一级目路径,也叫做 context path / application path,这个目录就代表了一个 webapp,也就是一个网站。

/hello 是 第二级路径 也叫做 servlet path,如果这两个路径有一个出现了错误,就会出现 404

第一级路径对应的是 war 包名,第二级路径对应的是 注解 里的内容。

可以看到在服务器和客户端都打印出了 Hello World。

在这里插入图片描述

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

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

相关文章

章节3:02-Apache Commons Collections反序列化漏洞

章节3&#xff1a;02-Apache Commons Collections反序列化漏洞 02-Apache Commons Collections反序列化漏洞 漏洞爆出 2015.01.28 Gabriel Lawrence和Chris Frohoff https://speakerdeck.com/frohoff/appseccali-2015-marshalling-pickles-how-deserializing-objects-can-r…

《Java虚拟机学习》 asmtools 字节码汇编器使用 与 JVM识别方法重载 的思考

1.asmtools下载 链接&#xff1a;https://pan.baidu.com/s/1R3nAaUbN1Dkf6UKkdEMSEA?pwdk8l8 提取码&#xff1a;k8l8 2.结合方法重载实验的使用 总所周知&#xff0c;方法重载跟方法名无关&#xff0c;但对于JVM而言&#xff0c;区别方法主要通过 类名&#xff0c;方法名&…

java spring MVC REST风格概念叙述

REST属于spring MVC中的一个知识点 REST是三个单词的缩写 即 Representational State Transfer 意思为 表现形式状态转换 老实说 不用尝试字面上理解 因为字面意思 确实是比较抽象 其实 意思就是 访问网络资源的格式 转换 下图 对比了 传统风格和REST风格 请求路径的差别 RES…

【英语】大学英语CET考试,阅读部分2(长篇阅读,选词填空,综合演练)

文章目录 1、长篇阅读&#xff08;连连看&#xff0c;要会做&#xff09;1.1 解题技巧&#xff08;定位词扫读&#xff0c;看到大于看懂&#xff0c;一题带练&#xff09;1.2 做题方法复习总结1.3 题目练习&#xff08;2篇文章&#xff09; 2、选词填空&#xff08;只有5分&…

opencv_c++学习(五)

Mat类数值存储方式 上图为opencv中三通道数据的存储方式&#xff0c;反映到图像上则为空间维度为3*3&#xff0c;通道为3的图像。 Mat类的属性 Mat类的属性如上&#xff0c;在这里我们解释一下step。step是行列数与数据类型的字节数相乘的数据。 Mat类元素读取 在Mat中&…

云原生: istio+dapr构建多运行时服务网格...  多运行时是一个非常新的概念。在

2020 年&#xff0c;Bilgin Ibryam 提出了 Multi-Runtime&#xff08;多运行时&#xff09;的理念&#xff0c;对基于 Sidecar 模式的各种产品形态进行了实践总结和理论升华。那到底什么是多运行时呢&#xff1f;首先还是得从分布式应用的四大类基本需求讲起。简单来讲任何分布…

【力扣周赛】第344场周赛

【力扣周赛】第344场周赛 6416&#xff1a;找出不同元素数目差数组题目描述解题思路 6417&#xff1a;频率跟踪器题目描述解题思路 6418&#xff1a;有相同颜色的相邻元素数目题目描述解题思路 6419&#xff1a;使二叉树所有路径值相等的最小代价题目描述解题思路 6416&#xf…

C++ ---- 类和对象(上)

目录 本节目标 常见问题 面向过程和面向对象的理解 什么是类如何定义类 类的引入 类的定义 类的两种定义习惯 类的作用域 类的访问限定符 访问限定符介绍 封装 封装的意义 类的实例化 类对象模型 类对象的存储方式 结构体对齐 计算类对象的大小 this指针 问题…

数青蛙​、[USACO10FEB]Chocolate Giving S

一、1419. 数青蛙 思路 这道题有俩种解法&#xff0c;一是记数&#xff0c;二是贪心 记数&#xff1a; 这是官方的题解 我们用frog_ num来表示现在正在发出蛙鸣声的青蛙数目&#xff0c;用cnt[c] 示已经发出-次有效蛙鸣中的字符c的青蛙个数,比如当cnt[c] 2时表示当前有2只…

[mini LCTF 2023] 西电的部分

感觉比赛还是很不错&#xff0c;就是有点难了&#xff0c;不过都是简单题重复更没意思。作出一道来就有一点收获。 misc1 签到题也不简单&#xff0c;已经很久不作misc了&#xff0c;感觉这东西需要安的东西太多&#xff0c;怕机子累坏了。 一个复合的wav声音文件&#xff0…

【Android入门到项目实战-- 8.5】—— 使用HTTP协议访问网络的实践用法

目录 准备工作 一、创建HttpUtil类 二、调用使用 一个应用程序可能多次使用到网络功能&#xff0c;这样就会大量代码重复&#xff0c;通常情况下我们应该将这些通用的网络操作封装到一个类里&#xff0c;并提供一个静态方法&#xff0c;想要发送网络请求的时候&#xff0c;只…

【c语言】字符串匹配(搜索) | API仿真

c语言系列专栏&#xff1a;c语言之路重点知识整合 字符串知识点&#xff1a;字符串基本概念、存储原理 字符串匹配 目录 一、字符串匹配二、strstr仿真声明&#xff1a;指针方式定义&#xff1a;调用测试&#xff1a;运行结果&#xff1a; 一、字符串匹配 字符串匹配是对一个…

HttpClient连接池使用不当问题分析解决

目录 背景代码实现工具类功能实现模拟使用 问题分析与定位解决方案总结 背景 最近遇到一个HttpClient问题&#xff0c;某个接口一直报404错误。该接口使用HttpClient调用其他服务获取数据&#xff0c;为了提高接口调用性能&#xff0c;利用httpclient池化技术来保证请求的数量…

嵌入式中利用软件实现定时器的两种方法分析

目录 第一&#xff1a;简介 第二&#xff1a;链表实现方式 第三&#xff1a;结构体实现方式 第一&#xff1a;简介 在一般的嵌入式产品设计中&#xff0c;介于成本、功耗等&#xff0c;所选型的MCU基本都是资源受限的&#xff0c;而里面的定时器的数量更是有限。在我们软件…

Origin如何绘制基础图形?

文章目录 0.引言1.绘图操作2.图形设置3.图形标注 0.引言 因科研等多场景需要绘制专业的图表&#xff0c;笔者对Origin进行了学习&#xff0c;本文通过《Origin 2022科学绘图与数据》及其配套素材结合网上相关资料进行学习笔记总结&#xff0c;本文对绘制基础图形进行阐述。 1.…

2023.5.7 第五十二次周报

目录 前言 文献阅读&#xff1a;基于BO-EMD-LSTM模型预测教室长期二氧化碳浓度 背景 思路 BO-EMD-LSTM 混合模型 EMD 算法 与其他模型的比较 结论 论文代码 总结 前言 This week, I studied an article that uses LSTM to predict gas concentration.This study wa…

Springboot +Flowable,按角色分配任务

一.简介 在为 UserTask 设置处理人的时候&#xff0c;除了设置单个的处理人&#xff0c;也可以设置 Group&#xff08;分组&#xff09;&#xff0c;就是某一个用户组内的所有用户都可以处理该 Task。 二.绘制流程图 首先我们还是使用之前旧的流程图&#xff0c;流程图截图如…

从0学Spring Boot框架(Spring Boot配置文件与Spring Boot日志文件)

文章目录 1. 什么是Spring Boot&#xff1f;2. 如何创建Spring Boot项目&#xff1f;3. 验证Spring Boot项目的创建3.1 补充添加依赖3.2 代码示例 4. Spring Boot配置文件4.1 配置文件的作用4.2 配置文件的格式4.2.1 properties的语法4.2.2 yml的语法4.2.3 properties与yml的对…

想把PDF转成Word?这三个免费在线工具不容错过!

在日常工作和学习中&#xff0c;我们经常会遇到需要将PDF文件转为Word文档的情况。本文将介绍三种不同的PDF转Word的方法。 首先是推荐的PDF转Word网站&#xff1a;记灵在线工具&#xff08;http://remeins.com)。 这是一个功能非常强大的PDF在线处理网站&#xff0c;可以完全…

CNI_02_Flannel 跨主机通信Overlay Network三种实现

文章目录 一、前言二、跨主机网络三、UDP模式四、VXLAN模式4.1 VXLAN完全在内核态中构建Overlay Netwok覆盖网络4.2 VXLAN模式整个流程步骤1&#xff1a;网络请求从容器到宿主机步骤2&#xff1a;根据目的容器IP在Node1宿主机上找到正确的route路由步骤3&#xff1a;构建内部数…