JavaEE——手把手教你实现简单的 servlet 项目

文章目录

  • 一、什么是 Servlet
  • 二、创建一个简单的 Servlet 程序
    • 1. 创建项目
    • 2.引入依赖
    • 3. 创建目录
    • 4.编写代码
    • 5. 打包程序
    • 6. 部署
    • 7.验证
    • 整体过程总结
  • 三、使用 Smart Tomcat 插件简化项目创建
  • 四、创建项目时可能遇到的几个问题。

一、什么是 Servlet

Servlet 是一种实现 动态页面的技术。是由 Tomcat 提供给程序员的 一组 API,用来帮助程序员简单高效的开发 web app。

网页分为两类:
静态页面:页面的内容是固定不变的。(一个单纯的 HTML 页面)
动态页面:页面内容随输入的参数的不同而改变。(是 HTML + 数据 组成)

二、创建一个简单的 Servlet 程序

这里,我们使用 Servlet 程序实现出一个 Hello world 打印。将其部署到 Tomcat 上。通过 使用浏览器访问 ,的形式得到 Hello world 字符串。

这里的实现相对于直接使用某一种语言进行打印而言,还是比较复杂的。这里大致分为 7 个步骤。

  1. 创建项目
  2. 引入依赖
  3. 创建目录结构
  4. 编写代码
  5. 打包程序
  6. 部署程序
  7. 验证

下面,我会就上面的 7 个步骤依次进行详细的解释。

1. 创建项目

此处创建的项目被称之为 Maven 项目
maven 是一个 “工程管理” 工具。

所谓 “工程管理” 管理的是下面的几个内容

  1. 规范目录结构
  2. 管理依赖 (使用什么第三方库,都会进行处理)
  3. 构建
  4. 打包 等。。。

要完成这里的工作,主要使用的就是上面所标注的两点。

在这里插入图片描述
如上图所示,创建一个新的项目,选择 maven 之后选择好存储目录,最后直接点击 完成 即可。

此处需要注意,如果是第一次创建 maven 项目,需要从 中央仓库加载一些 maven 依赖,可能需要等待较长的时间。

当成功创建项目后,在左侧的文件区域,会出现下图的内容 (大致了解其中不同文件夹的含义):
在这里插入图片描述

2.引入依赖

在上面我们提到,Servlet 代码,是基于 Tomcat 的 API 来实现的。所以,这里需要通过第三方库进行引入。

这里的第三方库是 maven 官网,相关链接如下:maven网站

进入网站,在搜索框输入 Servlet 会得到下面的页面:
在这里插入图片描述
如图,罗列出的第一个就是我们要选择的。
点击进入,这里会有多个版本的选择。根据需要,选择合适的版本。(ps:本人在这里使用的 Tomcat 8 对应的版本选择 3.1.0)

点击进入
在这里插入图片描述
如图所示,页面向下滑动,我们会看到这段字符。

在这里,我们将不会使用以往的方式下载 jar 包进行引入。而是直接将这段文字复制导入即可。(其实也就是该依赖在 maven 仓库的坐标)

在这里插入图片描述
如图所示,这里标记了两处标签。
需要注意的是:

  • 绿色 标记的 “dependencies” 是自己先写上去的。属于 project 顶级标签的子标签。
  • 红色 标记的 “dependency” 是其中的一个依赖。如果需要有多个依赖加入。以一组 “denpendency” 为单位添加即可。

3. 创建目录

虽然 maven 已经帮助我们创建出了一些目录,但是仍然有欠缺。
此处是使用 maven 开发一个 web 程序,还要有别的目录。

所需要创建的目录:

  1. 在 main 目录下创建出一个 webapp 目录。
  2. 在 webapp 目录下创建 WEB-INF 目录
  3. 在 WEB-INF 目录下创建一个 web.xml 文件。

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

解释 web.xml 在这里的作用

当前,我们实现的是 Servlet 程序,相较于之前的代码,此处是没有 main 方法的。

我们知道,main 方法就是让程序启动的一个关键。就好比是汽车的发动机。

对于此处的程序,我们可以将其类比为一列火车。
这里的 Servlet 程序是基于 Tomcat 来实现的。
Servlet 在这里就是没有动力的车厢。
Tomcat 在这里就是一节火车头。
需要注意的是,要成为一列火车,是需要将车头与车厢进行连接的。
此时,目录下的 WEB-INF / 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 中的代码是固定的,直接引用即可

