标签:tomcat lnmt
Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阈等。但是不能将Tomcat和Apache HTTP服务器混淆,Apache HTTP服务器时一个用C语言实现的HTTP web服务器,而Tomcat则是由Java编写。
Java是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。Java的特点之一面向对象,是程序设计方法的一种。
过程式编程:以指令为中心,数据服务于代码 对象式编程:以数据位中,指令服务于数据
用java语言编译源代码,通过JAVAC (Java complie)它编译成java .class(bytes code)文件,然后在Java VM中运行.class文件;当编写程序时,通过调用类(API class)中的方法来访问系统资源,而当程序运行时,它通过调用class文件中实现Java API的方法来满足程序的Java API调用。Java VM 和Java API一起组成一个平台,被称为JDK(Java Development Kit),所有的Java程序都在其上编译和运行。
Java VM主要任务时装载class文件并且执行其中的字节码,加载程序的类文件即程序的类文件依赖到的其他的类文件而后运行,整个运行表现为一个jvm进程。它包含一个类装载器(class loader)可以从程序和API装载class文件;但是Java API的类只在程序执行中需要时才会装载。
Java SE包含了Java二进制程序(如JVM和Java字码编译器)和Java的核心代码库;而Java EE标准则包含了一组适用于创建企业级Web应用程序API。Java EE是建立在Java SE基础之上;它包含了多个独立的API,如Servlet和JSP等
方法区线程共享,用于存储被JVM加载的class信息、常量、静态变量、方法等
堆JVM所管理的内存中占用空间最大的一部分;也是GC管理的主要区域;存储对象
栈线程私有,存储线程自己的局部变量
PC寄存器线程私有的内存空间,程序的指令指针
本地方法栈执行引擎调用本地方法是的运行时聂村去
JVM的功能模块主要包括类加载器、执行引擎和垃圾回收系统。
-- JVM组成
JRE(JVM+java SE API):是用于实现java程序运行的最小环境 JDK(Java+API+JVM):是用于实现Java程序开发的最小环境
index.jsp-->jasper-->servert Source Code(.java)-->Java Compiler (.class)-->在JVM虚拟机上运行
Tomcat不是一个完整意义上的Java EE服务器,甚至没有提供对一个主要java EE API。由于遵守apache开源协议,tomcat为众多java应用程序服务器嵌入自己的产品中构建商业的java应用程序服务器,如JBoss等
Servlet通常需要实现编译好,而JSP则并非必须事先编译。这意味着Servlet通常放置于私有资源区域,而JSP则通常以嵌入代码的方式包含于HTML页面文件中,这些HTML文件通常放置在公开资源区域。
MVC架构由Contoller、Model和View构成,实现Apache Structs框架。
a、Servlet用于实现应用逻辑 b、JSP用于内容展示 c、标签库和JSP扩展语言用于替换JSP内部嵌入Java代码,进而降低了HTML维护的复杂度 d、MVC框架用于实现展示和应用逻辑分离
对于一个web应用程序而言,其通常由Servlet、JSP和其他文件等共同组成。这些文件通常被打包成WAR(Web Application Archive)格式,并以.war作为打包后的文件扩展名。而Servlet规范则定义了在WAR内部组织这些文件的标准目录结构。
/ :web应用程序的根目录,所有可被公开访问的文件均放置于此处,如HTML、JSP和图片文件等 /WEB-INF :此目录为私有资源目录,其内部的所有文件和子目录不能被公开访问;包含此web应用程序的配置文件web.xml,通常放置于此目录 /WEB-INF/classes:当前web应用程序的类文件存在目录 /WEB-INF/lib:可被打包为JAR格式的类文件通常放置于此目录
bin:脚本,即启动时用到的类 conf:配置文件目录 lib:库文件,Java类库,jar logs:日志文件目录 temp:临时文件目录 webapps:webapp的默认目录 work:工作目录,存放编译后的字节码文件
server.xml tomcat主配置文件,包含service、connector、engine、realm、valve、host相关配置信息
web.xml 每个webapp只有“部署”后才能被访问,它的部署方式通常有web.xml进行定义,其存放的位置为WEB-INF/目录下,次文件为所有的webapps提供默认部署相关的配置
context.xml 每个文本app都可以使用的配置文件,它通常有专用的配置文件contest.xml来定义,其存放位置为WEB-INF/目录下
tomcat-user.xml realm认证时用到的相关角色、用户和密码等信息;tomcat自带的manager默认情况下会用到此文件。此文件在tomcat启动时被装入内存
catalina.policy 当使用-security选项启动tomcat时,用于为tomcat设置安全策略
catalina.properties Java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数
logging.properties 日志系统相关的配置
Tomcat组件
顶级组件:位于配置层次的顶级,并且彼此间有着严格的对应关系(server、service) 连接器:连接客户端请求至servlet(connector) 容器:包含一组其他组件(engine、host、context) 被嵌套的组件:位于一个容器当中,但不能包含其他组件(valve、logger、realm) <Server> <Service> <connector/> <connector/> ... <Engine> <Host> <Context/> <Context/> ... </Host> <Host> ... </Host> ... </Engine> </Service> </Server>
server:代表tomcat instance,即表现出一个java进程;监听在8005端口,只能接受“SHUTDOWN”指令。各server监听的端口不能相同,因此在同一物理主机启动多个示例时,需要修改其监听端口为不同的端口。这个端口的定义为管理员提供一个关闭此示例的便捷途径,管理员可以直接使用telnet命令连接此端口SHUTDOWN关闭此示例。基于安全角度考虑,通常不允许远程进行
service:用于实现将一个或多个connector组件关联至一个engine组件
className:用于实现service的类名 name:此服务的名称,默认为catalina
connector:负责接收请求,常见的有三类http、https、ajp
address:指定连接器监听的地址,默认为所有地址maxThreads:支持的最大并发连接数,默认为200 port:监听的端口,默认为0 protocol:连接器使用的协议,默认为HTTP/1.1,定义AJP协议时通常为AJP/1.3redirectPort:如果某连接器支持的协议时HTTP,当接收客户端发来的HTTPS请求时则转发至此属性的定义端口connectionTimeout:等待客户端发送请求的超时时间,单位为毫秒,默认为6000 enableLookups:是否通过request.getRemoteHost()即是否启用DNS查询功能acceptCount:设置等待队列的最大长度
engine: servlet示例,即servlet引擎,其内部可以一个或多个host组件来定义站点;通常需要defaultHost属性来为其定义一个接受所有发往非明确定义虚拟主机的请求的host组件
name:engine组件的名称,用于日志和错误信息记录时却别不同的引擎
host:位于engine内部用于接受请求并进行响应处理的主机或虚拟主机
appBase:此host的webapps的默认存放目录,指存放非归档的web应用程序的目录或归档的WAR文件目录路径;可以使用基于$CATALINA_BASE变量所定义的路径的相对路径 autoDepoly:在tomcat处于运动状态时,将某webapp放置于appBase所定义的目录中,是否自动将其部署至tomcat;默认为true unpackWars:在启用此webapss时是否对WAR格式的归档文件先进行展开,默认为true
主机别名定义:如果一个主机有两个或两个以上的主机名,额外的名称均可以以别名的形式进行定义
示例
<Host name="www.test.com" appBase="webapps" unpackWARS="true"> <Alias>test.com</Alias> </Host>
context:context在某些意义上类似于apache的路径别名,一个context定义用于表示tomcat示例中的一个web应用程序
docBase:相应的web应用程序存放位置;也可以使用相对路径,起始路径为Context所属Host中appBase定义的路径;切记,docBase的路径名不能与相应的Host中的appBase中定义的路径名有包含关系,比如appBase为deploy,而docBase决不能为deploy-bbs类的名字 path:相对于web服务器根目录而言的URI,如果为空,则表示为webapp的根路径;如果context定义了一个单独的xml文件,此属性不需要定义 reloadable:是否允许重新加载此context相关的web应用程序类,默认为false
示例
<Context path="/path" docBase="/path/to/somedir" reloadable=""/>
realm:一个realm表示一个安全上下文,授权访问某个给定context的用户列表和某用户所允许切换角色相关定义的列表
valve: 类似于过滤器,valve定义的次序决定了他们的生效次序。
RemoteHostValve:基于远程主机名称的访问控制 RemouteAddrValve:基于远程地址的访问控制
控制本身可以通过allow或deny来进行定义,这有点类似于apache的访问控制功能
示例:
<Context path="/test" docBase="test"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.0\.0\.1"/> </Context> *className*:相关的java实现的类名 *allow*:以逗号分开的允许访问的IP地址列表,支持正则表达式,使用“.”需要转义;仅定义allow选项是,被明确allow的地址均被deny *deny*:以逗号分开的禁止访问IP地址列表,支持正则表达式,使用方式同allow
部署(deploy)webapp相关操作
将webapp的源文件放置于目标目录,配置tomcat服务器能够基于web.xml和context.xml文件中定义的路径来访问webapp;将其特有的类和依赖的类通过class loader装载至JVM中
部署方式: (1)自动部署auto deploy (2)手动部署 冷部署:把webapp复制到指定的位置,而后才能启动tomcat 热部署:在不停止tomcat的前提下进行部署 部署工具:manager、ant脚本、tcd(tomcat client deployer) undeploy:拆除(反部署),停止webapp,并从tomcat示例上卸载webapp start:启动处于停止状态的webapp stop:停止webapp,不再向用户提供服务,其类亦然在jvm上 redeploy:重新部署
<role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="standard"/> <user username="tomcat" password="secret" roles="admin-gui,manager-script,standard"/>
(1)standalone:请求来自客户端浏览器 (2)由其他的web server反代,来自前段的反代服务器 nginx-->http connector -->tomcat httpd(proxy_http_module)-->http connector-->tomcat httpd(proxy_ajp_module)-->ajp connector -->tomcat http(mod_jk)-->ajp connector -->tomcat
使用yum源安装即可
(1)安装jdk环境,由于base源提供了三个不同版本的jdk环境,根据我们的需要自行安装所需要的版本
[root@localhost~]#yum install -y java-1.8.0-openjdk-src
[root@localhost~]#java -version
#查看是否安装成功
如果多 版本并存时,可使用alternatives命令设定默认使用的版本。
(2)安装tomcat
[root@localhost~]#yum install -y tomcat tomcat-admin-webapps tomcat-docs-webapp tomcat-webapps tomcat-libs
[root@localhost~]#systemctl start tomcat.service
#启动服务
(1)从官网下载rpm安装jdk
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
[root@localhost~]#rpm -ivh jdk-8u144-linux-x64.rpm
[root@localhost~]#java -version
#测试是否安装成功
(2)二进制安装tomcat
https://tomcat.apache.org/download-80.cgi
[root@localhost~]#tar xf apache-tomcat-7.0.78.tar.gz -C /usr/local/
#解压缩
[root@localhost~]#cd /usr/local/
[root@localhost/usr/local]#ln -sv apache-tomcat-7.0.78/ tomcat
#创建软连接
[root@localhost/usr/local/tomcat]#vim /etc/profile.d/tomcat.sh
#修改环境变量
1 export CATALINA_BASE=/usr/local/tomcat 2 export PATH=$CATALINA_BASE/bin:$PATH
修改权限
[root@localhost/usr/local]#useradd -r tomcat
#创建用户
[root@localhost/usr/local]#chown -R :tomcat tomcat/
#修改配置文件所属组
[root@localhost/usr/local/tomcat]#chown tomcat ./{logs,temp,work,webapps}
[root@localhost/usr/local/tomcat]#source /etc/profile.d/tomcat.sh
#使环境变量生效
(3)重启服务测试
[root@localhost/usr/local/tomcat/bin]#catalina.sh --help
Usage: catalina.sh ( commands ... ) commands: debug Start Catalina in a debugger debug -security Debug Catalina with a security manager jpda start Start Catalina under JPDA debugger run Start Catalina in the current window run -security Start in the current window with security manager start Start Catalina in a separate window start -security Start in a separate window with security manager stop Stop Catalina, waiting up to 5 seconds for the process to end stop n Stop Catalina, waiting up to n seconds for the process to end stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running configtest Run a basic syntax check on server.xml - check exit code for result version What version of tomcat are you running?
[root@localhost~]#mkdir test/{logs,temp,work,webapps} -pv
[root@localhost~]#chown -R tomcat test/{logs,temp,work,webapps}
[root@localhost/usr/local/tomcat/bin]#catalina.sh start
#启动服务
建议一般以普通用户运行tomcat
(1)创建所需要的目录
[root@localhost~]#mkdir test/{classes,lib,WEB-INF} -pv
(2)创建index.jsp文件
[root@localhost~]#vim test/index.jsp
1 <%@ page language="java" %> 2 <%@ page import="java.util.*" %> 3 <html> 4 <head> 5 <title>Test Page</title> 6 </head> 7 <body> 8 <% out.println("hello world"); 9 %> 10 </body> 11 </html>
(3)将test目录移动到webapps目录下
[root@localhost~]#cp -r test/ /usr/share/tomcat/webapps/
(4)重启服务测试
[root@localhost~]#systemctl start tomcat
如果是程序员将打包好的jar文件发给我们,可以将此包直接防止webapps目录下,可以自行部署
(5)查看部署过程
[root@localhost/usr/share/tomcat/work/Catalina/localhost]#tree test/
test/ └── org └── apache └── jsp ├── index_jsp.class └── index_jsp.java
(1)首先先查看下我们的服务是否正常运行
(2)使用telnet连接关闭服务
此时我们再看服务已经没有开启了,为了防止恶意之人,我们需要将命令修改为随机数等等
[root@localhost/etc/tomcat]#openssl rand -hex 20
fb8a9c1a78827dcb81950feca0e18c6d4470997e
[root@localhost/etc/tomcat]#vim server.xml
[root@localhost/etc/tomcat]#mkdir -pv /app/webapps
[root@localhost/etc/tomcat]#mkdir -pv /app/webapps/ROOT/{lib,classes,WEB-INF}
[root@localhost/etc/tomcat]#cp /usr/share/tomcat/webapps/test/index.jsp /app/webapps/ROOT/
#创建站点文件
重启服务测试
[root@localhost/etc/tomcat]#systemctl start tomcat
[root@localhost/etc/tomcat]#curl www.test.com:8080
<html> <head> <title>Test Page</title> </head> <body> hello world </body> </html>
出现上述结果正常,使用的是curl命令没有做修改
[root@localhost/etc/tomcat]#links www.test.com:8080
(1)创建目录
[root@localhost~]#cp -r test/ /data/test
(2)编辑server.xml文件
[root@localhost~]#vim /etc/tomcat/server.xml
(3)编辑index.jsp文件
[root@localhost/data/test]#vim index.jsp
1 <%@ page language="java" %> 2 <%@ page import="java.util.*" %> 3 <html> 4 <head> 5 <title>Test Page</title> 6 </head> 7 <body> 8 <% out.println("hello tomcat"); 9 %> 10 </body> 11 </html>
(4)重启服务测试
[root@localhost/data/test]#links www.test.com:8080/test
(1)如果我们想启用Server Status功能需要认证,如果我们点击cancle则出现指示方法
(2)修改tomcat-user.xml配置文件
[root@localhost/etc/tomcat]#vim tomcat-users.xml
(3)重启tomcat服务测试
[root@localhost/etc/tomcat]#systemctl restart tomcat
(1)编辑server.xml配置文件
[root@localhost/etc/tomcat]#vim server.xml
(2)测试
禁止此IP访问没有显示内容
那么接下来我们允许此IP访问并再次重启服务测试
安装mysql数据库
(1)安装mysql并配置环境
[root@mysql ~]# yum install -y mysql-server
[root@mysql ~]# service httpd start
#启动服务
[root@mysql ~]# mysql_secure_installation
#mysql安全初始化
(2)创建数据库并授权用户
[root@mysql ~]# mysql -uroot -p
mysql> CREATE DATABASE testprocess; mysql> GRANT ALL ON testprocess.* TO ‘joah‘@‘192.168.4.61‘ IDENTIFIED BY ‘123456‘;
tomcat
(1)安装jdk环境
[root@tomcat/etc/tomcat]#yum install -y java-1.8.0-openjdk-src
(2)安装tomcat
[root@tomcat~]#yum install -y tomcat tomcat-lib tomcat-admin-webapps tomcat-docs tomcat-webapps
(3)启动服务测试是否成功
[root@tomcat~]#systemctl enable tomcat
#设置为开机自动启动
[root@tomcat~]#systemctl start tomcat
#启动服务
使tomcat与mysql可以连接
MySQL Connector / J是一个本地Java驱动程序,可以将JDBC(Java Database Connectivity)调用MySQL数据库使用的网络协议。
(1)安装mysql-connector-java
[root@tomcat~]#yum install -y mysql-connector-java
#用于使用java连接mysql数据库
[root@tomcat~]#cp /usr/share/java/mysql-connector-java.jar /usr/share/tomcat/lib/
将此压缩包复制到此目录下,自动安装部署
[root@tomcat~]#systemctl restart tomcat
#重启服务
(2)修改mysql中的配置文件
[root@mysql ~]# vim /etc/my.cnf
[root@mysql ~]# service mysqld restart
#重启服务
查看是否生效
创建数据库并授权
mysql> CREATE DATABASE tomcat; mysql> CREATE TABLE tom(id int,name varchar(40)); mysql> insert into tom values(1,‘test‘); mysql> GRANT ALL ON tomcat.* TO ‘joah‘@‘192.168.4.61‘ IDENTIFIED BY ‘123456‘;
测试是否成功
[root@tomcat~]#mysql -ujoah -p -h 192.168.4.56
编辑test.jsp文件
[root@tomcat/usr/share/tomcat/webapps/ROOT]#vim test.jsp
1 <%@ page contentType="text/html;charset=utf-8"%> 2 <%@ page import="java.sql.*"%> 3 <html> 4 <body> 5 <%Class.forName("org.gjt.mm.mysql.Driver").newInstance(); 6 String url ="jdbc:mysql://192.168.4.56(此处需要换成mysql的地址)/tomcat?user=joah(连接数据库使用的名字)&password=123456(连接数据库的密码)&useUnicode=tr ue&characterEncoding=utf-8"; 7 Connection conn= DriverManager.getConnection(url); 8 Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_ UPDATABLE); 9 String sql="select * from tom(连接数据库中的表)"; 10 ResultSet rs=stmt.executeQuery(sql); 11 while(rs.next()) {%> 12 step:<%=rs.getString(1)%> 13 context:<%=rs.getString(2)%><br><br><%} 14 %> 15 16 <%out.print("Congratulations!!! JSP connect MYSQL IS OK!!");%> 17 <%rs.close(); 18 stmt.close(); 19 conn.close(); 20 %> 21 </body> 22 </html>
修改nginx.conf配置文件
[root@nginx/etc/nginx]#vim nginx.conf
47 location / { 48 proxy_pass http://192.168.4.61:8080; 49 } 50 location ~*\.(jsp|do)$ { 51 proxy_pass http://test.com:8080; 52 }
[root@nginx/etc/nginx]#nginx -t
[root@nginx/etc/nginx]#systemctl restart nginx
#重启服务测试
重启服务测试
至此我们的LNMT环境搭建成功
(1)apache安装
[root@web~]#yum install -y httpd
[root@web~]#systemctl enable httpd
#设置开机启动
[root@web~]#systemctl start httpd.service
#启动服务
(2)修改配置文件httpd.conf
基于http连接
查看是否有支持http协议的代理模块
[root@web/etc/httpd/conf]#httpd -M |grep http
proxy_http_module (shared)
编辑配置文件
[root@web/etc/httpd/conf.d]#vim host.conf
1 <VirtualHost *:80> 2 ServerName www.test.com 3 ProxyRequests off 关闭正向代理 4 ProxyVia on 是否记录代理 5 ProxyPreserveHost on #开启保留主机名 6 <Proxy *> 7 Require all granted 8 </Proxy> 9 ProxyPass / http://192.168.4.61:8080/ 10 ProxyPassReverse / http://192.168.4.61:8080/ 11 <Location /> 12 Require all granted 13 </Location> 14 </VirtualHost>
重启服务测试
[root@web/etc/httpd/conf.d]#systemctl restart httpd.service
基于AJP协议连接
查看是否加载了支持ajp协议的反向代理模块
[root@web/etc/httpd/conf]#httpd -M |grep ajp
proxy_ajp_module (shared)
编辑配置文件
[root@web/etc/httpd/conf.d]#vim host.conf
1 <VirtualHost *:80> 2 ServerName www.test.com 3 ProxyRequests off 4 ProxyVia on 5 ProxyPreserveHost on 6 <Proxy *> 7 Require all granted 8 </Proxy> 9 ProxyPass / ajp://192.168.4.61:8009/ 10 ProxyPassReverse / ajp://192.168.4.61:8009/ 11 <Location /> 12 Require all granted 13 </Location> 14 </VirtualHost>
重启服务测试
后续的安装和LNMT的安装方法一样,就不再累述。
本文出自 “Joah” 博客,请务必保留此出处http://merit.blog.51cto.com/10757694/1979182
标签:tomcat lnmt
原文地址:http://merit.blog.51cto.com/10757694/1979182