什么是Web服务器?web服务器的定义
其实并没有标准定义,一般认为Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。
WEB服务器的介绍,Web服务器的特点:
Tomcat是一款开源轻量级Web应用服务器,是一款优秀的Servlet容器实现。
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
Servlet严格来讲是指Java语言实现的一个接口,一般情况下我们说的Servlet是指任何实现了这个Servlet接口的类。
实例化并调用init()方法初始化该Servlet,一般Servlet只初始化一次(只有一个对象)
service()(根据请求方法不同调用doGet() 或者 doPost(),此外还有doHead()、doPut()、doTrace()、doDelete()、doOptions()、destroy())。
当Server不再需要Servlet时(一般当 Server 关闭时),Server调用Servlet的destroy()方法。
典型的Servlet的处理流程:
1)第一个到达服务器的HTTP请求被委派到Servlet容器。
2)Servlet容器在调用service()方法之前加载Servlet。
3)然后Servlet容器处理由多个线程产生的多个请求,每个线程执行一个单一的Servlet实例的service()方法。
Servlet2.X:项目目录结构必须要有WEB-INF,web.xml等文件夹和文件,在web.xml中配置servlet,filter,listener,以web.xml为java web项目的统一入口。
servlet 3.x规范:项目中可以不需要WEB-INF,web.xml等文件夹和文件,在没有web.xml文件的情况下,通过注解实现servlet,filter,listener的声明,当使用注解时,容器自动进行扫描。
同时Tomcat8.5进行了大量的代码重构,对比与7.0的版本,也符合Tomcat未来的代码架构体系。但是Tomcat的核心和主体架构还是一直保持这样的。
·支持Servlet3.1
·默认采用NIO,移除BIO
·支持NIO2(AIO)
·支持HTTP/2协议
·默认采用异步日志处理
为什么要讲8.5的版本,首先这个版本比较新,因为太老的版本比如6.0的版本Servlet不支持3所以会导致部署SpringBoot等项目有问题,同时这个版本是在9.0出现以后发布的一个中间版本,主体架构延续8.0,同时又实现了部分9.0的新特性。
Tomcat下载地址: https://tomcat.apache.org/download-80.cgi
3.1、一般启动
startup.bat/sh
启动成功的日志信息省略。。
启动成功可以访问到的Tomcat首页
http://localhost:8080/
为什么有这个默认首页:Tomcat“买一送一”的思想,默认Tomcat启动后加载webapps中的项目
3.2、IDE中启动
一个Sprei项目配置和打包
IDE中启动成功后的只有项目的访问,没有首页的显示的
3.3、嵌入式启动
SpringBoot中一个main方法嵌入式启动Tomcat
3.4、debug启动
在项目发布后,我们有时候需要对基于生产环境部署的应用进行调试,以解决在开发环境无法重现的BUG。这时我们就需要用到应用服务器的远程调试功能,这个主要是基于JDK提供的JPDA(Java Platform Debugger Architecture,Java平台调试体系结构)。不过一般情况下用不到,这里简单讲一讲。
使用debug启动可以对基于生产环境部署的应用进行调试,以解决在开发环境无法重现的BUG。
3.5、使用IDEA远程部署tomcat和调试
1)在catalina.sh文件中加入以下的配置
CATALINA_OPTS="-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=192.168.19.200
-agentlib:jdwp=transport=dt_socket,address=15833,suspend=n,server=y"export CATALINA_OPTS
以上端口可以随意改动,但是必要的是后续的设置必须保持一致,并且务必保证端口没有被占用,这些设置的端口在防火墙中是开放状态;
其中1099的是tomcat远程部署连接端口;
15833是远程调试的端口;
192.168.19.200是远程的服务器的Ip。
2)在Linux上启动tomcat使用命令启动
./bin/catalina.sh run &
debug启动测试
连接:
[2017-12-2308:47:03,592] Artifact devframe-server:war exploded: Artifact isnot deployed. Press 'Deploy' to start deployment
[2017-12-2308:47:03,650] Artifact devframe-server:war exploded: Artifact is being deployed, please wait...
Connected toserver
Connected to the target VM, address: '192.168.19.200:15833', transport: 'socket'
[2017-12-2308:47:11,434] Artifact devframe-server:war exploded: Error during artifact deployment. See serverlogfor details.
文件传输:
[2017/12/2320:47] Uploading to 192.168.19.200 completed in less than a minute:357 files transferred (8 Mbit/s)
这样就能够成功远程部署并且调试了。
使用的技巧:
容易出现的问题:
·如果远程没有连接上,两个端口被占用或者防火墙屏蔽。除了JMX server指定的监听端口号外,JMXserver还会监听一到两个随机端口号,这个如果防火墙关闭了的话就不用考虑,如果使用了防火墙,还需要查看它监听的端口。
·账号的相应的读写权限一定要有;
1.1、隐式部署
直接丢文件夹、war、jar到webapps目录,tomcat会根据文件夹名称自动生成虚拟路径,简单,但是需要重启Tomcat服务器,包括要修改端口和访问路径的也需要重启。
1.2、显式部署
添加context元素:
server.xml中的Host加入一个Context(指定路径和文件地址),例如:
即/comet 这个虚拟路径映射到了D:\work_tomcat\ref-comet目录下(war会解压成文件),修改完servler.xml需要重启tomcat 服务器。
创建xml文件:
在conf/Catalina/localhost中创建xml文件,访问路径为文件名,例如:
在localhost目录下新建demo.xml,内容为:
不需要写path,虚拟目录就是文件名demo,path默认为/demo,添加demo.xml不需要重启 tomcat服务器。
1.3、三种方式比较:
隐式部署:可以很快部署,需要人手动移动Web应用到webapps下,在实际操作中不是很人性化
添加context元素 : 配置速度快,需要配置两个路径,如果path为空字符串,则为缺省配置,每次修改server.xml文件后都要重新启动Tomcat服务器,重新部署。
创建xml文件:服务器后台会自动部署,修改一次后台部署一次,不用重复启动Tomcat服务器,该方式显得更为智能化。
startup文件:主要是检查catalina.bat/sh执行所需环境,并调用catalina.bat批处理文件,启动tomcat。
catalina文件:真正启动Tomcat文件,可以在里面设置jvm参数,后面性能调优会重点讲。
shutdown文件,关闭Tomcat。
脚本version.sh、startup.sh、shutdown.sh、configtest.sh都是对catalina.sh的包装,内容大同小异,差异在于功能介绍和调用catalina.sh时的参数不同。
Version:查看当前tomcat的版本号。
Configtest:校验tomcat配置文件server.xml的格式、内容等是否合法、正确。
Service:安装tomcat服务,可用net start tomcat 启动。
2.1、web.xml
Tomcat中所有应用默认的部署描述文件,主要定义了基础的Servlet和MIME映射(mime-mapping文件类型,其实就是Tomcat处理的文件类型),如果部署的应用中不包含Web.xml,那么Tomcat将使用此文件初始化部署描述,反之Tomcat会在启动时将默认描述与定义描述配置进行合并。
2.2、context.xml
用于自定义所有Web应用均需要加载的Context配置,如果Web应用指定了自己的context.xml,那么该文件的配置将被覆盖。
context.xml与server.xml中配置context的区别:
server.xml是不可动态重加载的资源,服务器一旦启动了以后,要修改这个文件,就得重启服务器才能重新加载。而context.xml文件则不然,tomcat服务器会定时去扫描这个文件,一旦发现文件被修改(时间戳改变了),就会自动重新加载这个文件,而不需要重启服务器。
2.3、catalina.policy
权限相关 Permission ,Tomcat是跑在jvm上的,所以有些默认的权限
2.4、tomcat-users.xml
配置Tomcat的server的manager信息
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
2.5、logging.properties
设置tomcat日志,控制输出不输出内容到文件,不能阻止生成文件,阻止声文件可用注释掉。
存放web项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是tomcat自带的项目,其中ROOT是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是ROOT项目。http://localhost:8080/examples,进入示例项目,其中examples就是项目名,即文件夹的名字。
Tomcat的类库,里面是一大堆jar文件。如果需要添加Tomcat依赖的jar文件,可以把它放到这个目录中,当然也可以把应用依赖的jar文件放到这个目录中,这个目录中的jar所有项目都可以共享之,但这样你的应用放到其他Tomcat下时就不能再共享这个目录下的Jar包了,所以建议只把Tomcat需要的Jar包放到这个目录下。
运行时生成的文件,最终运行的文件都在这里,通过webapps中的项目生成的,可以把这个目录下的内容删除,再次运行时会生再次生成work目录。当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的java和class文件都会存放到这个目录下。
存放Tomcat的临时文件,这个目录下的东西可以在停止Tomcat后删除!
这个目录中都是日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,那么异常也会记录在日志文件中。
localhost-xxx.log Web应用的内部程序日志,建议保留。
catalina-xxx.log 控制台日志。
host-manager.xxx.log Tomcat管理页面中的host-manager的操作日志,建议关闭。
localhost_access_log_xxx.log 用户请求Tomcat的访问日志(这个文件在conf/server.xml里配置),建议关闭。
server.xml配置详解: