轻松使用TomCat、Maven和Servlet

news2024/12/25 9:21:24

文章目录

  • Tomcat
    • Tomcat下载
    • 启动Tomcat
    • 启动Tomcat失败的原因
    • 使用Tomcat
  • Maven
    • 创建Maven项目
    • Maven依赖管理
  • Servlet
    • 1.创建Maven项目
    • 2.引入依赖
    • 3.构建目录结构
    • 4.编写Servlet代码
    • 5.程序打包
    • 6.程序部署
    • 7.验证程序
    • 使用IDEA上Tomcat插件简化步骤5和步骤6


Tomcat

Tomcat 就是基于 Java 实现的一个开源免费, 也是被广泛使用的 HTTP 服务器

Tomcat下载

Tomcat官网:https://tomcat.apache.org

进入官网后,会出现以下界面

在这里插入图片描述

统一版本很重要,否则可能会出现大大小小的问题

Tomcat的版本,会和JDK以及Servlet的版本密切绑定在一起,因为我用的是JDK8,所以我下载Tomcat 8,下载时一定要注意自己的JDK和Servlet版本(大版本要一致,小版本无所谓)

选择Tomcat 8后,点击第一个zip下载即可
在这里插入图片描述

下载好后,进行解压缩,里面会有以下内容

在这里插入图片描述

一般我们主要关注这其中的四个文件

在这里插入图片描述

正因为,一个Tomcat上可以同时部署多个Servlet程序,所以,也可以把Tomcat称为“Servlet的容器”,或者简称为“容器”

启动Tomcat

找到bin目录下的startup.bat,双击启动

在这里插入图片描述
只要有这句话,就表示Tomcat启动成功,最后面的849ms,表示本次启动Tomcat所用的时间

出现这么多乱码的原因:
Tomcat内部使用的编码方式是utf8(utf8是当下最主流的编码方式)
但是,我们的Windows是"简体中文版",默认的字符集是GBK,cmd这个程序也是跟随着系统的字符集
数据是按照utf8来构造的,但是cmd在显示的时候按照了GBK的方式来解析,因此出现乱码

解决乱码,就需要统一编码格式,但是不建议修改
可以使用其他方式来解决乱码问题

1.结合idea来使用
2.在Linux上使用

启动Tomcat失败的原因

启动时,cmd闪退

Tomcat要想运行,就需要找到JDK,至于你把JDK安装到什么位置了,Tomcat并不知道,此时就需要配置环境变量

在这里插入图片描述

如何解决这个问题?需要能看到报错提示。闪退了如何看到报错提示?

方案是把双击运行的脚本直接拖到cmd中来运行

在这里插入图片描述

出现这样的原因就是环境变量没配好,需要我们手动配置

在这里插入图片描述

端口号被占用

Tomcat是一个HTTP服务器,启动的时候要绑定端口,一般是绑定两个端口号: 8080,8005

如果这个端口已经被其他程序占用了,此时你启动肯定是失效的!! (闪退)
最典型的情况:你已经启动了一个tomcat,你再尝试启动第二个,第二个tomcat妥妥的失败

但也有启动第一个Tomcat时,也失败了,可能电脑上有别的程序占用了8080和8005端口
此时在cmd中使用命令:netstat -an | findstr 8080/8005 找到并关闭占用该端口号的程序

在这里插入图片描述

使用Tomcat

把tomcat启动完成之后,就可以使用浏览器来访问tomcat了

在浏览器url框中输入:localhost:8080 或者127.0.0.1:8080 进行访问

在这里插入图片描述

自己进行页面部署

在这里插入图片描述

虽然咱们部署了页面到tomcat,上但是这里还有个问题,当前如果页面简单还好直接放到ROOT就行了。如果当前页面比较复杂 (若干个HTML,还依赖了一些css,图片,js…),如果全都堆在这个ROOT目录里,就非常不优雅了。因此更好的做法,是在webapps里单独创建一个目录,把你的页面部署到这个目录中

出现状态码500或者404,如何解决?

有时候,Tomcat已经启动完成,页面也已经部署好,但是还是有差错,例如,出现状态码500或者404的错误

