通过Tomcat / Small Tomcat,如何部署Servlet?(超详细)

news2025/1/12 22:57:21

目录

基于Tomcat对Servlet进行部署

一、创建项目

二、引入Servlet依赖

三、构建目录结构

四、编写代码

五、打包程序

六、部署程序

七、验证程序

基于Smart Tomcat对Servlet进行部署

第一步:下载Smart Tomcat插件

第二步:进行相关配置

 

第三步:运行配置

 第四步:确认部署是否成功

第五步:验证程序

Tomcat的运行方式


基于Tomcat对Servlet进行部署

        以下将会通过七个步骤,以打印“hello”为例,对Servlet进行部署;

        使用工具(这是配套使用的方案!):idea2021或2020,jdk 8,Java Servlet API 3.1.0版本,Tomcat 8.5;


一、创建项目

        首先,需要创建一个maven项目(这里建议使用idea社区版2021或2020,因为2022版本创建maven项目变化比较大);(如下图)

项目创建好后,可以看到目录结构(如下图)

解释:

  • main文件里主要存放业务代码;
  • resources存放代码需要的依赖资源(暂时不用);
  • test测试代码;
  • test下的java文件是项目的“阵眼”,是全局配置文件,有很多关于项目相关属性的配置;

为什么要使用maven来构建项目?

        以前写的代码,都是在idea中的main方法里直接点击运行即可,针对简单的程序还可以,但对于有多个模块,病区相互依赖的程序来说,使用maven,就方便了我们进行编译和打包操作;


二、引入Servlet依赖

        Servlet不是java标准库自带的,所以需要下载Servlet依赖;(maven的一个核心功能就是能自动管理依赖:把使用库中依赖的东西,自动从中央仓库中下载下来)

打开中央仓库搜索servlet:(如下图)

地址:Maven Repository: Search/Browse/Explore (mvnrepository.com)

选择第一个API:(如下图)

选择3.1.0版本(如下图):

 

 选择maven,复制里面的内容(如下图)

        返回idea,打开pom.xml,手动写下这个标签(如下图),把刚刚复制的内容粘贴到这个标签里

 

解释:

        这时候idea就会自动根据你刚刚粘贴进去的内容,去中央仓库下载依赖,依赖下载完成之前,这里是标红报错的,等待他下载好之后,就手动刷新一下(如下图);


三、构建目录结构

        根据Tomcat要求的目录,咱还需要添加点东西(如下图)

注意:一定要注意命名,严格按照下图格式!

 web.xml中需要写点东西,写的内容不用记,直接复制,这部分内容是固定的,Tomcat会识别他,所以不能没有;

这里给出代码(直接复制就可以):

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

        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

这个是schema文件,描述了你的xml中都允许写哪些节点,结点间的层次关系,那些属性是合法的;

        作用:验证 + 补全;

        如果这里标红报错了,之影响以上作用,但是咱目前来说用不上,但是如果实在不限看到标红,可以alt + enter;

四、编写代码

        将代码放到java目录下(也可以创建一些package)如下图:

        将创建好的这个公开的类里继承HttpServlet;(这是刚才通过maven下载的servlet的jar包);

根据请求计算响应——写下doGet方法:(如下图)

 doGet方法是什么?

        doGet就表示,当Tomcat收到GET请求时,就会调用到此方法;

扩展:

        这里还有很多函数,写doGet函数,就表示使用GET方法,写下doPost函数,就会使用Post方...

HttpServletRequest req是什么?

        这是Tomcat的请求报文,将他解析成一个对象了;

HttpServletResponse resp 是什么?

        这是Tomcat构造的一个空的对象,就是根据请求所要计算的响应,resp相当于“输出型参数”,doGet就需要根据req 的数据 + 业务逻辑构造出一个完整的resp对象;最后Tomcat就把resp对象转化成Http响应报文;

接下来,还需要在此方法之上,加一段代码(如下图):

 解释:

        表示当GET请求并且url里的路径是/hello请求的时候,Tomcat才会调用到这里的doGet方法;所以我们在请求中写不同的路径,就会关联上不同的类,也就会执行不同的方法;

修改这个方法里的内容(以打印hello为例):解释都在注释里

@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");//在Tomcat这里打印日志
        resp.getWriter().write("hello");//给客户端返回hello
    }
}

解释:为什么一定要删掉 super.doGet(req, resp) 这段代码?

       这是为了防止程序员忘记写对应的重写方法专门弄的一个保险;

       当代码中有 super.doGet,然后你在写下计算的响应代码,而 super.doGet 中引用父类的方法已经有默认的响应(响应是用 resp.sendError,此方法将抛出illegalstateexception。使用此方法后,应将响应视为已提交;简而言之就是一个检查机制,检查你是否忘记写重写方法),你接着又写了一次响应,就相当于有两次响应,所以若不删除这段代码,你会得到了非法的状态异常。


五、打包程序

打包是干什么的?

        需要将缺失的依赖下载好,然后编译所有的.java文件,得到一堆class文件,再将.class压缩到一个压缩包中;

