> 文档中心 > 一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

在这里插入图片描述

  • Tomcat
    • 下载Tomcat教程
    • tomcat的一些文件结构
    • 启动Tomcat
      • 启动失败的一些原因
    • 使用Tomcat
      • 针对可能出现 500 状态码的解决方案
      • 部署页面
  • Maven
    • 如何下载Maven
    • 如何使用Maven
      • Maven 管理依赖
  • Servlet
    • 七 个步骤完成一个Servlet 并输出hello world!
      • 1:创建一个Maven项目
      • 2:引入依赖
      • 3:创建目录结构
      • 4:编写 Servlet 代码
      • 5:打包程序
      • 6:部署程序
      • 7:验证程序
        • 简化 5 和 6 步骤(将 Tomcat 集成到 IDEA 中)
    • 常见错误问题
      • 出现了 404 状态码
      • 出现 405 状态码
      • 出现 500 状态码
      • 出现"空白页面"
      • 出现"无法访问此网站"

Tomcat

Tomcat 就是一个 HTTP 服务器…

我们知道 HTTP协议就是客户端 和 服务器之间的交互数据的格式,可以用ajax 和 Java Socket 分别来构造 HTTP 客户端,这个Tomcat 就是基于Java的,有了他之后,他按照 HTTP 协议格式来解析请求,在调用用户指定的代码,并且按照 HTTP 响应的格式来构造返回数据,就可以让别人也来访问你的网页了

下载Tomcat教程

在官网下载即可:
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

到这里就下载安装完成了

官网链接:tomcat官网

tomcat的一些文件结构

一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

补充:
正因为,一个 Tomcat上面可以同时部署多个 Servlet 程序,所以,也可以把 Tomcat 称为"Servlet 的容器",简称"容器"
所以在计算机圈子,我们经常会看到容器(Container)这个概念,到处都在用
容器1:Java的集合类 => C++ 他们就称为 容器,然后一些Java程序员也跟着把 集合类 叫做容器
容器2:Tomcat 是 Servlet 的容器,一个 Tomcat上面可以承载多个 webapp
容器3:Spring 可以管理很多个 Bean 对象,Spring也可以称为 Bean 的容器
容器4:Docker 也是涉及到 容器的概念,Docker 可以认为是轻量级的虚拟机(软件模拟出的一个计算机),一个docker程序里,可以有多个"轻量虚拟机",每个轻量虚拟机里面又可以包含很多程序,就把这个轻量虚拟机称为容器,进一步也把 docker 称为容器了…
… … … …
所以,以后如果听到容器这个词的时候,一定要仔细琢磨琢磨,分析分析,当前的这个"容器"到底是啥,千万不要把这些容器搞混了,驴唇不对马嘴就尴尬了

启动Tomcat

打开 bin > 双击startup.bat(windows)
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

有了这个说明成功启动了
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

启动失败的一些原因

1:出现闪退:环境变量的问题

Tomcat 要想成功运行,他就得找到 JDK!!,这就要需要你成功安装JDK,配置好环境变量,这是我之前配置好的环境变量
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

Tomcat得找到JDK这个位置,才能去调用

还是不行,不知道哪出问题了?我们可以这样来做
我们需要看到报错提示,把startup.bat直接拖到cmd,观察报错信息
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

会出现这些,这些是我已经配好了
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
如果这里的一组环境变量,某个有问题,他就会告诉你,是谁有问题,可能有些还不行,一直重复这个步骤,查看原因…

一般没配好的,会提示:
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

根据他提示的在环境变量中新建:把你的路径填进去

一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

2:出现闪退:端口号被占用
Tomcat 是 一个 HTTP 服务器,启动的时候是要绑定端口的,一般他是绑定两个端口号:8080 , 8005,如果这个端口号已经被其他程序占用了,此时你在启动新的肯定是会失败的,就是说你已经启动了一个Tomcat,前一个没关,在启动一个新的,肯定会失败.
也有可能是电脑上有别的程序占用了8080 / 8005,这个时候如果你启动Tomcat,也是会失败的,查看端口:在cmd输入:netstat -an | findstr 8080
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
有的话就把这个被占用端口的进程干掉在启动tomcat

使用Tomcat

我们把 Tomcat启动之后,就可以通过浏览器来访问 Tomcat 了…
在浏览器输入:127.0.0.1:8080,会出现tomcat欢迎界面
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

针对可能出现 500 状态码的解决方案

注意这里可能有的小伙伴会发现,明明可以启动成功,为啥访问不了出现了 404 或 500 这样的的状态码,除了上述端口被占用了以外(我们可以修改端口,或者关闭被占用端口的进程),出现 500 的状态码其实是最好解决的,因为他已经告诉了你原因,我们可能是文件夹权限的问题
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
解决办法:
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

部署页面

我们可以根据此路径下新建一个html文件
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

启动tomcat并在网页打开他
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

