记一次servlet项目启动
前言
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项目启动的更多相关文章
- 原生servlet项目启动自动加载一个方法
web.xml里的配置: 配置好要加载的类,其中1这一句是项目启动时自动加载该类的必要条件. <servlet> <servlet-name>SharePltfCLServle ...
- 爬坑记-tomcat 项目启动两次的的解决
项目就启动了两次,程序倒是正常运行,关键我里边写了个while 循环,不能让它启动两次啊 百度了一下,有人说是tomcat server.xml或者tomcat新建服务的时候设置出了问题 ....最终 ...
- 配置项目启动的时候就加载 servlet
load-on-startup值为0 就是在项目启动的时候自动加载该servlet
- 在web项目启动时,使用监听器来执行某个方法
在web项目中有很多时候需要在项目启动时就执行一些方法,而且只需要执行一次,比如:加载解析自定义的配置文件.初始化数据库信息等等,在项目启动时就直接执行一些方法,可以减少很多繁琐的操作. 这里写了个简 ...
- web项目启动流程探索
在web项目的启动过程中,我们希望知道它的一般流程是什么,这样我们就可以在各个流程中加入相应的功能,或者对于我们排错也有帮助. 我们知道,当我们启动tomcat容器以后,容器首先初始化一些必要的组件, ...
- 在web项目启动时,执行某个方法
在web项目中有很多时候需要在项目启动时就执行一些方法,而且只需要执行一次,比如:加载解析自定义的配置文件.初始化数据库信息等等,在项目启动时就直接执行一些方法,可以减少很多繁琐的操作. 在工作中遇到 ...
- 在java web项目中实现随项目启动的额外操作
前言 在web项目中经常会遇到在项目启动初始,会要求做一些逻辑的实现,比如实现一个消息推送服务,实现不同类型数据同步的回调操作初始化,或则通知其他客户服务器本项目即将启动,等等.对于这种要求,目前个人 ...
- 基于spring的web项目启动时预加载数据到ServletContext
1.要在web启动时预加载数据到ServletContext,实现方法有很多,一种比较简单的方案就是: 1)新建一个bean,定义其初始化方法: <bean id="beanId&qu ...
- java web项目启动进入首页的配置方式(包含过滤跳转首页实现)
本文为博主原创,未经允许不得转载: 项目启动成功,进入首页的方式,我们往往在web.xml 中通过以下的方式默认进入跳转首页, <welcome-file-list> <welcom ...
随机推荐
- sql 随机获取数据
SQL Server: SELECT TOP 10 * FROM T_USER ORDER BY NEWID() ORACLE: SELECT * FROM (SELECT * FROM T_USER ...
- django 利用pillow 进行简单的设置验证码(python)
1.导入模块 并定义一个验证状态 from PIL import Image, ImageDraw, ImageFont from django.utils.six import BytesIO de ...
- 用for; while...do; do...while; 写出九九乘法表
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Mesos源码分析(5): Mesos Master的启动之四
5. Create an instance of allocator. 代码如下 Mesos源码中默认的Allocator,即HierarchicalDRFAllocator的位置在$ME ...
- IdentityServer(14)- 通过EntityFramework Core持久化配置和操作数据
本文用了EF,如果不适用EF的,请参考这篇文章,实现这些接口来自己定义存储等逻辑.http://www.cnblogs.com/stulzq/p/8144056.html IdentityServer ...
- SUSE12SP3-Mysql5.7安装
1.将以下安装包复制到服务器 mysql-community-client-5.7.24-1.sles12.x86_64.rpm mysql-community-server-5.7.24-1.sle ...
- 在vue中使用svg sprite
概述 这几天研究了一下在vue中使用svg sprite,有些心得,记录下来,供以后开发时参考,相信对其它人也有用. 在vue中导入svg 在vue中导入svg的方法有很多种,比如在img标签的src ...
- [Swift]LeetCode228. 汇总区间 | Summary Ranges
Given a sorted integer array without duplicates, return the summary of its ranges. Example 1: Input: ...
- [Swift]LeetCode238. 除自身以外数组的乘积 | Product of Array Except Self
Given an array nums of n integers where n > 1, return an array outputsuch that output[i] is equa ...
- [Swift]LeetCode486. 预测赢家 | Predict the Winner
Given an array of scores that are non-negative integers. Player 1 picks one of the numbers from eith ...