Servlet程序是怎么跑起来的?为什么要打包?

        以前所写的Java代码中,都包含main方法,这就相当于一个带发动机的火车车头,剩下的java代码就是车厢;在Servlet的代码中,Tomcat就是带发动机的火车车头,Servlet代码就是车厢,打包就是将写好的代码挂在车头后面~

具体做法:直接使用maven打包(如下图)

 双击后,结果如下:

 问题:

        虽然成功的打包出了jar包,但是tomcat不认识,因为tomcat是要求压缩包的格式为war包!

jar包和war包有什么区别?

        最主要的区别就是,war包会将整个webapp的目录都打包进去,包括web.xml,以及外来的一些静态html、css等;

解决办法:修改pom.xml,在其中写下如下代码:

 最后在点击一次打包,就可以观察在target中看到我们所需要的文件了(如下图)


六、部署程序

将war包拷贝到Tomcat的webapps中;

保存到(如下图目录)

最后运行你的Tomcat,就可以发现,你的war包会自动解压缩;


七、验证程序

        通过浏览器构造一个HTTP请求,访问Tomcat服务器;

可以观察到如下结果:

 这样就成功啦~



基于Smart Tomcat对Servlet进行部署

        实际上,对于以上的七步,还可以进行优化:第五第六步是可以“一键式”打包和部署,使用IDEA社区版,可以使用第三方的Smart Tomcat插件来完成;


第一步:下载Smart Tomcat插件


第二步:进行相关配置

 


第三步:运行配置

        一键式的完成打包部署;(实际上,就是让idea直接调用tomcat,并且加载写的servlet程序);(如下图)

 第四步:确认部署是否成功

 注意:

        这里标红不要害怕,不是报错,Tomcat的日志信息就是这样的颜色,看到startup in xxxms就表示成功了;


第五步:验证程序

  


Tomcat的运行方式

        1.直接在startup里运行,手动拷贝war包;

        2.Smart Tomcat直接通过java代码,调用tomcat的jar包运行,不需要调用的时候指定tomcat加载哪个webapp;


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

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

相关文章

【Unity3D】选中物体描边特效

1 前言 描边的难点在于如何检测和识别边缘&#xff0c;当前实现描边特效的方法主要有以下几种&#xff1a; 1&#xff09;基于顶点膨胀的描边方法 在 SubShader 中开 2 个 Pass 渲染通道&#xff0c;第一个 Pass 通道渲染膨胀的顶点&#xff0c;即将顶点坐标沿着法线方向向外扩…

Android BLE HIDS Data ,从问询DB 到写入Android 节点的flow 之一

BLE 的HIDS服务&#xff0c;可以理解为BR/EDR HID在BLE 上的简化版&#xff0c;因BLE的特殊性&#xff0c;BR/EDR HID的部分feature在HIDS 中被移除。 本文将讨论Android 蓝牙BLE 中HIDS 服务如何接收 Data 并写入到Android 节点"/dev/uhid"的flow。----关于Android…

openpowerlink 01

源码地址&#xff1a; https://sourceforge.net/projects/openpowerlink/ 源码目录 qt 源码目录 qt MN 源码 MN是主站的意思 用cmake 构建 qt cmakelists.txt分析 文件 mnobd.cdc&#xff1a; 此文件用于配置 MN 堆栈。它包括MN和所有CN的所有配置数据&#xff0c;包括网…

云安全解决方案安全保障体系框架

安全需求和挑战 从风险管理 的角度讲&#xff0c;主要就是管理资产、威胁、脆弱性和防护措施及其相关关系&#xff0c;最终保障云计算平台的持续安全&#xff0c;以及 其所支撑的业务的安全。 云计算 平台是在传统 IT技术的基础上&#xff0c;增加了一个虚拟化层&#xff0c;并…

[Spring MVC7] 解决Redis乱码前缀问题

最近在做Redis缓存的时候&#xff0c;遇到了一个棘手的问题&#xff0c;简单来说就是项目使用Spring的RedisTemplate进行Redis数据存取操作&#xff0c;实际应用中发现Redis中key和value会出现“无意义”乱码前缀。如果是普通的java程序是没有这个问题。 本文解决Redis乱码问题…

基于Matlab-gui信号系统设计

目 录 1绪论 - 1 - 2系统分析和开发软件概述 - 6 - 2.1 需求分析 - 6 - 2.2系统开发环境和运行环境 - 6 - 2.3 Matlab图形用户界面(GUI) - 6 - 2.4 系统主要目标及功能 - 7 - 2.4.1 系统目标 - 7 - 2.4.2 系统主要功能 - 8 - 3系统软件平台的设计 10 3.1系统整体框图 10 3.2系统…

阿里的三个「价值支点」

历史总是轮回的。 2015年5月&#xff0c;身处低谷的阿里换了掌舵人&#xff0c;张勇由COO升任CEO&#xff0c;随后进行了一轮组织架构调整&#xff0c;并通过新零售、淘宝直播、阿里云等业态为阿里安上未来发展引擎。 当时的阿里市值涨至2000亿美元左右&#xff0c;华尔街投资…