在这里插入图片描述

出现404的原因也可能是没有这个资源

在这里插入图片描述

出现这两个错误的原因大概率是文件的访问权限问题,只要进行以下修改后就能正常访问

在这里插入图片描述

Maven

maven是一个Java世界中,非常知名的 “工程管理工具”

工程管理工具的核心:
管理依赖,构建/编译(也是在调用JDK),打包(把java代码给构造成jar包(jar包是一个特殊的压缩包,类似与rar,里面就是把各种的.class文件放到了一起)或者war包)

什么是依赖?

在进行A操作之前,必须完成B操作
比如今天中午,冯同学想吃面条(A操作),那么就得先去食堂(B操作),如果不去食堂的话,就吃不到面条

我们写代码,也有很多的依赖,比如经常会依赖标准库,经常依赖一些第三方库,这会导致代码的依赖关系非常复杂。
如果是手动管理这个依赖,整个过程相当令人头疼,不光你得研究清楚,每个库都依赖哪些其他库
而且还得研究清楚,这些依赖之间的版本是怎么关联的

为了解决这些问题,java中引入了maven,maven存在的意义就是能够直接把这些操作串起来,一气呵成

创建Maven项目

IDEA内置了现成的maven,因此我们不需要去官网中下载

搭配idea来使用maven

新建项目,选择maven,一路next

在这里插入图片描述

在这里插入图片描述

创建好的目录结构:

在这里插入图片描述

src/main/java这个目录用来放咱们的java代码
src/main/resources这个目录用来放一些依赖的资源
src/test/java这个目录用来放单元测试的代码
pom.xml是maven项目的核心配置文件,一个maven项目的司令部,文件是使用xml这种格式来组织

项目创建好了,使用maven
按照以下方式打开maven的控制面板

在这里插入图片描述
我们用得最多的就是package打包,打包不仅仅只是完成打包,还会将clean,validate,compile,test都执行完,打包的结果一般是jar包或者war包

Maven依赖管理

使用maven帮我们下载并安装第三方库

以mysql驱动包为例
1.去中央仓库上,找到mysql驱动包
链接:https://mvnrepository.com/

在这里插入图片描述
我的mysql版本是5,因此随便找一个就行

在这里插入图片描述


2.把这里的Maven 标签页下的这个 xml 配置复制下来
在这里插入图片描述


3.把内容粘贴到刚刚创建项目的 pom.xml里面
在这里插入图片描述


4.上述过程完成后,一般来说maven就会自动从中央仓库那里下载依赖,如果没有下载,就需要我们手动刷新
在这里插入图片描述
右下角的状态栏中,可以看见下载进度,第一次使用的时候,可能会下载的比较旧,一旦下载好后,后续就可以直接使用了
在这里插入图片描述
由于中央仓库,服务器在国外,下载速度可能会比较慢!!
慢到啥程度?尤其是首次使用maven,下载的依赖是很多的,花个半个小时,一个小时之类的,都是属于正常情况大家还是尽量在网络环境比较好的情况下,去首次使用maven


因为源在国外,是不太稳定的,可能会出现连接超时的现象
在这里插入图片描述
此时就需要我们等一会儿后再去下载,如果还是不行,可以把maven仓库给配置成使用国内的源(使用国内的中央仓库)
如果需要配置,可以看看这篇文章:https://zhuanlan.zhihu.com/p/71998219


6.如果看到了这个库,就说明引入依赖成功,如果没有这个库,尝试点击右上角的刷新按钮,同时也要注意右下角的下载进度条
在这里插入图片描述

Servlet

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

接下来我们创建一个Servlet项目

1.创建Maven项目

按照创建Maven的步骤,创建一个名为servlet_project的maven项目

2.引入依赖

需要在代码中引入Servlet api,这个api不是JDK内置的,而是第三方(Tomcat提供的)
Tomcat相对于Java官方来说,仍然属于第三方
借助maven直接就能引入

在中央仓库 https://mvnrepository.com/ 中搜索 “servlet”,一般第一个结果就是

在这里插入图片描述