就可以显示出我们的内容,这个用tomcat来访问的是可以让别人也来访问你的页面的(前提是你们处在同一局域网或者你有一个服务器,可以访问外网 IP)

如果我们每一个文件都放在 这个ROOT里面会不会太多了,特别是还包含css ,js这种?
因此我们可以在webapps 里单独创建一个目录,把你的页面部署到这个目录中也行…
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

(你也可以放在 webapps 里,和 ROOT同级,只要路径对了就行,就需要我们前面理解的绝对路径和相对路径)

一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

Maven

是一个在 java 中 非常 6 的存在,是一个非常知名的"工程管理工具" / “构建工具”,他主要用于管理 "依赖",构建/编译(调用jdk时),打包 java代码给构成 jar包 或者 war包(特殊的压缩包,类似 rar这种),里面就是各种 .class文件 放到一起,向我之前写的 jdbc编程 就下载了一个mysql驱动包,就是依赖于他…

"依赖"怎么理解?
(按正常思维)要想结婚 得先有女朋友(男朋友)&&有房有车&&有钱…
他其实是很复杂的,可以嵌套 A > B > C > D 等等,如果没有这个Maven,你就需要自己捣鼓捣鼓,哪些是哪些的依赖,而有了Maven就不一样了,他自动帮我们整理,不需要你去捣鼓!!只能说非常香

如何下载Maven

这个我推荐使用 IDEA这个工具,他是真的 非常的香(里面是内置了现成的 Maven),可以去搜一下相关的IDEA下载教程

如何使用Maven

我们搭配 IDEA 来使用
就是一路yes:
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

Maven 管理依赖

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

举个例子:
我们以 当初 下载 mysql 驱动包为例
先去中央仓库上,找到mysql驱动包:
链接:https://mvnrepository.com/
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)我数据库是5版本的,随便找一个5版本的点击
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
把这里的Maven 标签页下的这个 xml 配置复制下来
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
把内容粘贴到刚刚创建项目的 pom.xml里面
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)一般,maven是会自动从中央仓库那里下载依赖,第一次可能会比较久
(如果没导进来,mysql和版本那里一般是红色的),如果他没自动下载,我们可以手动刷新,就会下载
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
可能下载会比较慢,因为这个中央仓库服务器在国外,所以尽量在网络环境好的时候使用maven
接下来就可以使用了:
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

Servlet

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

七 个步骤完成一个Servlet 并输出hello world!

我们根据以下 7 个步骤来构建Servlet还是很容易的

1:创建一个Maven项目

一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

不同版本的idea 可能创建的Maven项目不一定一模一样

2:引入依赖

就是需要我们在代码中 引入 Servlet api,这个 api是第三方(Tomcat)提供的,我们需要去中央仓库引入

链接:https://mvnrepository.com/

一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

把它复制到 pom.xml
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

第一次导入多半是红色的字体,我们需要手动刷新(第一次有些人可能是有点慢的,因为中央仓库服务器在国外,我们有时候访问是很慢的,我们需要在良好的环境下才可以进行操作)

一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

3:创建目录结构

当下项目的这些目录是不够的,需要我们在手动创建一些目录和文件夹(名字也要相同,这是规定)
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

这些名字的命名都是规定的,然后再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>

一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

可能有些人导进去之后是红色的,像这种:
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

这种现象其实是正常的,因为有些idea他不能识别 Java以外的语言是否正确,他就会报红,我们只需要选中他,根据提示选第一个就行了
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

4:编写 Servlet 代码

一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

需要注意一点:我是把super.doGet(req,resp)给注释掉的,因为我们需要自己的模板,不需要他的

doGet 方法要做的工作,就是根据请求,计算生成响应…

一个服务器的工作流程,可以分成这样的三个步骤:
1:接收请求并解析 2:根据请求计算响应 3:构造响应数据,并返回给客户端
其中,步骤二就是我们程序员自己要实现的逻辑,第一步和第三步都是 tomcat 帮我们做好了的

举个例子:
我们可以把服务器想象成一个餐馆:
你对老板说:“来一碗清汤小面”,老板就会收到这个"来一碗清汤小面"的请求(请求),然后后厨就开始动起来了,后厨这里,一个下面,一个切菜,一个调料(他们就像是并发工作,相当于三个线程)(计算响应)…,再来一个师傅整合…最后服务员把面端到你面前(响应)
这里就包含了这三个步骤

一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

