前言

tomcat 和 jetty 都属于 web 容器。

mac安装tomcat

brew install tomcat

安装之后,输入 catalina -h,可以看到各种命令,如run、start、stop等。

mac安装jetty

brew install jetty

安装之后,输入 jetty start 即可启动。

服务器验证

不管安装哪个服务器,启动之后都会出现默认端口,因此可以访问 localhost:默认端口。我这里两个都装了,jetty 的默认端口是 8080,tomcat的默认端口是 8005。

IDEA 中的配置

tomcat

启动时会在终端打印出路径:

Using CATALINA_BASE:   /usr/local/Cellar/tomcat/9.0.12/libexec
Using CATALINA_HOME: /usr/local/Cellar/tomcat/9.0.12/libexec
Using CATALINA_TMPDIR: /usr/local/Cellar/tomcat/9.0.12/libexec/temp
Using JRE_HOME: /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home
Using CLASSPATH: /usr/local/Cellar/tomcat/9.0.12/libexec/bin/bootstrap.jar:/usr/local/Cellar/tomcat/9.0.12/libexec/bin/tomcat-juli.jar

根据以上信息,在Idea中的配置窗口中,创建一个 Tomcat Server,选择 local;然后点击 Application server 右面的 Configure,Tomcat Home 和 Tomcat base directory 均输入 /usr/local/Cellar/tomcat/9.0.12/libexec 即可,版本会自动识别出来。其他配置就不再赘述。

Tomcat 源码调试

我们在项目中配置的 Tomcat 自带 servlet-api 和 jsp-api,这两个文件可以查看 .class文件,但源文件无法直接在 idea 中下载,因此可以改为 maven 依赖,引入

        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>

后,将 Tomcat 自带的 servlet-api.jar 和 jsp-api.jar 删除即可(自带的优先级高,需要将其删除,才会用maven下载的包)。然后就可以下载源码查看了。

注意:

  • 删除自带的两个包后,还需要到运行配置窗口中去掉原来自动识别出来的 servlet-api 和 jsp-api 两个类(此时已经标红了),然后就可以正常启动运行了。
  • 当然也可不用 maven,而是自己下载 Tomcat 源码查看。

记一次servlet项目启动的更多相关文章

  1. 原生servlet项目启动自动加载一个方法

    web.xml里的配置: 配置好要加载的类,其中1这一句是项目启动时自动加载该类的必要条件. <servlet> <servlet-name>SharePltfCLServle ...

  2. 爬坑记-tomcat 项目启动两次的的解决

    项目就启动了两次,程序倒是正常运行,关键我里边写了个while 循环,不能让它启动两次啊 百度了一下,有人说是tomcat server.xml或者tomcat新建服务的时候设置出了问题 ....最终 ...

  3. 配置项目启动的时候就加载 servlet

    load-on-startup值为0 就是在项目启动的时候自动加载该servlet

  4. 在web项目启动时,使用监听器来执行某个方法

    在web项目中有很多时候需要在项目启动时就执行一些方法,而且只需要执行一次,比如:加载解析自定义的配置文件.初始化数据库信息等等,在项目启动时就直接执行一些方法,可以减少很多繁琐的操作. 这里写了个简 ...

  5. web项目启动流程探索

    在web项目的启动过程中,我们希望知道它的一般流程是什么,这样我们就可以在各个流程中加入相应的功能,或者对于我们排错也有帮助. 我们知道,当我们启动tomcat容器以后,容器首先初始化一些必要的组件, ...

  6. 在web项目启动时,执行某个方法

    在web项目中有很多时候需要在项目启动时就执行一些方法,而且只需要执行一次,比如:加载解析自定义的配置文件.初始化数据库信息等等,在项目启动时就直接执行一些方法,可以减少很多繁琐的操作. 在工作中遇到 ...

  7. 在java web项目中实现随项目启动的额外操作

    前言 在web项目中经常会遇到在项目启动初始,会要求做一些逻辑的实现,比如实现一个消息推送服务,实现不同类型数据同步的回调操作初始化,或则通知其他客户服务器本项目即将启动,等等.对于这种要求,目前个人 ...

  8. 基于spring的web项目启动时预加载数据到ServletContext

    1.要在web启动时预加载数据到ServletContext,实现方法有很多,一种比较简单的方案就是: 1)新建一个bean,定义其初始化方法: <bean id="beanId&qu ...

  9. java web项目启动进入首页的配置方式(包含过滤跳转首页实现)

    本文为博主原创,未经允许不得转载: 项目启动成功,进入首页的方式,我们往往在web.xml 中通过以下的方式默认进入跳转首页, <welcome-file-list> <welcom ...

随机推荐

  1. Httpclient代码

    /// <summary> /// 显示 /// </summary> /// <returns></returns> public ActionRes ...

  2. python语法_内置函数

    a = filter(函数名,序列) 返回一个迭代器对象/.函数里必须加过滤条件 ret = ['a','b','c','d','e'] def ft(s): if s != 'a': return ...

  3. .NET 应用架构电子书中文版

    <.NET 微服务:容器化 .NET 应用架构指南> 本书主要介绍了基于容器和微服务的应用架构和设计原则,以及基于 .NET Core 和 Docker 容器的应用程序开发实践.为了让大家 ...

  4. PHP_DOC php文档结构及注解浏览

    项目中的PHP文件比较多,为了方便查看,使用PHP写了个小工具,可查看PHP文件的所有类.函数 和特定注释. 显示PHP文件的 Class 和 Function 显示 /// 开头的注解 显示 /// ...

  5. [Swift]LeetCode119. 杨辉三角 II | Pascal's Triangle II

    Given a non-negative index k where k ≤ 33, return the kth index row of the Pascal's triangle. Note t ...

  6. [SQL]LeetCode180. 连续出现的数字 | Consecutive Numbers

    SQL架构: Create table If Not Exists Logs (Id int, Num int) Truncate table Logs insert into Logs (Id, N ...

  7. [Swift]LeetCode228. 汇总区间 | Summary Ranges

    Given a sorted integer array without duplicates, return the summary of its ranges. Example 1: Input: ...

  8. [Swift]LeetCode354. 俄罗斯套娃信封问题 | Russian Doll Envelopes

    You have a number of envelopes with widths and heights given as a pair of integers (w, h). One envel ...

  9. [Swift]LeetCode869. 重新排序得到 2 的幂 | Reordered Power of 2

    Starting with a positive integer N, we reorder the digits in any order (including the original order ...

  10. [Swift]LeetCode882. 细分图中的可到达结点 | Reachable Nodes In Subdivided Graph

    Starting with an undirected graph (the "original graph") with nodes from 0 to N-1, subdivi ...