Tomcat认知
来源:互联网 发布:韶关网络问政平台12333 编辑:程序博客网 时间:2024/06/06 00:48
Tomcat认识
Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。由于Tomcat本身也内含了一个HTTP服务器,它也可以被视作一个单独的Web服务器。——来自维百科
下载安装Tomcat
- 下载Tomcat
- 解压下载好的zip到指定工作目录(注意安装目录不能包含空格和中文)
- 配置支持Tomcat运行的环境变量JAVA_HOME(到jdk的安装目录即可)
- 其它注意问题:
- 端口占用问题:可以在cmd下输入netstat -ano命令查看端口占用信息
- Catalina_Home环境变量: 点击startup.bat启动哪个tomcat由此环境变量指定,如果不配置则启动当前tomcat,推荐不要配置此环境变量
Tomcat文件目录结构
- bin :Tomcat启动/关闭等批处理文件所在位置
- conf:Tomcat相关配置文件所在位置(重要)
- lib:支持Tomcat运行所需jar包所在位置
- logs:Tomcat运行时产生的日志文件所在位置
- temp:Tomcat运行时所产生的临时文件所在位置
- webapps:web应用部署位置(重要)
- work:Tomcat工作目录
Tomcat容器的结构(server.xml)
注意:某些结构本身并不是容器,所以不存在包含关系,建议用调度的角度去理解
server element
代表整个容器,是Tomcat实例的顶层元素
service element
代表包含一个管理Host的Engine和多个监听器Connector的集合,负责监听并安排处理客户端的请求
Connector element
代表与客户程序实际交互的给件,它负责接收客户请求,以及向客户返回响应结果.
- Coyote Http/1.1 Connector 在端口处侦听来自客户浏览器的http请求
- Coyote JK2 Connector 在端口处侦听来自其它WebServer(Apache)的servlet/jsp代理请求
Engine element
Engine代表Connector接收请求后的入口,分析包含在请求中的http头消息,然后匹配对应的主机,若没有匹配到,使用默认主机
px:在该元素下可以配置多台虚拟主机Host element
代表虚拟主机,它可以解析对应的应用路径,每个虚拟主机下可部署一个或多个web应用
Context element
代表了运行在Host主机下的当个web应用
Tomcat配置文件
server.xml
<?xml version="1.0" encoding="UTF-8"?><!-- 父级元素 监听8005端口等待关闭命令 接收到SHOUTDOWN关闭服务器 --><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集合 --> <Service name="Catalina"> <!-- HTTP报文监听器 监听8080端口 redirectport : 当客户请求是https时,把该请求转发到端口8443去 minProcessors : 最小线程数,开始时创建的保持常态的线程数 maxProcessors : 最大线程数,当现有的线程不够服务客户请求时,若线程总数不足该数个数,则创建新线程来处理请求 connectionTimeout:连接超时时间 --> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <!-- AJP报文监听器 监听8009端口 --> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <!-- Engine defauletHost:默认主机 --> <Engine name="Catalina" defaultHost="localhost"> <!-- 虚拟主机localhost appBase : 该虚拟主机的根目录是webapps/ 它将匹配请求和自己的Context的路径,并把请求转交给对应的Context来处理 autoDeploy:设置自动部署 --> <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,WebApp path : 该Context的路径名,若为""则该Context为默认Context docBase : 该Context的根目录是webapps/test/ --> <Context path="" docBase="test" debug="0"/> </Host> </Engine> </Service></Server>
context.xml
<?xml version="1.0" encoding="UTF-8"?><Context><WatchedResource>WEB-INF/web.xml</WatchedResource> <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource> <!-- 设置JNDI --> <Environment name="hncu" value="hello welcome use jndi" type="java.lang.String" /> <!-- 设置服务器托管数据源此处使用的是Tomcat的dbcp --> <Resource name="jdbc/dbcp" auth="Container" type="javax.sql.DataSource" maxTotal="30" maxIdle="20" maxWaitMillis="10000" username="root" password="root" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test"/> <resource-ref> <res-ref-name>jdbc/test</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> <!-- 托管c3p0 --> <Resource name="jdbc/c3p0" auth="Container" type="com.mchange.v2.c3p0.ComboPooledDataSource" factory="org.apache.naming.factory.BeanFactory" driverClass="com.mysql.jdbc.Driver" jdbcUrl="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8" user="root" password="root" minPoolSize="10" maxPoolSize="30" maxIdleTime="1800" acquireIncrement="2" maxStatements="0" initialPoolSize="20" idleConnectionTestPeriod="60" acquireRetryAttempts="30" acquireRetryDelay="1000" testConnectionOnCheckin="false" breakAfterAcquireFailure="false" testConnectionOnCheckout="false"/></Context>
tomcat-users.xml
<?xml version="1.0" encoding="UTF-8"?><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="tomcat"/><role rolename="role1"/><user username="tomcat" password="tomcat" roles="tomcat"/><user username="tomcat" password="tomcat" roles="tomcat,role1"/><user username="tomcat" password="tomcat" roles="role1"/>
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="h ttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <!-- 默认servlet,所有servlet都无法匹配时执行该servlet --> <servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <!-- 初识servlet参数 --> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!--当请求的是一个JSP页面的时候(*.jsp)该servlet被调用 它是一个JSP编译器,将请求的JSP页面编译成为servlet再执行 --> <servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.jspx</url-pattern> </servlet-mapping> <!-- 配置session --> <session-config> <session-timeout>30</session-timeout> </session-config> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
Tomcat处理Http请求
以http://localhost:8080/test/test.jsp为例:
1. 请求到达服务器端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得,并把它转交给Engine,等待回应。
2. Engine获得请求http://localhost:8080/test/test.jsp,匹配它所拥有的所有虚拟主机Host,匹配名称为localhost的主机(若没有使用默认主机),把请求转发给该主机,并等待回应
3. localhost Host获得请求/test/test.jsp,匹配它所拥有的所有Context,若匹配到路径为/test的Context,将请求交给它(如没有交给路径为”“的Context处理)
4. Context获得请求/test.jsp,在它的映射表中查找该资源,找到后构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用Servlet的doGet或doPost方法
5. Context把执行完了之后的HttpServletResponse对象返回给Host
6. Host把HttpServletResponse对象返回给Engine
7. Engine把HttpServletResponse对象返回给Connector
8. Connector把HttpServletResponse对象返回给客户browser
参考文章
http://www.infoq.com/cn/articles/zh-tomcat-http-request-1
http://blog.csdn.net/skp127/article/details/52026150
- Tomcat认知
- Tomcat基础认知
- 认知
- 认知
- 认知
- 认知
- 认知
- 认知
- 认知
- 认知
- 认知迭代:Tomcat性能提升的实战操作,提升60倍以上tomcat性能
- 认知,从认知开始
- dephi认知
- 认知不协调
- 多线程认知
- Socket 认知
- size_t认知
- 认知心理学
- 发布自己的python轮子——上传PyPI
- hbase shell状态下回退键设置(scureCRT)
- gdb基本命令(非常详细)
- 创业者都是梦想家
- CentOS 7下安装集群Zookeeper-3.4.9
- Tomcat认知
- a标签去掉点击默认样式
- 【笔试题】携程2018笔试[中位数、]
- 欢迎使用CSDN-markdown编辑器
- jsp中9个内置对象与servlet对应关系及四个作用域
- 慕课火拼俄罗斯方块
- 第一个简单的Servlet
- Hibernate Session
- tableview中自定义自定义左滑显示编辑按钮