还有最后一步了:
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出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 { //干掉父类的doGet() //super.doGet(req, resp);  //在程序控制台里打印,观察结果 System.out.println("hello world!"); //在页面上打印 hello world! resp.getWriter().write("hello world!");    }}

此处的代码编写就算完成了…

5:打包程序

当前我们的代码没有main方法,是不能单独运行的,所以就需要把当前的代码进行打包,然后 部署到 tomcat 上,然后有tomcat来进行调用(我们可以把这个完整的应用程序理解成一个能跑的汽车,Servlet代码 相当于是汽车上的货箱(自己动不了),tomcat就是车头可以跑(带着货箱跑))

一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

6:部署程序

把咱们刚刚的 war包 拷贝到 tomcat 的 webapps 目录下
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

7:验证程序

在浏览器输入相关路径:
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

他返回的内容就是 HTTP响应的 body 部分,这个页面我们是通过 Java 代码生成的,和我们直接创建一个 HTML 是有区别的…HTML 里面的内容是固定死了的,不会改变,而我们通过 Java 代码生成的的内容是可以根据用户不同的输入,显示不同的结果

我在 Java 代码里加上一段时间戳
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
在运行:
刷新多次就会发现他的时间戳是不一样的一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

好了,这里的 7 个步骤就完成了,记住,上诉的 7 个 步骤这只是针对一个新的项目,如果我们项目已经创建好了,后续修改的时候,前面的 三个 步骤就不必要重复了,直接操作 4-7 就行

简化 5 和 6 步骤(将 Tomcat 集成到 IDEA 中)

我们发现,每次打包部署都是比较麻烦的,因此我们也是有一些办法来提高上诉流程效率的,我们可以通过第三方工具来简化 5 和 6 的操作

IDEA 虽然本身已经有很多功能了,但是也不可能做到面面俱到!! 因此,IDEA 就提供了一系列的扩展能力,允许第三方来开发一些程序,交给 IDEA 运行,就相当于是对 IDEA 进行了扩展…
我们就可以通过 IDEA 上的插件,直接把 Tomcat 给集成进去,做到一键完成打包部署,smart tomcat 就是 IDEA 的一个插件…

需要注意一点:Tomcat 和 IDEA 是两个独立的程序!!! Tomcat 不是 IDEA 功能的一部分,在我们后面开发中,主要还是通过 IDEA 调用 Tomcat 的方式来进行的,可能用的时间长了,有些朋友就对 Tomcat 的印象开始模糊了,觉得 Tomcat 就是 IDEA 的一部分,这里我们一定要明确,他们是两个独立的程序!!!

安装插件:

一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
这样就让我们操作得更加简洁了

常见错误问题

出现了 404 状态码

有些人可能会报这样的错误:
第一种:

一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
他就表示端口被人占用了,说明我们已经启动了一个程序绑定了同一个端口,就会出现这样的错误,我们可以通过这样的命令:netstat -an | findstr 8080cmd 查看,关闭被占用的端口的进程即可,也有可能你idea已经启动了一个tomcat了,不能重复用,只要关闭之前的即可
出现他就是说你要访问的资源在服务器上是不存在的,要么就是你请求资源的路径不对,
要么就是路径虽然对了,但是服务器没有正确的把资源加载起来…
启动服务器页面显示就是 404
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

第二种:

一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
这里就是少写了第二级路径 Servlet Path(hello)

第三种:

一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
这里就是少写了第一级路径 Context Path(Servlet_project)
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

第四种:

web.xml 写错了
我这里把它给注释掉
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
重新启动tomcat
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
他是找不到的
在启动日志中,他也有提示:
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

出现 405 状态码

405 表示对应的 HTTP 请求方法没有实现

第一种:

例如没有doGet方法,我们重启 tomcat服务器
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
虽然路径找到了,但是在调用doGet方法时,没有就会出现上述现象.

第二种:

换成 doPost 请求也是这样的原因
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
启动服务器:
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

第三种:

忘记注释掉 super.doGet(req,resp)…
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)重启tomcat:
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
此处的原因就需要我们进入到 doGet() 的源码当中了:
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
进入到了HttpServlet 源码当中,他是这样写的,拿到的如果是 一个 HTTP/1.1版本号,他就是直接返回一个 405 的响应

补充:
什么时候浏览器发的是 GET 请求?
1:直接在地址栏里,输入 URL
2:通过 a 标签跳转
3:通过 img/link/script…
4:通过 form 表单,method 指定为 GET
5:通过 ajax ,type 指定为 GET
啥时候浏览器发的是 POST 请求?
1:通过 form 表单,method 指定为 POST
2:通过 ajax,type 指定为 POST

出现 500 状态码

这个往往是 Servlet 代码中抛出异常导致的,并且咱们的代码没有处理,这个异常就会抛到 Tomcat 当中…像这样的错误对我们来说是很好解决的,因为他下面一般都告诉了原因

例如我们这样修改代码:
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
重启tomcat
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
他告诉了我们具体的异常调用栈,在第 20 行
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
我们在仔细检查检查,就会发现是空指针异常

出现"空白页面"

修改代码,方法里面没有写入内容:
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

重启tomcat 在访问:
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

出现"无法访问此网站"

这个就一般是 Tomcat 启动失败了

修改代码:
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
重启 tomcat:
我们就可以观察日志有这样的关键信息,这里需要我们仔细观察:
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)访问页面:
一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)

许愿下载