4.编写代码

首先,我们需要在 Java 文件夹中创建出一个 class 类,来写入后续的代码。

这里先直接展示起手的代码:

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

代码分析:
在这里插入图片描述
这里重写的 doGet 方法被 Tomcat 调用时,当收到一个 get 请求时,就会触发这个方法

对于 req (请求):由 Tomcat 解析并构造。
对于 resp (响应):默认是一个空对象。
(这里不是 null,只是 new 了一个对象,其中的属性没有设置)
所以此时,就需要程序员根据需要设定响应

此时代码就需要进行修改

@WebServlet("/test")
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");
        //想要将 hello world 返回到客户端,就需要使用下面的代码
        // getWriter 会得到一个 Write 对象
        resp.getWriter().write("hello world");
    }
}

代码分析:
在这里插入图片描述
到这里,我们还需要注意代码最上面的一个注解,如图:

在这里插入图片描述

注解在这里的作用,就是针对方法进行额外的 “解释说明” 对这个方法赋予额外的含义

这里的作用就是将类与 HTTP 的请求路径关联起来。

5. 打包程序

将程序编译好后,再讲这些 .class 文件构成压缩包,但是此处要打的是一个 war 包,不是jar 包
(war 是 Tomcat 专属的用来描述 webapp 的程序,一个 war 就是一个 webapp)

这里直接使用 maven 就可以直接打包,如图:
在这里插入图片描述
在这里插入图片描述
当出现上图中的情况时,就表明打包成功。

注意事项:
这里需要注意的是,在默认情况下 maven 打的是一个 jar 包
对此,就需要在 .xml 文件中进行调整,如图:
在这里插入图片描述

打包完成后,在 target 文件中,就可以找到我们打出来的包。
在这里插入图片描述

6. 部署

这一步的操作非常简单,只需要直接将 war 包拷贝到 Tomcat 的 webapp 中即可。

之后启动 Tomcat 即可。

7.验证

将压缩好的 war 包放入 webapp 中后,启动 Tomcat。

在这里插入图片描述

运行结果:

  • 在网页页面
    在这里插入图片描述
  • 在 Tomcat 服务器端口
    在这里插入图片描述
    如图,我们发现出现了多个结果。

出现这样的结果,原因是,只要访问一次页面,就会在控制台出现一次

整体过程总结

  • 首先,在浏览器中输入对应的 URL 后,浏览器就会构造一个 HTTP GET 请求,发送给 Tomcat。
  • 第二,Tomcat 就会根据第一路径,确定具体的 webapp
  • 第三,又会根据具体的 第二级路径 ,确定了调用的类
  • 第四,就会通过 GET / POST 方法来确定要调用 HelloServlet 中的哪一个方法 (doGet , doPost)
  • 最后,Tomcat 就会执行对应的代码完成对应的工作。

三、使用 Smart Tomcat 插件简化项目创建

在上面的介绍中,我们已经知道要创建出一个 servlet 项目,一共有 7 个步骤。

为了简化创建的过程, IDEA 为我们提供了一个 关于 Tomcat 插件
可以省去 手动打包、手动部署 这两个过程。

图示插件查找、安装过程。

在这里插入图片描述

首次使用的简单配置

  1. 需要先新增一个运行配置
    在这里插入图片描述
    点击 “添加配置”。

  2. 点击 + 并选择 Smart Tomcat
    在这里插入图片描述
    1. 首次配置创建需要选择 Tomcat 的安装路径
    2. 需要注意的是,这里代码执行的目录,必须到 webapp 文件夹处!(与将打好的 war 包存放到 webapp 由异曲同工之处。)

使用 Smart Tomcat 创建项目

在完成上面的添加操作后,我们就可以直接在 idea 中点击绿色三角号进行运行了。

在这里插入图片描述
但是,这里需要注意的是,此处的链接是不能直接点的,直接点击,触发的肯定是 404

这是因为此处没有包含 servlet path,即就是代码中 注释 提供的路径

在这里插入图片描述
如上图所示,在此处添加 “/test” 就可以成功访问。

