组件原理图如下:
任何tomcat实例就是一个server,而一个server内部要想能够解析jsp页面转义编译serlet程序,要靠其引擎来实现 而引擎才是真正意义上执行jsp代码的容器,都是tomcat用类来描述这些组件的 同时,为了接受用户的请求,需要基于connector组件,所谓监听的套接字的程序,能够接手用户的请求,被称为连接器 一个server内部可以完全运行N个引擎,无非就是运行多个虚拟机而已
war包的概念 放在网页目录可以直接访问,而部署的时候可以自动将其展开装载,而这是部署本身所完成的工作 在实现web站点的时候,在出程序之下有目录比如/web/htdoc,而在其目录下有一子目录/web/htdoc/bbs 而在其下有个论坛程序 这个目录程序跟其他程序可能不在同一组,而新加的子目录则需要重新部署,因为其属于独立的应用程序,因为每个独立程序都需要独立部署 对于tomcat来讲每一个host内部还有一子组件,叫做conntest,其作用是为了实现程序的独立部署
对于tomcat来讲要想记录日志的话,因此这些都需要使用特殊接口来实现,所以,任何一个需要操作硬件资源的进程,资源都有一个类在实现我们的需求,tomcat也一样。
常见组件 1.服务器(server) 实例,通常一个jvm只能包含一个实例,一般情况下,一个物理服务器可以启动多个jvm,从而启动多个实例,但一般不这么做 2.服务(service) 一个服务组件通常包含一个引擎和此引擎相关联的一个或多个链接服务器 3.连接器(connectors) 一个引擎能配置多个连接器 但是每个连接器的端口不能冲突 同时,tomcat也支持AJP JSERV和JK2连接器,实现让apache反向代理到后端服务器的非常高效的传输协议 容器类组件 4.引擎 可以自己接收用户的http请求,并构建响应报文,而且可以在内部处理java程序的整个套间 5.主机 6.上下文
被嵌套类组件 7.阀门 能够过滤也可以做访问控制 8.日志记录器 9.领域(Realm) 用来实现用户的认证和授权
对tomcat来讲,每种模型上的实现必须开发一种程序,才能完成相应组件的功能,而java中任何程序都是一个类
JAVA常用类型文件 EJB程序通常以.jar结尾 web程序通常打包为.war 资源适配器通常为.rar 企业级应用长须为.ear web服务通常会打包为.ear或.war
tomcat配置文件详解 tomcat的配置文件位于/path/to/tomcat/conf/目录下 [iyunv@node1 conf]#cd /usr/local/tomcat/conf [iyunv@node1 conf]#cpserver.xml server.xml.bak 查看文件: [iyunv@node1 conf]#cat server.xml Listener 为侦听器,通常实现tomcat内部进行通信的,可在各组件之间完成通信 <Serverport="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.core.AprLifecycleListener"SSLEngine="on" /> <Listener className="org.apache.catalina.core.JasperListener"/> <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 databasethat can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> #其调用tomcat-user.xml配置文件进行用户认证 </GlobalNamingResources> 服务类组件配置信息,将连接器关联至引擎上 <Servicename="Catalina"> <Connector port="8080" protocol="HTTP/1.1" #所在监听端口,以及协议版本号
connectionTimeout="20000" #连接超时时间,单位毫秒
redirectPort="8443" /> #必要的时候可以做重定向,定义在8443
<Connector port="8443"protocol="HTTP/1.1" SSLEnabled="true" #端口监听在8443,协议http1.1
maxThreads="150" scheme="https" secure="true" #最大线程,协议版本,安全的
clientAuth="false" sslProtocol="TLS" /> #不验证客户端 ssl协议用的是tls
<Connector port="8009" protocol="AJP/1.3"redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost"> #引擎,名为catalina <RealmclassName="org.apache.catalina.realm.LockOutRealm"> <RealmclassName="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm> <Host name="localhost" appBase="webapps" #应用程序存放的位置,相对路径 unpackWARs="true" autoDeploy="true"> #如果是war文件格式,是否解压,是否自动部署
#定义阀门,java中类的记录方式,当前所处域名反过来写的记录方式
<ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="logs" prefix="localhost_access_log." suffix=".txt" #日志的命名 suffix表示时间戳
pattern="%h %l %u %t "%r" %s %b" /> #访问日志的格式
</Host>
</Engine>
</Service>
</Server>
tomcat的运行方式 tomcat可以自我独立运行,因此可以直接监听在某个端口,从而接收用户的http请求,并构建响应报文 另外也可以做为容器,不接受用户的http请求只接受用户的对于某个jsp文件的请求 当用户第一次去请求tomcat的时候,会自动部署好一个程序的 来查看配置文件: 明确说明了主机名默认为localhost,而unpackWARs的值为真,意为是可以自动部署的 <Hostname="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
配置Tomcat ·定义管理页面用户名及密码
用户名及密码是通过tomcat-users.xml配置文件进行调用的,所以我们只需要配置tomcat-users.xml即可
[iyunv@node1 conf]#vim tomcat-users.xml 加入以下参数信息
<rolerolename="manager-gui"/> #定义manager组 <role rolename="admin-gui"/> #定义admin组 <user username="tomcat"password="tomcat" roles="manager-gui,admin-gui"/> #定义用户名及密码都为tomcat,并将tomcat用户加入至manager、admin组中 保存退出并重启服务 [iyunv@node1 conf]#/etc/init.d/tomcat stop [iyunv@node1 conf]#/etc/init.d/tomcat start 查看监听端口是否正常
[iyunv@node1 conf]#netstat -lntup | grep java tcp 0 0 :::8080 :::* LISTEN 2359/java tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 2359/java tcp 0 0 :::8009 :::* LISTEN 2359/java 访问测试:
输入用户名和密码,选择登陆
如下所示,已经成功登陆至后台信息页面
Type #所属类型类型 Initial #初始化空间多大 Total Maximum #最大空间有多大 Used #已经使用了多少
Max threads: 200 默认最大并发连接数200 Current thread count: 0 当前连接数 Current thread busy: 0 繁忙连接数
对其做压力测试并观察其连接状态,并再次刷新页面 状态说明: R: 已经准备好 S: 正在提供服务 k: 持久连接
登陆后台管理页面
由于我们刚才定义tomcat-user.xml的时候已经将用户tomcat加入到admin-gui组中,所以我们直接登陆就可以了 打开主页面,选择Host Manager
Host Manager 表示有多少个虚拟主机 如果想部署新的虚拟主机可以在下面的图形界面进行部署,如下所示 tomcat应用程序目录结构 /WEB-INF/web.xml:包含当前webapp的deploy描述符,如所有的servlet和JSP等动态文件的详细信息,会话超时时间和数据源等;因此,其也通常用于定义当前webapp特有的资源; /WEB-INF/classes: 包含所有服务器端类及当前应用程序相关的其它第三方类等;
/WEB-INF/lib: 包含JSP所用到的JAR文件;
/META-INF/ :也是用来存放资源信息的,只不过一般用的不是特别多,就算有的话里面程序也未必有文件; webapps/manager/META-INF/context.xml :上下文配置文件,有些配置信息可以放在META配置当中;
使用自定义位置 如果我们自己要发布一个资源,使用其他特定的目录来发布应用程序的话,也是按照这种格式: [iyunv@node1tomcat]# mkdir /tomcat/app1/WEB-INF/{classess,lib} -p 进入目录 [iyunv@node1 app1]#pwd /tomcat/app1 创建index.jsp,内容如下: [iyunv@node1 app1]#cat index.jsp <%@ pagelanguage="java" %> <html> <head><title>TomcatA</title></head> <body> <h1><fontcolor="red">TomcatA </font></h1> <tableborder="1"> <tr> <td>Session ID</td> <%session.setAttribute("abc","abc"); %> <td><%= session.getId()%></td> </tr> <tr> <td>Created on</td> <td><%=session.getCreationTime() %></td> </tr> </table> </body> </html>
定义虚拟主机 编辑server.xml
[iyunv@node1 conf]#vim server.xml 加入如下内容
<Host name="www.test.com" appBase="webapps" unpackWARs="true"autoDeploy="true"> <ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="logs" prefix="www_access_log."suffix=".txt" pattern="%h %l %u %t"%r" %s %b" /> <Contextpath="/" docBase="/tomcat/app1" /> #定义访问的路径当于整个路径的根,docBase表示访问的路径的位置 </Host> <Engine name="Catalina" defaultHost="www.test.com"> 启动服务 [iyunv@node1 conf]#/etc/init.d/tomcat start 或者 [iyunv@node1 conf]#catalina.sh start 查看监听端口是否正常 [iyunv@node1 conf]#netstat -lntup | grep java tcp 0 0 :::8080 :::* LISTEN 2079/java tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 2079/java tcp 0 0 :::8009 :::* LISTEN 2079/java 访问测试:
http://10.0.10.61:8080/
第一次访问时,页面会很慢,是因为第一次访问jsp的时候都需要对其进行编译;
编译jsp页面的执行次序 jsp页面通过jasper进行编译 再由编译器 javac编译为 class文件因此每一次都需要编译的,如果不改文件刷新速度是非常快 如果是更改了文件的话,第一次访问可能会等待半天,所以任何时候更改完源程序都需要重新编译文件的
一旦页面被编译后会有什么样的结果: [iyunv@node1 conf]#cd Catalina/ [iyunv@node1Catalina]# ll total 8 drwxr-xr-x. 2 rootroot 4096 Jun 26 10:48 localhost drwxr-xr-x. 2root root 4096 Jul 1 10:45 www.test.com #每一个host都有一个独立的目录 [iyunv@node1 Catalina]# pwd /usr/local/tomcat/work/Catalina index_jsp.class index_jsp.java #此处已验证了,首先由jasper翻译成serverlet,再由其编译成class文件
实例:部署论坛程序 论坛程序包:JavaCenter_Home_2.0_GBK.zip 下载源码包可以去jsprun官方进行下载
解压源码包并拷贝至相关目录
[iyunv@node1 ~]# unzip JspRun\!_6.0.0_UTF8.zip [iyunv@node1 ~]# cdJspRun\!_6.0.0_UTF8/ [iyunv@node1upload]# cp -fra * /tomcat/app1 启动tomcat
[iyunv@node1 app1]#catalina.sh start 启动mysql
[iyunv@node1 app1]#/etc/init.d/mysqld start 将mysql赋予授权
mysql> grantall on jchome.* to 'jcuser'@'localhost' identified by 'jdpass';
Query OK, 0 rows affected (0.00 sec) mysql> flushprivileges; 创建数据库 mysql> createdatabase jchome; 修改论坛程序的config.properties配置文件
[iyunv@node1 app1]#pwd /tomcat/app1 [iyunv@node1 app1]#vim config.properties 修改为:
dbhost = localhost dbport=3306 dbuser = jcuser dbpw = jdpass dbname = jchome pconnect = 0 访问 http://10.0.10.61:8080/upload/install.jsp 进行安装
安装过程略,最后迎接我们的则是崭新的论坛界面,如下所示:
END,感谢各位。
|