Servlet 的版本要和 Tomcat 匹配
可以在 http://tomcat.apache.org/whichversion.html 查询版本对应关系

在这里插入图片描述

在这里插入图片描述

把它复制到 pom.xml中

在这里插入图片描述

如果其中的字体是标红的,那么说明依赖还没下载好,需要我们等待一下,或者进行手动刷新

找到maven仓库,如果存在这个jar包,说明已经下载好了

在这里插入图片描述

3.构建目录结构

虽然当下maven帮我们创建了一些目录,但是还不够还不足以支撑咱们写一个Servlet项目
因此需要手动的再创建一些目录和文件出来

1.在main中新建一个webapp目录

在这里插入图片描述

2.在刚刚建好的webapp下,再建一个WEB-INF目录

在这里插入图片描述

3.在WEB-INF中建一个web.xml

在这里插入图片描述

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>

在这里插入图片描述

4.编写Servlet代码

在这里插入图片描述

在java这个目录中创建一个名为HelloServlet的类,继承HTTPServlet

在这里插入图片描述

这里标红了,说明代码中找不到HttpServlet这个类,依赖没有被正确引入
因此,将鼠标放在HttpServlet上,alt+回车,就能导入这个类了

在这里插入图片描述

现在需要重写HttpServlet中doGet方法

在这里插入图片描述

直接回车,补全代码

在这里插入图片描述

doGet方法要做的工作,就是根据请求,计算生成响应
一个服务器的工作流程,就可以分成三个典型的步骤:

1、接受请求并解析
2、根据请求计算响应
3、构造响应数据,并返回给客户端

步骤1和步骤3,Tomcat已经帮我们做好了
步骤2就是我们自己要实现的逻辑,也就是doGet要实现的内容

因此我们不需要调用父类的doGet方法,必须自己实现doGet方法

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

        //这个是让服务器在自己的控制台里打印
        System.out.println("hello Servlet");

        //在页面上也能打印hello Servlet
        //把hello Servlet字符串放在http响应的body中,浏览器就会把body的内容显示到页面上
        resp.getWriter().write("hello Servlet");
    }
}

在这里插入图片描述

到这里,代码还差一步就能运行了
需要在这个类上方添加一个注解

在这里插入图片描述
HttpServlet中除了有doGet方法之外,还有其他的方法,例如doPost,doDelete方法等

在这里插入图片描述

http有哪些方法,HttpServlet就有哪些方法,因此需要保证请求是什么方法,服务器就需要用对应的方式去处理

接下来,我们需要打包这个程序

5.程序打包

当前的代码,是不能单独运行的(没有main方法)
需要把当前的代码,打包,然后部署到Tomcat上,由Tomcat来进行调用

在打包之前,需要修改pom.xml

<packaging>war</packaging>
<build>
    <finalName>hello_servlet</finalName>
</build>

需要将这段代码放置到pom.xml文件中

在这里插入图片描述

jar和war都是java发布程序用的压缩包格式
war算是给Tomcat专门弄的。这里不光会包含一些.class,还可以包含配置文件,以及依赖的第三方的jar,还有html,css,js…

双击package进行打包

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

hello_servlet.war就是我们所需要的

6.程序部署

把war包拷贝到tomcat的webapps目录下

在这里插入图片描述

在这里插入图片描述
将这个war复制,然后放在tomcat的webapps目录下

在这里插入图片描述

启动Tomcat

在这里插入图片描述

启动完成后,
在这里插入图片描述

7.验证程序

在这里插入图片描述

可以这样认为:

一个Tomcat上可以同时部署多个网站,一个网站上又有多个页面
一个请求中的第一级路径,就告诉Tomcat,要访问的网站是哪个,第二级路径,就告诉Tomcat 要访问的页面是这个网站中的哪个页面

使用IDEA上Tomcat插件简化步骤5和步骤6

smart tomcat是idea的一个插件

安装smart tomcat

在这里插入图片描述
我这里已经安装过了,因此这个按钮是灰色的。
安装好后,一般要重启一下idea

在一个项目中,首次使用,需要进行简单的配置,后续就不必再配置了

这个按钮在右上角
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