简单解释 Smart Tomcat 工作原理。
Tomcat 的工作方式有两种:

  • 第一种,就是直接将要使用的 war 拷贝到 webapps 中进行访问执行。
  • 第二种,就是在启动时,显示指定一个特定的 webapp,让 Tomcat 单独加载当前的项目。(Smart Tomcat 就使用的这一种)

四、创建项目时可能遇到的几个问题。

  1. 404
    在这里插入图片描述
    可能的问题是:
    web.xml 内容错了、路径写错了、文件的位置错误。。。

  2. 405
    在这里插入图片描述
    可能的问题是:
    没有写 doGet 方法、
    super.doGet 没有删掉,如图:
    在这里插入图片描述

  3. 500
    遇到这个就可以很明显的说明代码中出现了错误,直接看报错信息就可以解决大部分问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Bigtable [OSDI‘06] 论文阅读笔记

原论文&#xff1a;Bigtable: A Distributed Storage System for Structured Data (OSDI’06) 1. Introduction Bigtable 是一种用于管理结构化数据的分布式存储系统&#xff0c;可扩展到非常大的规模&#xff1a;数千台服务器上的数据量可达 PB 级别&#xff0c;同时保证可靠…

苍穹外卖Day10——总结10

前期文章 文章标题地址苍穹外卖Day01——总结1https://lushimeng.blog.csdn.net/article/details/135466359苍穹外卖Day02——总结2https://lushimeng.blog.csdn.net/article/details/135484126苍穹外卖Day03——总结3https://blog.csdn.net/qq_43751200/article/details/1363…

在 K8s 上跑腾讯云 Serverless 函数,打破传统方式造就新变革

目录 目录 前言 Serverless 和 K8s 的优势 1、关于Serverless 函数的特点 2、K8s 的特点 腾讯云 Serverless 函数在 K8s 上的应用对企业服务的影响 1、弹性扩展和高可用性 2、成本优化和资源利用 3、简化部署和管理 拓展&#xff1a;腾讯云云函数 SCF on K8s 番外篇…

隐私计算实训营第七讲-隐语SCQL的开发实践

隐私计算实训营第七讲-隐语SCQL的开发实践 文章目录 隐私计算实训营第七讲-隐语SCQL的开发实践1.如何使用SCQL&#xff1f;2.使用流程3.SCQL部署4.SCQL使用示例4.1创建用户4.2创建项目&用户授权4.3创建表4.4设置CCL4.5发起联合分析查询 1.如何使用SCQL&#xff1f; 2.使用流…

工具推荐-针对Nacos利器-NacosExploitGUI_v4.0

Nacos是由阿里所开发的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 工具简介 集成Nacos的各种poc Nacos控制台默认口令漏洞(nacos,nacos)Nacostoken.secret.key默认配置(QVD-2023-6271)Nacos-clientYaml反序列化漏洞Nacos Jraft Hessian反序列化漏洞…

通用开发技能系列:Git

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 通用开发技能系列 文章&#xff0c;主要对编程通用技能Git进行学习 1.为什么使用版本控制系统 版本控制系统可以解决的问题 代码备份很重要版本控制很重要协同工作很重要责任追溯很重要 常见的版本控制系统 Gi…

设计模式之命令模式(上)

命令模式 1&#xff09;概述 1.定义 命令模式(Command Pattern) 将一个请求封装为一个对象&#xff0c;可以用不同的请求对客户进行参数化&#xff1b;对请求排队或者记录请求日志&#xff0c;以及支持可撤销的操作。 2.作用 命令模式可以将请求发送者和接收者完全解耦&am…

Redis教程——数据类型(字符串、列表)

上篇文章我们学习了Redis教程——Redis入门&#xff0c;这篇文章我们学习Redis教程——数据类型&#xff08;字符串、列表&#xff09;。 Redis数据类型有&#xff1a;字符串、列表、哈希表、集合、有序集合、地理空间、基数统计、位图、位域和流。 字符串String 字符串类型…

UML 绘制工具 starUML 入门介绍

拓展阅读 常见免费开源绘图工具 OmniGraffle 创建精确、美观图形的工具 UML-架构图入门介绍 starUML UML 绘制工具 starUML 入门介绍 PlantUML 是绘制 uml 的一个开源项目 UML 等常见图绘制工具 绘图工具 draw.io / diagrams.net 免费在线图表编辑器 绘图工具 excalidr…

CPU+GPU+NPU三位一体AI边缘控制器,三屏异显,搭载RK3588处理器

