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


    在这里插入图片描述

    Tomcat

    Tomcat 就是一个 HTTP 服务器…

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

    下载Tomcat教程

    在官网下载即可:
    在这里插入图片描述在这里插入图片描述

    到这里就下载安装完成了

    官网链接:tomcat官网

    tomcat的一些文件结构

    在这里插入图片描述

    补充:
    正因为,一个 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)
    在这里插入图片描述

    有了这个说明成功启动了
    在这里插入图片描述
    在这里插入图片描述

    启动失败的一些原因

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

    Tomcat 要想成功运行,他就得找到 JDK!!,这就要需要你成功安装JDK,配置好环境变量,这是我之前配置好的环境变量
    在这里插入图片描述

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

    还是不行,不知道哪出问题了?我们可以这样来做
    我们需要看到报错提示,把startup.bat直接拖到cmd,观察报错信息
    在这里插入图片描述

    会出现这些,这些是我已经配好了
    在这里插入图片描述
    如果这里的一组环境变量,某个有问题,他就会告诉你,是谁有问题,可能有些还不行,一直重复这个步骤,查看原因…

    一般没配好的,会提示:
    在这里插入图片描述

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

    在这里插入图片描述

    2:出现闪退:端口号被占用
    Tomcat 是 一个 HTTP 服务器,启动的时候是要绑定端口的,一般他是绑定两个端口号:8080 , 8005,如果这个端口号已经被其他程序占用了,此时你在启动新的肯定是会失败的,就是说你已经启动了一个Tomcat,前一个没关,在启动一个新的,肯定会失败.
    也有可能是电脑上有别的程序占用了8080 / 8005,这个时候如果你启动Tomcat,也是会失败的,查看端口:在cmd输入:netstat -an | findstr 8080
    在这里插入图片描述
    有的话就把这个被占用端口的进程干掉在启动tomcat

    使用Tomcat

    我们把 Tomcat启动之后,就可以通过浏览器来访问 Tomcat 了…
    在浏览器输入:127.0.0.1:8080,会出现tomcat欢迎界面
    在这里插入图片描述

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

    注意这里可能有的小伙伴会发现,明明可以启动成功,为啥访问不了出现了 404 或 500 这样的的状态码,除了上述端口被占用了以外(我们可以修改端口,或者关闭被占用端口的进程),出现 500 的状态码其实是最好解决的,因为他已经告诉了你原因,我们可能是文件夹权限的问题
    在这里插入图片描述
    解决办法:
    在这里插入图片描述

    部署页面

    我们可以根据此路径下新建一个html文件
    在这里插入图片描述

    启动tomcat并在网页打开他
    在这里插入图片描述

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

    如果我们每一个文件都放在 这个ROOT里面会不会太多了,特别是还包含css ,js这种
    因此我们可以在webapps 里单独创建一个目录,把你的页面部署到这个目录中也行…
    在这里插入图片描述

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

    在这里插入图片描述

    Maven

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

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

    如何下载Maven

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

    如何使用Maven

    我们搭配 IDEA 来使用
    就是一路yes:
    在这里插入图片描述在这里插入图片描述

    Maven 管理依赖

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

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

    Servlet

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

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

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

    1:创建一个Maven项目

    在这里插入图片描述

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

    2:引入依赖

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

    链接:https://mvnrepository.com/

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

    把它复制到 pom.xml
    在这里插入图片描述

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

    在这里插入图片描述

    3:创建目录结构

    当下项目的这些目录是不够的,需要我们在手动创建一些目录和文件夹(名字也要相同,这是规定)
    在这里插入图片描述

    这些名字的命名都是规定的,然后再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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    可能有些人导进去之后是红色的,像这种:
    在这里插入图片描述

    这种现象其实是正常的,因为有些idea他不能识别 Java以外的语言是否正确,他就会报红,我们只需要选中他,根据提示选第一个就行了
    在这里插入图片描述

    4:编写 Servlet 代码

    在这里插入图片描述

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

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

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

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

    在这里插入图片描述

    还有最后一步了:
    在这里插入图片描述

    就是路径要正确

    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!");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

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

    5:打包程序

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

    在这里插入图片描述

    6:部署程序

    把咱们刚刚的 war包 拷贝到 tomcat 的 webapps 目录下
    在这里插入图片描述

    7:验证程序

    在浏览器输入相关路径:
    在这里插入图片描述

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

    我在 Java 代码里加上一段时间戳
    在这里插入图片描述
    在运行:
    刷新多次就会发现他的时间戳是不一样的在这里插入图片描述

    好了,这里的 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 的一部分,这里我们一定要明确,他们是两个独立的程序!!!

    安装插件:

    在这里插入图片描述
    这样就让我们操作得更加简洁了

    常见错误问题

    出现了 404 状态码

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

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

    第二种:

    在这里插入图片描述
    这里就是少写了第二级路径 Servlet Path(hello)

    第三种:

    在这里插入图片描述
    这里就是少写了第一级路径 Context Path(Servlet_project)
    在这里插入图片描述

    第四种:

    web.xml 写错了
    我这里把它给注释掉
    在这里插入图片描述
    重新启动tomcat
    在这里插入图片描述
    他是找不到的
    在启动日志中,他也有提示:
    在这里插入图片描述

    出现 405 状态码

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

    第一种:

    例如没有doGet方法,我们重启 tomcat服务器
    在这里插入图片描述在这里插入图片描述
    虽然路径找到了,但是在调用doGet方法时,没有就会出现上述现象.

    第二种:

    换成 doPost 请求也是这样的原因
    在这里插入图片描述
    启动服务器:
    在这里插入图片描述

    第三种:

    忘记注释掉 super.doGet(req,resp)…
    在这里插入图片描述重启tomcat:
    在这里插入图片描述
    此处的原因就需要我们进入到 doGet() 的源码当中了:
    在这里插入图片描述
    进入到了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 当中…像这样的错误对我们来说是很好解决的,因为他下面一般都告诉了原因

    例如我们这样修改代码:
    在这里插入图片描述
    重启tomcat
    在这里插入图片描述
    他告诉了我们具体的异常调用栈,在第 20 行
    在这里插入图片描述
    我们在仔细检查检查,就会发现是空指针异常

    出现"空白页面"

    修改代码,方法里面没有写入内容:
    在这里插入图片描述

    重启tomcat 在访问:
    在这里插入图片描述

    出现"无法访问此网站"

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

    修改代码:
    在这里插入图片描述
    重启 tomcat:
    我们就可以观察日志有这样的关键信息,这里需要我们仔细观察:
    在这里插入图片描述访问页面:
    在这里插入图片描述

  • 相关阅读:
    ElasticSearch基本用法
    Java-SPI机制详解
    pytorch深度学习实战24
    C_plus_侯捷课件笔记
    协程简单使用
    C#:Winfrom 实现DataGridView 自定义分页
    了解异常的特性
    变量覆盖 学习笔记
    蓝桥杯之模拟与枚举day1
    elasticsearch查询之三种fetch id的方案分析
  • 原文地址:https://blog.csdn.net/Ajekseg/article/details/125383224