都弄好后,点击这里的绿色小三角符号,就会自动完成打包,部署,重启Tomcat这一系列操作
在这里插入图片描述

在这里插入图片描述

这些文字在cmd中是乱码,但在idea中就不再乱码了

虽然这些信息是红色的,但是并不是报错,看一看最后一行,就知道Tomcat已经启动成功了,此时再去访问页面

在这里插入图片描述

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

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

相关文章

单点登录等功能该用 Keycloak 这种开源框架实现吗?

Keycloak 是一个开源软件产品&#xff0c;旨在为现代的应用程序和服务&#xff0c;提供包含身份管理和访问管理功能的单点登录工具。 开源软件虽然能够定制和修改源代码&#xff0c;还可以降低开发成本&#xff0c;但是 Keycloak 实现起来还是有不少问题&#xff1a; 用户迁移…

python实现五子棋游戏(pygame版)(附零基础学习资料)

前言 使用python实现pygame版的五子棋游戏&#xff1b; 环境&#xff1a;Windows系统python3.8.0 &#xff08;文末送读者福利&#xff09; 游戏规则&#xff1a; 1、分两位棋手对战&#xff0c;默认黑棋先下&#xff1b;当在棋盘点击左键&#xff0c;即在该位置绘制黑棋&a…

APT 攻击溯源方法

概述&#xff1a; 当今世界正值百年未有之大变局&#xff0c;网络空间成为继陆、海、空、天之后的第五大疆域&#xff0c;安全威胁也随之延伸至网络空间。没有网络安全就没有国家安全&#xff0c;在新时代网络空间安全已经上升至国家安全的高度。高级持续性威胁(Advanced Pers…

yolov1模型

目录 一、机器视觉算法 二、yolov1 预测阶段&#xff08;向前推断&#xff09;​ 三、预测阶段的后处理 &#xff08;声明&#xff1a;本文章是在学习他人视频的学习笔记&#xff0c;图片出处均来自该up主&#xff0c;侵权删 视频链接&#xff1a;为什么要学YOLOV1_哔哩哔哩_b…

拿铁DHT-PHEV座舱智能程度体验笔记(超详细)

评测时间&#xff1a; •第一次 2022年10月1日-10月7日 •第二次 2022年10月25日 评测配置&#xff1a; •两驱超大杯 18.98万元好评功能盘点 座舱芯片及内存&#xff1a;高通骁龙 8155&#xff0c;算力8TOPS&#xff0c;存储8GB&#xff0c;内存12G&#xff0c;一流的配置。 四…

领悟《信号与系统》之 连续时间信号的时域分析法

连续时间信号的时域分析法一、LTI 连续系统的响应1. LTI 微分方程的建立与求解2. LTI 连续系统的零输入响应与零状态响应1. 零输入响应2. 零状态响应3. 全响应二、冲激响应和阶跃响应1. 冲激响应2. 阶跃响应三、卷积积分及其性质1. 任意信号的分解2. 任意信号作用下的零状态响应…

一个合格的中级前端工程师需要掌握的 28 个 JavaScript 技巧

1. 判断对象的数据类型 使用 Object.prototype.toString 配合闭包&#xff0c;通过传入不同的判断类型来返回不同的判断函数&#xff0c;一行代码&#xff0c;简洁优雅灵活&#xff08;注意传入 type 参数时首字母大写&#xff09; 不推荐将这个函数用来检测可能会产生包装类型…

【跨境电商】6种实用有效的策略帮助改善客户沟通

关键词&#xff1a;跨境电商卖家、客户沟通 1.什么是客户沟通&#xff1f; 客户沟通是公司与消费者的互动。品牌识别接触点并通过各种渠道&#xff08;例如电话、电子邮件和实时聊天&#xff09;在每个接触点建立关系。公司可以通过始终如一的参与并将消费者置于这种互动的中心…

【Redis】内存回收:内存淘汰策略

【Redis】内存回收&#xff1a;内存淘汰策略 文章目录【Redis】内存回收&#xff1a;内存淘汰策略一、Redis内存回收-过期key处理二、Redis内存回收-内存淘汰策略一、Redis内存回收-过期key处理 如果你发现&#xff0c;平时在操作 Redis 时&#xff0c;并没有延迟很大的情况发生…