XMS-201采用了Rockchip RK3588八核64位处理器&#xff0c;集成ARM Mali-G610 MP4四核GPU&#xff0c;内置AI加速器NPU&#xff0c;可提供6Tops算力&#xff0c;支持主流的深度学习框架&#xff1b;性能强劲的RK3588可为各类AI应用场景带来更强大的性能表现&#xff0c;适用于机…

Agent相关概念(更新中)

文章目录 Agent是什么Agent中要求LLM需要具备哪些能力Function Call&#xff08;工具调用&#xff09;Plan&#xff08;规划&#xff09;memory推理&#xff08;总结&#xff09;能力 Agent的实现方式PlanAndExecuteReact Agent是什么 在LLM语境下&#xff0c;Agent可以理解为…

八股面试——数据库——索引

索引的概念 B树的概念&#xff1a; 索引的作用 聚簇索引与非聚簇索引 聚簇索引就是主键值&#xff0c;在B树上&#xff0c;通过主键大小&#xff08;数据在B树叶子节点按主键顺序排序&#xff09;寻找对应的叶子节点&#xff0c;叶子节点保存的一整条记录。 非聚簇索引&#x…

bugku-misc 啊哒

拿到题目得到一张图片 尝试查看属性看到照相机型号 应该是加密字符&#xff0c;用010打开图片查看源码 文件结尾看到50 4B&#xff0c;是压缩包形式并且看到flag.txt 猜测是文件包含 kali用foremost尝试分离图片 得到zip文件&#xff0c;打开显示需要密码 想到一开始图片属…

MXNet的下载安装及问题处理

1、MXNet介绍&#xff1a; MXNet是一个开源的深度学习框架&#xff0c;以其灵活性和效率著称&#xff0c;支持多种编程接口&#xff0c;包括Python、C、R、Julia、Scala等。MXNet支持大规模分布式训练&#xff0c;同时兼顾CPU和GPU的计算资源&#xff0c;尤其擅长于模型并行和数…

android webview测试

启动手机自带的浏览器&#xff1a; from time import sleepfrom appium import webdriverclass TestBrowser:def setup_method(self):desire_caps {"platformName": "android","platformVersion": "12","deviceName": &qu…

90天玩转Python—06—基础知识篇:Python中的七大基础数据类

90天玩转Python系列文章目录 90天玩转Python—01—基础知识篇:C站最全Python标准库总结 90天玩转Python--02--基础知识篇:初识Python与PyCharm 90天玩转Python—03—基础知识篇:Python和PyCharm(语言特点、学习方法、工具安装) 90天玩转Python—04—基础知识篇:Pytho…

前端开发之Element树结构组件el-input的type=“password“时候账号密码自动填充解决方案

Element树结构组件el-input的type“password“时候账号密码自动填充解决方案 前言效果图解决方案 前言 在使用element的input的password当参数和login的参数相同时&#xff0c;在浏览器保存的用户名密码会自动填充&#xff0c;导致input附加上默认值 使用场景一般是在用户管理…

P1123 取数游戏(dfs算法)

题目描述 一个 NM 的由非负整数构成的数字矩阵&#xff0c;你需要在其中取出若干个数字&#xff0c;使得取出的任意两个数字不相邻&#xff08;若一个数字在另外一个数字相邻 8个格子中的一个即认为这两个数字相邻&#xff09;&#xff0c;求取出数字和最大是多少。 输入格式 第…

阿里云ICP备案工信部短信核验详细流程,1分钟搞定教程!

网站ICP备案或APP备案通过云厂商的备案初审后&#xff0c;需要在工信部完成短信核验操作&#xff0c;本文云服务器吧yunfuwuqiba.com以阿里云备案为例&#xff0c;来详细说明工信部短信核验详细流程&#xff0c;非常简单&#xff1a; 阿里云备案提交到阿里云初审&#xff0c;初…

Vector - CAPL - XCP介绍_01

XCP协议全称为X Calibration Protocol&#xff0c;它是一种广泛使用在标定校准和测量的一种通信协议&#xff0c;由 ASAM 工作组标准化&#xff0c; 可以在不同的总线系统上使用&#xff0c;例如&#xff1a;XCP on CAN、XCP on CAN FD、XCP on Ethernet、XCP on FlexRay、XCP …