Servlet——使用Servlet编程的基本流程。

news2024/12/23 13:24:06

文章目录

  • 前言
  • 一、创建项目
    • 创建Maven项目
    • 介绍Maven项目
  • 二、引入依赖
  • 三、创建目录
  • 四、编写代码
  • 五、打包
  • 六、部署
  • 七、验证
  • 总结


前言

本人是一个普通程序猿!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果你也对编程感兴趣的话,互关一下,以后互相学习,共同进步。这篇文章能够帮助到你的话,劳请大家点赞转发支持一下!


一、创建项目

此处创建的是maven项目。
maven是一个构建工具,功能是帮助我们去构建,测试,打包一个项目。

创建Maven项目

1️⃣选中Maven,点击Next

在这里插入图片描述

2️⃣3️⃣4️⃣5️⃣设置项目名称与路径(此处的路径不要随便设置,一会要用到),点击Finish
在这里插入图片描述

完成创建项目(首次创建maven项目,IDEA会从互联网上加载很多依赖,需要花一定时间,此时需要保证网络畅通)。
在这里插入图片描述


介绍Maven项目

每个Maven项目,都会有一个pom.xml 配置文件,这个文件里描述了maven项目的各方面的内容。
在这里插入图片描述


二、引入依赖

Servlet 是 tomcat 提供的api,不是标准库自带的,因此需要额外下载安装。

  1. 进入中央仓库https://mvnrepository.com/

  2. 在搜索框中搜索 Servlet,点击 Java Servlet API
    在这里插入图片描述

  3. 下滑找到与Tomcat对应的版本,并点击。(查询对应版本:https://tomcat.apache.org/whichversion.html;此处我对应的版本是3.1.0)在这里插入图片描述

  4. 复制下面的代码在这里插入图片描述

  5. 在最顶层标签 project标签下 ,打出 dependencies标签 ,然后把 代码粘贴在dependencies标签中 在这里插入图片描述

  6. 第一次引入依赖时,会自动下载接口,如下方有下载进度条,即正在下载需等待,如果没有,点击刷新按钮,即可开始下载。在这里插入图片描述


三、创建目录

以下的目录结构,目录位置,目录名字,文件名字与格式内容,要与下面的步骤保持一模一样。

  1. 在main下面创建一个新的目录webapp(New的是Directory)在这里插入图片描述
  2. 在webapp下再创建一个新目录WEB-INF(New的是Directory)在这里插入图片描述
  3. 在WEB-INF下在创建一个新文件web.xml(New的是File),并插入以下代码。在这里插入图片描述

第三行代码可能会冒红报错,原因是IDEA可以正确识别Java代码,不一定能正确识别其他文件,比如这里的xml文件。
这个报错可以忽略不管他,也可以alt + 回车解决掉。

<!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>

四、编写代码

在java目录下创建 HelloServlet类。

如果继承HttpServlet类,报错或没有提示,说明没有正确的引入依赖,可以尝试去刷新一下。

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 {

    // 重写doGet方法
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 一定要把父类的doGet注释或者删除掉,父类的doGet会直接抛出405
        // super.doGet(req, resp);

        // 服务器的控制台打印 "hello world" ,服务器能看到,客户端看不到
        System.out.println("hello world");

        // 向resp 的 body 中写入 "hello world"这个字符串,这个内容就会被HTTP响应返回给浏览器,浏览器就会显示
        resp.getWriter().write("hello world");
        // resp.getWriter()得到resp内部的字符流Write对象,再通过write就可以将数据写入到HTTP响应中的body
    }
}

在这里插入图片描述

小贴士

doGet方法要实现的功能就是根据请求计算出响应,再将想要写入resp响应对象中。 Tomcat会自动帮助我们完成读取解析请求,将响应写回客户端的功能

注解(@xxxxxxx)通常用来修饰一个类或者一个方法。实际应用中Tomcat中会有许多类许多方法,注解的作用通俗点说就是告诉Tomcat要调用的是哪个类哪个方法

这个代码,并不是独立运行,而是插入到Tomcat中,让Tomcat中的main方法在合适的时机调用,因此不需要咱们自己写main方法。


五、打包

  1. 在pom.xml中指定打包格式与包名称。
    注意:是在object标签下

    在这里插入图片描述

  2. 双击package,或右键运行,即可开始打包List item

  3. 出现BUILD SUCCESS代表打包成功。在这里插入图片描述

