一、tomcat与服务器的关系
服务器是指安装了服务器软件的计算机,而服务器软件是指接收用户请求,处理请求,返回请求结果的程序,常见的服务器软件有tomcat、iis等,也称为web容器。在服务器软件中可以部署web项目,用户可以通过浏览器来访问这些项目。
tomcat具有跨平台功能,支持windows、linux系统,它是基于Java中提供的NIO技术开发出来的,具有很高的运行效率,目前由apche公司维护。toomcat主要作用是接收http请求,将其转发到具体的servlet处理程序,再将其处理结果返回给客户端,以下是tomcat的架构图:
客户端向服务器请求的资源分为两类,一类是静态资源,比如img、mp3、css、html、js等,这类资源在服务器中时直接返回的,它可以被浏览器直接解析;一类是动态资源 ,比如jsp、php文件,这类资源需要被一个叫做servlet的程序处理为静态资源类型后再返回给浏览器。
二、tomcat的安装目录说明
运行tomcat:进入官网www.apache.org选择合适自己系统的版本,下载解压到安装目录(不同的操作系统与很多不同的安装方式)。打开安装目录会发现如下几个文件夹:
◉bin目录:包含所有可执行的二进制程序,其中就包含tomcat的启动文件startup和停止文件shutdown。
◉conf目录:保存核心配置文件。
◉lib目录:是类加载路径,保存了与tomcat运行相关的jar文件。
◉log目录:保存tomcat的日子信息。
◉webapps目录:是tomcat的热部署目录,可以直接实现项目的发布。初始的tomcat内部包含了五个默认文件夹docs、examples、host-manager、manager、ROOT,提供了tomcat本身的一些管理页面和示例web,当通过localhost:8080访问默认显示的就是这些目录下的内容。
◉work目录:是tomcat生成的临时文件目录。
三、tomcat的运行和注意事项
◉首先需要在宿主机上安装jdk并配置JAVA_HOME环境变量。打开tomcat安装目录/bin,运行startup文件(windows系统为start.bat,linux为start.sh)即可启动运行窗口,访问localhost:8080即可访问tomcat管理界面。
◉如果运行一闪而过可能是没有正确的配置JAVA_HOME或者端口被占用或者,具体需要查看运行日志来解决问题。
◉如果运行窗口中出现中文乱码,请修改配置文件conf/logging.properties中java.util.logging.ConsoleHandler.encoding = GBK,重启即可。
◉部署vue项目时,如果刷新页面出现404,则需要在项目目录下新增WEB-INF/web.xml文件,内容如下:
"1.0" encoding="UTF-8"?>
"http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1" metadata-complete="true">
系统描述
WEB端
404
/index.html
◉tomcat服务器的默认端口为8080,可在conf/server.xml文件中修改如下节点的port属性,改为自己想要的端口:
"8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
◉绑定域名:默认我们输入localhost来访问,localhost代表本机地址127.0.0.1,如果我们想要使用域名来访问,可以修改本机hosts文件来模拟,设置域名映射 127.0.0.1 www.tomcatserver.com ,即可在本机通过www.tomcatserver.com访问。也可向域名服务商申请真实域名来绑定IP访问。
◉Tomcat安全配置建议:正式部署应用关闭角色登录管理功能,同时移除自带的web程序;修改默认的关机命令端口8005以及命令名称;关闭资源文件的列表功能。
◉启用https传输协议:https的全称是超文本传输安全协议(Hypertext Transfer Protocol Secure ),是一种网络安全传输协议。在HTTP的基础上加入SSL/TLS来进行数据加密,保护交换数据不被泄露、窃取。tomcat支持https协议,使用该协议需要证书,证书一般需要向证书管理机构申请,然后与域名绑定,这种证书是受浏览器信任的证书,还有一种是自签证书,这种证书是免费的本地签发的。可以使用Keytool工具生成证书,配置过程如下:
1、cmd运行命令” keytool -genkey -alias tomcat -keyalg RSA -keystore tomcatkey.keystore -validity 888″,根据提示输入密钥库口令、姓氏、组织名称、城市区域、国家地区代码、Y等完成一系列步骤后就会产生一个名为tomcatkey.keystore的证书文件。
2、将生成的.keystore证书文件移动到tomcat的conf文件夹下。
3、修改配置文件conf/server.xml,增加一个连接器Connector,内容如下:
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150"
SSLEnabled="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="conf/tomcatkey.keystore" certificateKeystorePassword="123456" type="RSA" /> SSLHostConfig> Connector>
4、访问https://localhost:8443即可通过https协议访问。
◉默认tomcat为了项目的部署安全,将列表显示功能直接关闭了,如果想要显示web项目虚拟路径下的资源文件列表,就在conf/web.xml文件中修改listings配置项开启列表功能。
<servlet> <servlet-name>defaultservlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServletservlet-class> <init-param> <param-name>debugparam-name> <param-value>0param-value> init-param> <init-param> <param-name>listingsparam-name> <param-value>falseparam-value> init-param> <load-on-startup>1load-on-startup> servlet>
◉默认情况下,无法通过通过http://localhost:8080/欢迎页面中的ManagerApp、HostManager、ServerStatus按钮进入到管理页面,要想访问这些页面则需要在conf/tomcat-users.xml文件中配置用户和角色:
<tomcat-users xmlns="http://tomcat.apache.org/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd" version="1.0"> <role rolename="admin-gui"/> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <user username="admin" password="admin" roles="admin-gui,manager-script,manager-jmx,manager-status,manager-gui"/> tomcat-users>
如果需要在非宿主机上访问,还需再修改webapps/manager/META-INF/content.xml文件和webapps/host-manager/META-INF/content.xml文件中的value节点的allow属性(代表可访问的ip):
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
◉tomcat中可以运行多个web项目,其部署方式有如下几种:
a.在webapps中直接创建web项目目录,该目录在需要包含一个WEB-INF子目录,子目录下包含一个该项目的web.xml配置文件,格式如下:
xml version="1.0" encoding="UTF-8"?> <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd" version="5.0" metadata-complete="true"> <display-name>web项目显示的名称display-name> <description> Web项目描述 description> web-app>
b.在webapps文件夹之外创建web项目路径,该目录同样需要包含一个WEB-INF子目录,子目录下包含一个该项目的web.xml配置文件,然后在conf/server.xml中的Host节点下增加Context 节点,代码如下:
xml version="1.0" encoding="UTF-8"?> <Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> GlobalNamingResources> <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> Realm> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> <Context path="/static" docBase="D:\static" reloadable="true" crossContext="true">Context> <Context path="/web1" docBase="H:\web\web1" /> Host> Engine> Service> Server>
◉在访问web项目或者静态资源时,常需要通过localhost:8080/web/index.html格式来访问,如果我们想去掉虚拟路径,直接通过localhost:8080/index.html来访问,则可以在conf/server.xml文件对应web项目的Context节点中修改path为”/”即可,但是要保证访问的资源是唯一的,不与其他web项目资源冲突,不然可能会报错。
◉如果我们部署的web项目是jsp动态应用程序,则在第一次访问jsp程序时,tomcat会先将jsp文件转换为.java程序代码(存放在work目录中),再编译为.class字节码文件(存放在work目录中),再用*.class字节码文件执行输出,因此首次访问jsp页面加载比较慢。
◉Idea开发工具与tomcat整合实现项目在tomcat中运行和调试:
四、Tomcat的WebSocket功能
Websocket是HTML5新增的协议,它的目的是在浏览器和服务器之间建立一个不受限的双向通信的通道,比如说,服务器可以在任意时刻发送消息给浏览器。
为什么传统的HTTP协议不能做到websocket实现的功能?
这是因为HTTP协议是一个请求–响应协议,请求必须先由浏览器发给服务器,服务器才能响应这个请求,再把数据发送给浏览器。换句话说,浏览器不主动请求,服务器是没法主动发数据给浏览器的。
这样一来,要在浏览器中搞一个实时聊天,或者在线多人游戏的话就没法实现了,只能借助Flash这些插件。也有人说,HTTP协议其实也能实现啊,比如用轮询或者comet。轮询是指浏览器通过JavaScript启动一个定时器,然后以固定的间隔给服务器发请求,询问服务器有没有新消息。这个机制的缺点一是实时性不够,二是频繁的请求会给服务器带来极大的压力。
Comet本质上也是轮询,但是在没有消息的情况下,服务器先拖一段时间,等到有消息了再回复。这个机制暂时地解决了实时性问题,但是它带来了新的问题︰以多线程模式运行的服务器会让大部分线程大部分时间都处于挂起状态,极大地浪费服务器资源。另外,一个HTTP连接在长时间没有数据传输的情况下,链路上的任何一个网关都可能关闭这个连接,而网关是我们不可控的,这就要求comet连接必须定期发一些ping数据表示连接正常。
websocket的特点:
◉websocket的发起方必须是浏览器,请求方式为ws://开头。
◉请求头connection: Upgrade和请求头upgrade: websocket表示这个连接将要被转换为 websocket 连接。
◉sec-Websocket-Key是用于标识这个连接,是一个BASE64编码的密文,要求服务端响应一个对应加密的sec-web$ocket-Accept头信息作为应答。
◉sec-websocket-version指定了websocket的协议版本。
◉HTTP101状态码表明服务端已经识别并切换为websocket协议,sec-Websocket-Accept是服务端与客户端一致的秘钥计算出来的信息。
tomcat7.0.5以后开始支持websocket,实现了java WebSocket的标准规范,java WebSocket应用由一系列的WebSocketEndpoint组成,Endpoint是java对象,表示Websocket连接的一端。我们可以通过编程或注解的方式实现Endpoint功能。Endpoint实例在Websocket握手时创建,并在客户端与服务端链接过程中有效,最后在连接关闭时结束。在Endpoint接口中明确定义了与其生命周期相关的方法,规范实现者确保生命周期的各个阶段调用实例的相关方法。
五、tomcat配置文件解读
1、\conf\server.xml配置文件主要是用于配置服务器信息,内容说明如下:
xml version="1.0" encoding="UTF-8"?> <Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> GlobalNamingResources> <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> Realm> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Alias>www.localhost.comAlias> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> <Context docBase="D:/myweb" path="/myApp" > Context> Host> Engine> <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads = "500" minSpareThreads = "20" maxSpareThreads = "50" maxIdleTime = "60000" maxQueueSize = "Integer.MXA_VALUE" threadPriority="5" className="org.apache.catalina.core.standardThreadExecutor" prestartminSpareThreads="false" /> Service> Server>
2、web.xml文件主要是用于配置web应用的信息,该文件主要包含conf/web.xml默认配置文件和具体web项目下WEB-INF/web.xml定制配置文件,配置说明如下:
xml version="1.0" encoding="UTF-8"?> <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd" version="5.0" metadata-complete="true"> <description>web项目描述description> <display-name>显示的web项目名称,该名称将会显示在tomcat管理界面中display-name> <icon> <small-icon>/images/small.gifsmall-icon> <large-icon>/images/large.girlarge-icon> icon> <context-param> <param-name>param_nameparam-name> <param-value>param_valueparam-value> context-param> <session-config> <session-timeout>30 session-timeout> <cookie-config> <name>cookienamename> <domain>wwev .itcast.cncomain> <path>/path> <comment>session cookiecomnent> <http-only>truehttp-only> <secure>false secure> <max-age>3600max-age> cookie-config> <traaking-mode>COOKIE traaking-mode> session-config> <filter> <filter-name>struts2filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterfilter-class> filter> <filter-mapping> <filter-name>struts2filter-name> <url-pattern>/*url-pattern> filter-mapping> <servlet> <servlet-name>ServletNameservlet-name> <servlet-class>xxxpackage.xxxServletservlet-class> <init-param> <param-name>参数名称param-name> <param-value>参数值param-value> init-param> servlet> <servlet-mapping> <servlet-name>ServletNameservlet-name> <url-pattern>/aaa/xxxurl-pattern> servlet-mapping> <listener> <listener-class>org.springframework.web.context.contextLoaderListenerlistener-class> listener> <welcome-file-list> <welcome-file>index.htmlwelcome-file> <welcome-file>index.xhtmlwelcome-file> <welcome-file>index.htmwelcome-file> <welcome-file>index.jspwelcome-file> welcome-file-list> <error-page> <error-code>404error-code> <location>/error404.jsplocation> error-page> <error-page> <exception-type>java.lang.Exceptionexception-type> <location>/except.jsplocation> error-page> web-app>
3、tomcat的管理配置,主要用于tomcat本身提供的两个管理功能host-manager、manager,host-manager用于管理虚拟主机,manager用于管理web应用。tomcat管理配置文件主要是tomcat-users.xml文件和\webapps\host-manager\WEB-INF\manager.xml。常用的权限配置已经在前一节讲过,此处不在讨论。
五、tomcat集群
使用nginx+tomcat可以实现tomcat集群部署,利用nginx的负载均衡功能实现,实现高可用。集群使用一台nginx反向代理服务器,2台以上tomcat服务器,其架构如下:
Original: https://www.cnblogs.com/zqhIndex/p/16154107.html
Author: 我若安好,便是晴天
Title: tomcat服务的原理和使用
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612375/
转载文章受原作者版权保护。转载请注明原作者出处!