终端天线—11.NFC线圈仿真

NFC线圈单体仿真 NFC线圈主要根据终端设备预留的空间大小&#xff0c;去设计走线宽度和圈数以及面积&#xff0c;NFC单体主要关注其13.56MHz处的电感量大小&#xff0c;以及阻抗的虚部和实部&#xff0c;可以根据ST和NXP芯片的要求去设计。 一、Original model 1.Simulation …

C语言文件操作【详解】

本期介绍&#x1f356; 主要介绍&#xff1a;为什么使用文件&#xff0c;什么是文件&#xff0c;文件的打开和关闭的操作方法&#xff0c;文件的顺序读写于随机读写&#xff0c;文件读取结束的判定&#x1f440;。 文章目录一、为什么使用文件&#x1f356;二、什么是文件&…

React 入门:使用脚手架写一个Hello组件

文章目录本文目标开发前的准备编写主页面 index.html编写外壳组件 App.js编写入口文件 index.js代码组件化开发 Hello 组件开发 Welcome 组件引用组件组件化实现效果样式的模块化提升编码效率本文目标 通过使用脚手架确实让我们很方便的创建一个 React 项目基础代码结构&#…

力扣(LeetCode)11. 盛最多水的容器(C++)

双指针贪心 盛水的面积 长度 \times 左右柱子最低高度 area(r−l)min(height[l],height[r])area (r-l)\times min(height[l],height[r])area(r−l)min(height[l],height[r]) 初始时&#xff0c;我们不知道每个柱子的高度&#xff0c;但是我们可以选取最左侧柱子和最右侧柱子…

期望E与高斯分布的期望

目录 1. 期望定义 2. 期望性质 2.1 用期望定义方差 / 标准差 方差定义 标准差定义 方差的表示——离散型&#xff1a; 方差的表示——连续型&#xff1a; 方差的性质 3. (一元)高斯分布定义 4. (一元)高斯分布的性质 5. 二维随机向量的数学期望E与方差σ 参考 1. …

PyCharm安装部署(一) 百篇文章学PyQT

本文章是百篇文章学PyQT的第一篇&#xff0c;本文讲述如何安装PyCharm IDEA工具&#xff0c;其它工具也可以但是PyCharm 相对来说用的人多大家都认可(方案成熟)&#xff0c;pycharm是一款功能强大的python编辑器&#xff0c;具有跨平台性&#xff0c;本文介绍一下pycharm在wind…

SSM 医院在线挂号系统

SSM 医院在线挂号系统 SSM 医院在线挂号系统 功能介绍 首页 登录注册 图片轮播展示 系统简介 系统公告 医院介绍 医生展示 医院资讯 预约挂号 收藏 评论 在线留言 查看留言 后台管理 登录 管理员管理 修改密码 医院信息管理 医生信息管理 用户权限管理 科室信息管理 预约挂号…

微信小程序如何转云开发

微信小程序云开发&#xff0c;为前端全栈开发提供了很大的便利。本文主要介绍普通的微信小程序如何让转为云开发。 一、建cloudfunction文件夹 cloudfunction文件夹建立在小程序的根目录下。 二、修改 project.config.json配置 在 project.config.json文件中&#xff0c;添加&…

ip子网的划分方法

目录 1 子网划分的定义&#xff1a; 2 掩码介绍 3、子网划分要解决的问题&#xff1a; 4 子网划分步骤 5 范例1根据ip和掩码求子网和网络广播地址&#xff1a; 6 范例2根据ip和掩码求同网段地址 7 合并子网的例子根据ip范围合并&#xff0c;并添加回程路由&#xff1a; …

还不进来看吗?c趁你不注意偷偷将你的数据类型转换啦

前言 如果不了解 整形提升 的小伙伴可就要注意了,c偷偷将你的数据类型改变了你都不知道.快点和牛牛一起学习一下c语言中 整形提升的知识吧 ! 一、整形提升是什么&#xff0c;又是怎样提升的? 不知道小伙伴们有没有听过整形提升这个词? 整形提升是什么呢? C语言中,在进行…

[附源码]java毕业设计石林县石漠化信息查询分析系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【GlobalMapper精品教程】020:Lidar点云数据分类(自动分类、手动分类)案例详解

航测点云通常跟DSM一致,即包含植被、房屋等信息,必须进行点云分类、过滤,才能生成准确的高程点、等高线和DEM等地形数据。本文以案例的形式详细讲解globalmapper23中点云工具及使用方法。 文章目录 1. 点云分类2. 创建地面高程格网3. 地形绘制4. 格网转点云5. 点云抽稀6. 点…

面试:java中的各种锁

共享锁 共享锁有CountDownLatch, CyclicBarrier, Semaphore, ReentrantReadWriteLock等 ReadWriteLock&#xff0c;顾名思义&#xff0c;是读写锁。它维护了一对相关的锁 — — “读取锁”和“写入锁”&#xff0c;一个用于读取操作&#xff0c;另一个用于写入操作。“读取锁…