服务器:
服务器的概念非常的广泛,它可以指代一台特殊的计算机(相比普通计算机运行更快、负载更高、价格更贵),也可以指代用于部署网站的应用。我们这里说的服务器,其实是web服务器,或者应用服务器。它本质就是一个软件,一个应用,通过软硬件的结合从而达到发布应用(工程)的作用,让用户可以通过浏览器访问我们的应用。
常见的应用服务器,请看下表:
- 重量级:重量级服务器实现了所有的JavaEE规范
- 轻量级:轻量级服务器实现了部分JavaEE规范
服务器名称 | 说明 |
---|---|
weblogic | 实现了javaEE规范,重量级服务器,又称为javaEE容器 |
websphereAS | 实现了javaEE规范,重量级服务器。 |
JBOSSAS | 实现了JavaEE规范,重量级服务器。免费的。 |
Tomcat | 实现了jsp/servlet规范,是一个轻量级服务器,开源免费。 |
Tomcat:
Tomcat是Apache软件基金会的一个核心项目,由Apache、Sun和其它公司共同开发而成的。由于有了Sun公司的参与支持,最新的Servlet、JSP规范总是能在Tomcat中得到体提现,因为Tomcat技术先进、性能稳定,而且免费,所以深受Java爱好者并得到了部分软件开发商的认可,已成为目前开发企业JavaWeb应用的最佳Servlet容器选择之一。
Tomcat各版本的技术支持:
Servlet Spec | JSP Spec | EL Spec | WebSocket Spec | Authentication (JASIC) Spec | Apache Tomcat Version | Latest Released Version | Supported Java Versions |
---|---|---|---|---|---|---|---|
6.0 | 3.1 | 5.0 | TBD | TBD | 10.1.x | 10.1.0-M6 (alpha) | 11 and later |
5.0 | 3.0 | 4.0 | 2.0 | 2.0 | 10.0.x | 10.0.12 | 8 and later |
4.0 | 2.3 | 3.0 | 1.1 | 1.1 | 9.0.x | 9.0.54 | 8 and later |
3.1 | 2.3 | 3.0 | 1.1 | 1.1 | 8.5.x | 8.5.72 | 7 and later |
3.1 | 2.3 | 3.0 | 1.1 | N/A | 8.0.x (superseded) | 8.0.53 (superseded) | 7 and later |
3.0 | 2.2 | 2.2 | 1.1 | N/A | 7.0.x (archived) | 7.0.109 (archived) | 6 and later(7 and later for WebSocket) |
2.5 | 2.1 | 2.1 | N/A | N/A | 6.0.x (archived) | 6.0.53 (archived) | 5 and later |
2.4 | 2.0 | N/A | N/A | N/A | 5.5.x (archived) | 5.5.36 (archived) | 1.4 and later |
2.3 | 1.2 | N/A | N/A | N/A | 4.1.x (archived) | 4.1.40 (archived) | 1.3 and later |
2.2 | 1.1 | N/A | N/A | N/A | 3.3.x (archived) | 3.3.2 (archived) | 1.1 and later |
Mac版本下载:
下载地址:http://tomcat.apache.org/
启动Tomcat:
- 下载好了解压到指定路径,并进到bin目录下
- 打开终端,把bin目录拖到cd后面
启动:
- Windows启动:
startup.bat Windows
- Linux/Mac启动:
./startup.sh
停止:
- Windows停止:
shutdown.bat Windows
- Linux/Mac停止:
./shutdown.sh
# cd后面是你的tomcat路径
cd /Users/itzhuzhu/Desktop/Java/plug/apache-tomcat-10.0.2/bin
# 启动tomcat
./startup.sh
# 关闭Tomcat
./shutdown.sh
访问http://localhost:8080/可以看到这样的就说明启动了
自己部署项目的话就放在在webapps目录下浏览器访问对应的路径就可以了
为什么需要写8080才可以访问
- 正常情况下访问一个网站都是只要输入域名就可以了,但是Tomcat提供的是http服务,而http的端口默认是80,所以为了和http的端口贴近,就默认是8080了,而且在Linux里不是root用户的话是不能使用1024以内的端口号的
Linux版本下载与安装:
- 下载Tomcat,和Mac版一样,用tar.gz的上传到Linux
- 在crt上 使用 alt+p,将windows上的软件拖进去即可(root目录)
- 找个地方新建一个tomcat文件夹
mkdir tomcat
- 移动 tomcat…tar.gz 到 /usr/local/tomcat
mv apache-tomcat-8.5.32.tar.gz /usr/local/tomcat/
- 进入/usr/local/tomcat目录,解压Tomcat
cd /usr/local/tomcat tar -xvf apache-tomcat-8.5.32.tar.gz
- 进入 /usr/local/tomcat/apache-tomcat-8.5.32/bin
cd /usr/local/tomcat/apache-tomcat-8.5.32/bin
- 启动tomcat
./startup.sh
- 修改防火墙的规规则
# 放行8080 端口,修改配置文件
cd /etc/sysconfig
vi iptables
# 复制(yy , p) -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
# 改成
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
# 重启加载防火墙或者重启防火墙
service iptables reload
# 或者
service iptables restart
Tomcat目录结构:
Tomcat异常:
启动问题:
- 启动一闪而过
- 原因:没有配置环境变量。
解决办法:
配置上JAVA_HOME环境变量
- Address already in use : JVM_Bind
- 原因:端口被占用
解决办法:
修改conf文件下的server.xml配置文件修改端口号,(修改69行的port=”8080″)修改完再启动
- 启动产生很多异常,但能正常启动
- 原因:Tomcat中部署着很多项目,每次启动这些项目都会启动。而这些项目中有启动报异常的。
解决办法:
- 找到报异常的项目,就把它从发布目录中移除。
- 不能确定报异常的项目,就重新解压一个新的Tomcat。
- 启动乱码
- 原因:可能和你的控制台的字符集不匹配
解决办法:
- 打开conf下的logging.properties的配置文件,47行的UTF-8改成GBK,或者GBK改成UTF-8
IDEA集成Tomcat:
新建项目就可以使用Tomcat了
创建完是这样的
URL:自己随便写,把下面两个改为更新和资源便于后续更新时不需要重启服务器
都配置完毕,就可以启动Tomcat了
Tomcat报错:java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet
报错内容如下,
类型 异常报告
消息 实例化Servlet类[org.springframework.web.servlet.DispatcherServlet]异常
描述 服务器遇到一个意外的情况,阻止它完成请求。
例外情况
jakarta.servlet.ServletException: 实例化Servlet类[org.springframework.web.servlet.DispatcherServlet]异常
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:354)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:383)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:863)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1682)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:834)
根本原因。
java.lang.NoClassDefFoundError: javax/servlet/h