小贴士
Java当中的压缩包是jar与war
普通的java程序打包成jar包
要部署到tomcat的程序打包成war包
war包可以看作是特别定制的tomcat版jar包
war包是tomcat的专属格式,里面有一些特殊的目录结构和文件。


六、部署

  1. 找到打包好的war包(在你创建的项目中的target目录中)
    在这里插入图片描述

  2. 将war包拷贝到tomcat的webapps目录下在这里插入图片描述

  3. 在tomcat的bin目录下找到并运行startup程序(Windows系统用bat格式;Linux系统用sh格式)。就部署成功了在这里插入图片描述

小贴士
之所以出现乱码是因为tomcat的字符集与Windows命令行用的不是同一个字符集。此处乱码也没关系,依然部署成功。

部署成功后,tomcat会自动解压
在这里插入图片描述


七、验证

在浏览器地址栏输入URL,构造GET请求。

127.0.0.1:8080/hello_servlet/hello
URL也不是随便输入就行的!
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
使用Fiddler进行抓包
在这里插入图片描述

注意!!!
不是Tomcat一启动,咱们代码中的doGet就会执行,而是遇到GET请求,且URL中的路径还要匹配时, 才会执行。


总结

以上就是今天要分享的使用servlet写出的第一个hello world,加油加油加油!!!

路漫漫不止修身,也养性。

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

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

相关文章

软件测试面试题及答案【史上最全】

以下是软件测试相关的面试题及答案&#xff0c;欢迎大家参考! 1、你的测试职业发展是什么? 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&…

微信小程序开发使用echarts报错Cannot read property ‘getAttribute‘ of undefined

如图&#xff0c;我在小程序圈中的区域渲染echarts图标报错了&#xff0c;报错提示Cannot read property getAttribute of undefined 这里的canvas &#xff0c;width ,height,dpr获取为 undefined 分析问题&#xff1a; 初始化图表时传递错误的参数&#xff1a; 在 onShow 生…

靶向RNA-seq全面解决方案和加速分析,只看这篇就够了!

背景 RNA-seq&#xff0c;即通过高通量测序技术进行的转录组测序分析技术。最初作为研究mRNA&#xff0c;small RNA&#xff0c;non-coding RNA 等表达水平、表达差异基因的应用&#xff0c;在过去的十几年内迅速发展。而今&#xff0c; RNA-seq 在转录本变异、基因融合、可变…

安全文件传输:如何降低数据丢失的风险

在当今数字化时代&#xff0c;文件传输是必不可少的一项工作。但是&#xff0c;数据丢失一直是一个令人头疼的问题。本文将探讨一些减少数据丢失风险的方法&#xff0c;包括加密、备份和使用可信的传输协议等。采取这些措施将有助于保护数据免受意外丢失的危险。 一、加密保护数…

抖音矩阵系统源码开发搭建部署分享

一、 功能开发设计 &#xff08;1&#xff09;数据概览&#xff1a;账号&#xff0c;视频top10数据统计 &#xff08;2&#xff09;AI视频创意&#xff1a;原创视频批量剪辑&#xff0c;阶乘算法&#xff0c;去重原理 &#xff08;3&#xff09;同城拓客&#xff1a;线下门店…

整体认识和路由配置、基础数据渲染、热榜区域实现、图片预览组件封装、认识SKU组件、通用组件统一注册全局(详情页)【Vue3】

详情页 整体认识和路由配置 整体业务认识 路由配置 准备组件模板 <script setup></script><template><div class"xtx-goods-page"><div class"container"><div class"bread-container"><el-breadc…

nlp系列(6)文本实体识别(Bi-LSTM+CRF)pytorch

模型介绍 LSTM&#xff1a;长短期记忆网络&#xff08;Long-short-term-memory&#xff09;,能够记住长句子的前后信息&#xff0c;解决了RNN的问题&#xff08;时间间隔较大时&#xff0c;网络对前面的信息会遗忘&#xff0c;从而出现梯度消失问题&#xff0c;会形成长期依赖…

Linux文件管理

WINDOWS/LINUX目录对比 Windows: 以多根的方式组织文件 C:\ D:\ E: Linux: 以单根的方式组织文件 / (根目录) Linux目录简介 /目录结构&#xff1a; FSH (Filesystem Hierarchy Standard) [rootlocalhost ~]# ls / bin dev lib media net root srv usr boot etc lib64 misc …