Watermelon Book(二)线性模型

文章目录线性回归对数几率回归线性类别分类多分类学习类别不平衡问题基本形式&#xff1a;若给定 d个属性描述的示例x(x1,x2,x3…xd)&#xff0c;则线性模型试图学得一个 通过属性的线性组合来进行预测。f(x)W1*X1W2*X2...Wn*Xnw(T)xbw(w1;w2;w3;wn;)线性模型形式简单、易于建模…

[附源码]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…

排序算法——七种排序算法汇总,详细

文章目录排序排序的概念及应用一、直接插入排序1. 简介2.动图展示3.过程4.代码5.总结二、希尔排序1.简介2.过程3.代码4.总结三、选择排序1.简介2.代码3.总结四、堆排序1.代码2.总结五、冒泡排序1.过程2.代码3.总结六、快速排序1.简介2.过程3.两种优化快速排序的思想4.代码-递归…

【附源码】计算机毕业设计JAVA学生校内兼职管理平台

【附源码】计算机毕业设计JAVA学生校内兼职管理平台 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA…

什么是 SSH 密钥? 生成、身份验证、密钥对信息等

SSH 密钥不仅可以提高安全性&#xff0c;还可以实现当今企业所需的大规模连接流程、单点登录 (SSO) 以及身份和访问管理的自动化。 什么是 SSH 密钥&#xff1f; SSH 密钥是安全外壳 (SSH) 协议中使用的安全访问凭证。 SSH 密钥使用基于公钥基础设施 (PKI) 技术&#xff08;数…

Android12窗口模糊(二)高斯模糊API源码解析

前言 在 Android 12 中&#xff0c;提供了一些用于实现窗口模糊处理效果&#xff08;例如背景模糊处理和模糊处理后方屏幕&#xff09;的公共 API。窗口模糊处理或跨窗口模糊处理用于模糊处理给定窗口后方的屏幕。 有两种窗口模糊处理方式&#xff0c;可用于实现不同的视觉效果…

不小心清空了回收站怎么恢复,回收站删除的东西可以恢复吗

不小心清空了回收站怎么恢复&#xff1f;回收站是操作系统提供的一个非常实用的功能&#xff0c;专门为用户保存从电脑硬盘删除的各种数据&#xff0c;因而很多时候我们都会用到回收站&#xff0c;它能够保存各种数据&#xff0c;我们也能够在里面恢复自己想要的数据&#xff0…

Flutter组件--AppBar相关属性

AppBar介绍 AppBar是基于Material Design设计风格的应用栏&#xff0c;一般使用在Scaffold内部&#xff0c;作为顶部导航栏。 为什么需要AppBar 1、因为导航栏里面一般由左侧功能键&#xff08;返回键、菜单键&#xff09;、标题、右侧功能键组成&#xff0c;而AppBar里面内置…

django的使用步骤详细

一、安装django pip install django 二、创建django项目 放django文件的的文件路径上输入cmd进入终端输入下面的命令 django-admin startproject 项目名称 三、app的创建 进入创建好的项目里面输入一下的命令 python manage.py startapp app名称 四、注册app 五、编写U…

计算机视觉:基于Numpy的图像处理技术(二):图像主成分分析(PCA)

计算机视觉&#xff1a;基于Numpy的图像处理技术&#xff08;二&#xff09;&#xff1a;图像主成分分析&#x1f3f3;️‍&#x1f308; 文章目录计算机视觉&#xff1a;基于Numpy的图像处理技术&#xff08;二&#xff09;&#xff1a;图像主成分分析:rainbow_flag:图像主成分…

企业数据泄漏事件频发,如何防止企业数据泄漏?

2022年即将接近尾声&#xff0c;这一年受疫情和国际经济形势影响&#xff0c;各行各业都不太好过&#xff0c;同样互联网领域发展不平衡、规则不健全、秩序不合理等问题日益凸显&#xff0c;虽然互联网的快速发展为企业数字化转型提供了支撑&#xff0c;但是互联网发展进程中“…