tomcat服务器
发布于2020-06-03 20:47:57,更新于2021-03-02 18:01:24,标签:web 文章会持续修订,转载请注明来源地址:https://meethigher.top/blog一、web相关概念
软件架构
- C/S:客户端/服务器端
- B/S:浏览器/服务器端
资源分类
- 静态资源:所有用户访问后,得到的结果都是一样的资源。比方说html,css,js
- 动态资源:每个用户访问相同结果后,得到的结果可能不一样。比方说servlet/jsp,php,asp
用户访问时,
静态资源是直接返回的,浏览器内部有静态资源解析引擎,意味着浏览器可以直接解析静态资源。
动态资源先转换成静态资源,然后再返回。
网络通信三要素
- ip:电子设备(计算机)在网络中的唯一标识
- 端口:应用程序在计算机中的唯一标识。0-65536
- 传输协议:规定了数据传输的规则
基础传输协议
- tcp:安全协议,三次握手。速度慢
- udp:不安全的协议,传输过程数据可能会丢失。速度快
服务器:安装了服务器软件的计算机
服务器软件:接收用户的请求,处理请求,作出响应
web服务器软件:接收用户的请求,处理请求,作出响应。在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目
常见的java相关的web服务器软件
- webLogic:Oracle公司的,大型的JavaEE服务器,支持所有的JavaEE规范,收费的
- webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的
- JBoss:JBoss公司,大型的JavaEE服务器,支持所有的JavaEE规范,使用是免费的,但是一些服务是收费的
- Tomcat:apache基金组织,开源的免费的。中小型JavaEE服务器,仅仅支持少量的JavaEE规范(Servelet/jsp)。开源的,免费的。
JavaEE:Java语言在企业级开发中使用的技术规范的总和,一共规定了十三项大的规范。
二、Tomcat服务器
Tomcat官网,简记为汤姆猫
bin:存放可执行文件
conf:configuration的简写,配置文件
lib:依赖的jar包
logs:日志文件
temp:临时文件
webapps:存放web项目
work:存放运行时数据
2.1 配置问题
之前上课的时候,我的jre采用的是jre8,后来为了让jdk跟jre保持一致(新版的jdk中,自带jre,不过需要命令来生成),我就升级成了新版。
在配置的过程中,就出问题了。我的JAVA_HOME配置C:\Program Files\Java\jdk-12.0.2,JRE_HOME配置C:\Program Files\Java\jdk-12.0.2\bin\jre(我把生成的jre放到了bin目录下)。
运行,发现报错了。
又大概花了一个小时,各种折腾,期间还换了jre的版本,换成了jre8,发现又是完美运行了。
到了最后,发现,新版jdk不用单独配置jre,jre的路径直接使用jdk的路径就可以了。
来回折腾花了2个多小时,艹尼玛的汤姆猫,气死我了。
控制台如果乱码,那是因为系统的编码是gbk,而控制台输出的日志是以utf-8输出的。只需要修改conf/logging.properties即可
1 | # java.util.logging.ConsoleHandler.encoding = UTF-8 |
2.2 使用
双击startup.bat或者命令行里输入startup.bat可以直接运行。当然,也可以安装服务到电脑,具体可以百度,这个我并不常用,就没整。
卸载的话,直接删除整个文件夹即可。
如果遇到端口占用问题,可以关闭占用的进程
1 | netstat -ano |
找到占用端口号的pid,然后关闭进程,-f表示强制的意思
1 | taskkill /pid 进程号 -f |
如果要修改运行的端口号,则需要修改conf/server.xml
关闭的话,双击shutdown.bat或者按ctrl+c,直接按命令行的x属于强制关闭
2.3 部署项目
三种方式,任选一种即可
第一种,直接将项目放到webapps目录下。或者将项目压缩成war包,然后放入webapps。tomcat会自动解压,如果删除war包,tomcat会自动删除项目。此时的虚拟目录就是war包的名称!
第二种,配置conf/server.xml文件。在<Host>
标签下配置<Context docBase="D:\Develop" path="/www" />
- docBase:项目存放的路径
- path:虚拟目录
第三种,在conf\Catalina\localhost创建任意名称的xml文件,在文件中编写<Context docBase="D:\Develop" />
,此时的虚拟目录就是xml的名称。这种部署叫做热部署,这种方式是比较推荐的。
另外一点小问题,tomcat关闭index目录展示
还遇到了一个问题,tomcat闪退。两种解决办法
- 将startup.bat后面,换行追加pause
- 查看日志信息
我遇到的这个问题,就是子容器创建失败
我仔细想了想,修改过的地方,唯一可能出错的就是,配置的项目路径,因为没有那个文件夹!创建文件夹就解决了。
部署到服务器的时候,又出问题了。
1 | org.apache.catalina.core.StandardContext.startInternal 一个或多个筛选器启动失败。完整的详细信息将在相应的容器日志文件中找到 |
根据信息查看日志,配置的localhost下的日志显示
1 | org.apache.catalina.core.StandardContext.filterStart 启动过滤器异常 |
由此可知,原来是因为我的项目使用jre12开发的,服务器是jre8,不匹配,用idea设置一下,重新编译,就ok了!
2.4 静态项目和动态项目
java动态项目的目录结构(以下表示的是目录结构)
- 项目的根目录
- WEB-INF目录
- web.xml:web项目的核心配置文件
- classes目录:放置字节码文件的目录
- lib目录:放置依赖jar包
- WEB-INF目录
2.5 Tomcat集成到Eclipse或Idea
百度!