Qt5.14.2下载及安装

1. 下载 https://download.qt.io/archive/qt/5.14/5.14.2/ 由于Qt 自从5.15版本开始&#xff0c;对非商业版本&#xff08;也就是开源版本&#xff09;&#xff0c;不提供已经制作好的离线exe安装包。所以&#xff0c;对于5.15&#xff08;含&#xff09;之后的版本&#xff…

混合背包--暗黑游戏(pgrune)

混合背包&#xff1a;包含着01背包&#xff0c;完全背包,多重背包 而这个题通过k[i]进行判断是哪个背包&#xff0c;少了个完全背包。 #include<bits/stdc.h> using namespace std; const int N1000; int vp[N]; int vr[N]; int k[N]; int w[N]; int f[151][151]; int m…

C++模拟实现list

1.首先要了解到vs底层的list链表是带头双向循环的链表。 所以首先就要看成员变量 那么就说明我们还需要构造一个Node的结构体&#xff0c;&#xff08;typedef一下就好了&#xff0c;名字不影响&#xff09; 现在就可以完成间的push_back函数了。 1.list的iterator 我们之前模…

随手笔记——3D−2D:PnP

随手笔记——3D−2D&#xff1a;PnP 说明理论源代码雅可比矩阵求解 说明 PnP&#xff08;Perspective-n-Point&#xff09;是求解3D到2D点对运动的方法。它描述了当知道n个3D空间点及其投影位置时&#xff0c;如何估计相机的位姿。 理论 特征点的3D位置可以由三角化或者RGB-…

鸿鹄协助管理华为云与炎凰Ichiban

炎凰对华为云的需求 在炎凰日常的开发中&#xff0c;对于服务器上的需求&#xff0c;我们基本都是采用云服务。目前我们主要选择的是华为云&#xff0c;华为云的云主机比较稳定&#xff0c;提供的云主机配置也比较多样&#xff0c;非常适合对于不同场景硬件配置的需求&#xff…

【前端笔记】本地运行cli项目报错ERR_OSSL_EVP_UNSUPPORTED

报错原因 Node版本>17.x&#xff0c;本地npm run 起项目后会发现终端报错&#xff0c;具体有以下2块关键信息&#xff1a; Error: error:0308010C:digital envelope routines::unsupported和 opensslErrorStack: [ error:03000086:digital envelope routines::initializa…

Jmeter配置起来太繁琐?试试RunnerGo

在用jmeter做性能测试时想看完整一点的测试报告&#xff0c;想配置阶梯模式来压测&#xff0c;想配置不同的接口并发这些都需要安装插件并且影响机器性能&#xff0c;想做自动化测试还得放到jenkins&#xff0c;这些配置起来太繁琐。今天给大家推荐一款测试平台RunnerGo&#x…

可解释的 AI:在transformer中可视化注意力

Visualizing Attention in Transformers | Generative AI (medium.com) 一、说明 在本文中&#xff0c;我们将探讨可视化变压器架构核心区别特征的最流行的工具之一&#xff1a;注意力机制。继续阅读以了解有关BertViz的更多信息&#xff0c;以及如何将此注意力可视化工具整合到…

B074-详情富文本 服务上下架 高级查询 分页 查看详情

目录 服务详情修改优化ProductServiceImplProduct.vue 详情数据-富文本-vue-quill-editor使用步骤测试图片的访问方式富文本集成fastDfs 后台服务上下架&#xff08;批量&#xff09;前端开始后端完成ProductControllerProductServiceImplProductMapper 前台展示上架前端开始后…

【雕爷学编程】Arduino动手做(171)---micro:bit 开发板3

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#xff0c;这…

Jmeter 如何并发执行 Python 脚本

目录 1. 前言 2. Python 实现文件上传 3. Jmeter 并发执行 4. 最后 1. 前言 JMeter 是一个开源性能测试工具&#xff0c;它可以帮助我们更轻松地执行性能测试&#xff0c;并使测试结果更加可靠。Python 是一种广泛使用的编程语言&#xff0c;它可以用于开发各种软件和应用…

ResultMap结果集映射

为了解决属性名和字段名不相同的问题 example&#xff1a;MyBatis-CRUD: Mybatis做增删改查 使用resultmap前查询password时为空&#xff0c;因为属性名与字段名不相同 做结果集映射&#xff1a; <?xml version"1.0" encoding"UTF-8" ?> <!…