文章目录
Linux云计算架构-实现jsp通过Tomcat连接Mysql
1. 概念介绍
1.1 Tomcat
官网:http://tomcat.apache.org/
Tomcat 5支持最新的Servlet 2.4 和jsp 2.0规范。
Tomcat是目前较为流行的web应用服务器。优点是:技术先进、性能稳定、免费。
Tomcat服务器是一个免费的开放源代码的web应用服务器,是一种轻量级的应用服务器,在中小型系统和并发访问用户不多的场景下被普遍使用,也是开发和调试JSP程序的首选。也具有html页面处理能力。
Tomcat 工作模式和端口
模式:B/S 模式
端口:8080
1.2 JSP
JSP,即Java Server Pages(java 服务器页面),是一种动态网页技术标准。JSP技术是在传统的HTML文件(.htm,.html)中插入java程序段(scriptlet)和JSP(tag)标记,形成JSP文件,后缀名为(*.jsp),用JSP开发的web应用是跨平台的,既能在linux上运行,也能在其他操作系统上运行。
用JSP开发的web应用:
oracle公司的weblogic:这个应用服务,是一种基于JAVAEE架构的中间件。是用于开发、集成、部署和管理大型分布式web应用、网络应用、数据库应用的java服务器。
IBM公司的websphere:是web应用程序和跨平台、跨产品解决方案所需要的整个中间件基础设施。
1.3 中间件
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。
中间件位于客户机/服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。
连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。
执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或 OS 环境。
中间件是一类连接软件组件和应用的计算机软件,它包括一组服务。以便于运行在一台或多台机器上的多个软件通过网络进行交互。该技术所提供的互操作性,推动了一致分布式体系架构的演进,该架构通常用于支持并简化那些复杂的分布式应用程序,它包括 web 服务器、事务监控器和消息队列软件。
1.4 JAVA
JDK : java development kit (套件) 。JDK 是面向开发人员使用的 SDK,它提供了 Java的开发环境和运行环境。是 Java 开发工具,是进行 Java 开发的基础。(JDK是一种JAVA SDK)
JDK 已经成为使用最广泛的 Java SDK。JDK 是整个 Java 的核心,包括了 Java 运行环境,Java工具和 Java 基础的类库。
SDK:Software Development Kit(软件开发工具包),为建立特定的软件包、软件框架、硬件平台、操作系统等应用软件时的开发工具的集合。可以包括函数库、编译程序等。
JRE:java Runtime Enviroment (Java 的运行环境),是面向 Java 程序的使用者,而不是开发者,是运行 JAVA 程序所必须的环境的集合,包含 JVM 标准实现及 Java 核心类库。Java Runtime Environment(包括 Java Plug-in)是 Sun 的产品,包括两部分:Java Runtime Environment 和 Java Plug-in。
JRE 是可以在其上运行、测试和传输应用程序的 Java 平台。它包括 Java 虚拟机(jvm)、Java核心类库和支持文件。它不包含开发工具(JDK)–编译器、调试器和其它工具。JRE 需要辅助软件–Java Plug-in,以便在浏览器中运行 applet。
JVM:java virtual machine(java 虚拟机)。JVM 是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM 是 java的核心和基础,在 java 编译器和 OS 平台之间的虚拟处理器。它是一种基于下层的操作系统和硬件平台并利用软件方法来实现的抽象的计算机,可以在上面执行 java 的字节码程序。java 编译器只需面向 JVM,生成 JVM 能理解的代码或字节码文件。Java 源文件经编译器,编译成字节码程序,通过 JVM 将每一条指令翻译成不同平台机器码,通过特定平台运行。
JRE是java运行环境,JVM是java虚拟机,在JDK的安装目录下的jre目录下,有bin和lib文件夹,其中bin可以看作是JVM,而lib是JVM工作所需要的类库。 即jre=jvm+lib。
Java se:是Java 程序设计语言和 Java 平台的总称。用 Java 实现的 HotJava 浏览器(支持 Java applet)显示了 Java 的魅力:跨平台、动态的 Web、Internet 计算。从此,Java 被广泛接受并推动了 Web 的迅速发展,常用的浏览器现在均支持 Java applet。
Applet:小应用程序是采用 Java 编程语言编写的程序,该程序可以包含在 HTML(标准通用标记语言的一个应用)页中,与在页中包含图像的方式大致相同。
SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从 JDK 5.0 开始,改名为 Java SE。
EE(J2EE),enterprise edition,企业版,使用这种 JDK 开发 J2EE 应用程序,从 JDK 5.0 开始,改名为 Java EE。
ME(J2ME),micro edition,主要用于移动设备、嵌入式设备上的 java 应用程序,从 JDK5.0 开始,改名为 Java ME。
总的来说,没有 JDK 的话,无法编译 Java 程序,如果想只运行 Java 程序,要确保已安装相应的 JRE。(JDK编译java程序、JRE运行java程序)
2. Tomcat相关软件下载
JDK工具下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
Tomcat下载地址:https://tomcat.apache.org/download-80.cgi
MySQL-Connector-Java下载地址:http://dev.mysql.com/downloads/connector/
Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络 IO 操作,以提升性能。即是用 tomcat-native 这个软件来提高 tomcat 处理静态页面的性能,但tomcat处理静态页面的能力还是不如apache。(已经包含在tomcat的bin目录下)
MysqlServer:建议使用5.5、5.6、5.7、8.0等版本。
常见网页类型 | 具体描述 |
---|---|
HTML& HTM | HyperText Markup Language 超文本标记语言 .html .htm |
ASP | Active Server Page 动态服务器页面 .asp |
ASP.net | 建立在通用语言上的程序架构 .aspx |
PHP | Hypertext Preprocessor 超文本标记语言 .php .php5 .phps |
JSP | .jsp |
3. 部署jdk
# 卸载原来的openjdk,安装oracle-jdk
# oracle-jdk性能比openjdk好,兼容性大。
[root@master ~]# java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
[root@master ~]# yum remove -y java-*
# 下载oracle-jdk,解压到/usr/local/下
[root@master ~]# tar xzvf /usr/local/src/jdk-8u191-linux-x64.tar.gz -C /usr/local/
# 在/usr/local目录下做一个软连接
[root@master ~]# cd /usr/local/
oot@master local]# ln -s jdk1.8.0_191 jdk1.8
# 配置环境变量
[root@master ~]# vim /etc/profile.d/jdk8.sh
[root@master ~]# cat /etc/profile.d/jdk8.sh
export JAVA_HOME=/usr/local/jdk1.8.0_191
export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/jar/tools.jar:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
# 使环境变量生效
[root@master ~]# chmod +x /etc/profile.d/jdk8.sh
[root@master ~]# /etc/profile.d/jdk8.sh
[root@master ~]# bash
# 查看jdk版本
# 不配置环境变量的话可以做一个软连接
[root@master local]# ln -s /usr/local/jdk1.8/bin/java /usr/bin/java
[root@master local]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
4. 部署tomcat
[root@master ~]# ll /usr/local/src/apache-tomcat-8.5.35.tar.gz
-rw-r--r-- 1 root root 9642757 6月 21 19:16 /usr/local/src/apache-tomcat-8.5.35.tar.gz
[root@master ~]# cd /usr/local/src/
[root@master src]# tar xf apache-tomcat-8.5.35.tar.gz
[root@master src]# ll apache-tomcat-8.5.35
总用量 124
drwxr-x--- 2 root root 4096 6月 28 08:09 bin
-rw-r----- 1 root root 19539 11月 4 2018 BUILDING.txt
drwx------ 2 root root 238 11月 4 2018 conf
-rw-r----- 1 root root 6090 11月 4 2018 CONTRIBUTING.md
drwxr-x--- 2 root root 4096 6月 28 08:09 lib
-rw-r----- 1 root root 57092 11月 4 2018 LICENSE
drwxr-x--- 2 root root 6 11月 4 2018 logs
-rw-r----- 1 root root 1726 11月 4 2018 NOTICE
-rw-r----- 1 root root 3255 11月 4 2018 README.md
-rw-r----- 1 root root 7142 11月 4 2018 RELEASE-NOTES
-rw-r----- 1 root root 16262 11月 4 2018 RUNNING.txt
drwxr-x--- 2 root root 30 6月 28 08:09 temp
drwxr-x--- 7 root root 81 11月 4 2018 webapps
drwxr-x--- 2 root root 6 11月 4 2018 work
[root@master src]# mv /usr/local/src/apache-tomcat-8.5.35 /usr/local/tomcat
# 编写启动脚本
# 也可以找到tomcat的启动脚本进行启动
# 启动脚本路径为:/usr/local/tomcat/bin/startup.sh
[root@master src]# vim /etc/init.d/tomcat
[root@master src]# cat /etc/init.d/tomcat
#!/bin/bash
## tomcat startup script for the Tomcat server
# chkconfig: 345 80 20
# description: start the tomcat deamon
## Source function library
JAVA_HOME=/usr/local/jdk1.8.0_191
export JAVA_HOME
CATALANA_HOME=/usr/local/tomcat
export CATALANA_HOME
case "$1" in
start)
echo "Starting Tomcat..."
$CATALANA_HOME/bin/startup.sh
;;
stop)
echo "Stopping Tomcat..."
$CATALANA_HOME/bin/shutdown.sh
;;
restart)
echo "Stopping Tomcat..."
$CATALANA_HOME/bin/shutdown.sh
sleep 2
echo
echo "Starting Tomcat..."
$CATALANA_HOME/bin/startup.sh
;;
*)
echo "Usage: $prog {start|stop|restart}"
;;
esac
exit 0
[root@master ~]# chmod +x /etc/init.d/tomcat
[root@master ~]# service tomcat start
Starting Tomcat...
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.8.0_191
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
# 可以看到以下界面,说明tomcat已经启动完成。
# 如果看不到,请开放8080端口号,或者直接清空或者关闭iptables
# 以下两种方法都可以查看是否已经启动8080端口号。
[root@master ~]# netstat -antup | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 11755/java
[root@master ~]# lsof -i:8080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 11755 root 49u IPv6 66980 0t0 TCP *:webcache (LISTEN)
# 设置下次开机自启tomcat
[root@master ~]# chkconfig --add tomcat
[root@master ~]# chkconfig tomcat on
5. 搭建虚拟主机
# 修改tomcat的配置文件,配置文件存放在以下目录
[root@master ~]# ll /usr/local/tomcat/conf/
总用量 224
drwxr-x--- 3 root root 23 6月 28 08:20 Catalina
-rw------- 1 root root 13548 11月 4 2018 catalina.policy
-rw------- 1 root root 7746 11月 4 2018 catalina.properties
-rw------- 1 root root 1338 11月 4 2018 context.xml
-rw------- 1 root root 1149 11月 4 2018 jaspic-providers.xml
-rw------- 1 root root 2313 11月 4 2018 jaspic-providers.xsd
-rw------- 1 root root 3622 11月 4 2018 logging.properties
-rw------- 1 root root 7511 11月 4 2018 server.xml
-rw------- 1 root root 2164 11月 4 2018 tomcat-users.xml
-rw------- 1 root root 2633 11月 4 2018 tomcat-users.xsd
-rw------- 1 root root 169322 11月 4 2018 web.xml
# 在大概164行加入以下内容,创建虚拟主机
[root@master ~]# vim /usr/local/tomcat/conf/server.xml
164 </Host>
165 <Host name="www.abong.com" appBase="/var/www/html">
166 <Context path="" docBase="/var/www/html/web1" />
167 </Host>
168 <Host name="www.abong.cn" appBase="/var/www/html">
169 <Context path="" docBase="/var/www/html/web2" />
170 </Host>
# 重启tomcat服务
[root@master ~]# service tomcat restart
# 编辑两个网页到/var/www/html/下
[root@master ~]# mkdir -p /var/www/html/web{1,2}
[root@master ~]# echo "this is web1" > /var/www/html/web1/index.html
[root@master ~]# echo "this is web2" > /var/www/html/web2/index.html
# 由于配置的虚拟主机的域名并非公开合法的,需对客户端的主机进行配置,否则无法访问到该域名。
# 编辑文件C:\Windows\System32\drivers\etc\hosts,添加以下内容,完成域名解析
192.168.8.125 www.abong.com
192.168.8.125 www.abong.cn
# 访问网址,可以看到以下内容
# http://www.abong.com:8080/
# http://www.abong.cn:8080/
6. 使用tomcat-native技术优化tomcat
tomcat可以使用 apr(apache portable runtime技术)进行优化,可以提高伸缩性、提高性能并且集成到本地服务器。
使用 tomcat native 技术之后,tomcat 在跟操作系统的交互方面可以做得更好,可以更好地作为一台 web server。 tomcat 可以利用 apache 的 apr 接口,使用操作系统的部分本地操作,从而提升性能。 APR 提升的是静态页面处理能力。
# tomcat8自带源码包
[root@master ~]# ll /usr/local/tomcat/bin/tomcat-native.tar.gz
-rw-r----- 1 root root 411789 11月 4 2018 /usr/local/tomcat/bin/tomcat-native.tar.gz
[root@master ~]# cp /usr/local/tomcat/bin/tomcat-native.tar.gz /usr/local/src/
[root@master ~]# ll /usr/local/src/tomcat-native.tar.gz
-rw-r----- 1 root root 411789 6月 28 21:23 /usr/local/src/tomcat-native.tar.gz
[root@master ~]# cd /usr/local/src/
[root@master src]# tar xzvf tomcat-native.tar.gz
# 解决源码包依赖
# 源码包安装tomcat-native
[root@master ~]# yum -y install apr-devel gcc gcc-c++ openssl-devel openssl
[root@master ~]# cd /usr/local/src/tomcat-native-1.2.18-src/native/
[root@master native]# ./configure --with-apr=/usr/ --with-java-home=/usr/local/jdk1.8.0_191 --with-ssl
[root@master native]# make && make install
----------------------------------------------------------------------
Libraries have been installed in:
/usr/local/apr/lib
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
# 报错缺少/etc/ld.so.conf,编辑并添加以下内容
[root@master native]# vim /etc/ld.so.conf
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
# 变量文件立即生效
[root@master native]# source /etc/profile.d/jdk8.sh
tomcat 有三种运行模式,分别是:bio、nio、apr
①bio 是阻塞式I/O操作,使用的是传统的 java I/O 处理方式,对于每一个请求都要创建一个线程来进行处理,所以开销较大不适合处理高并发的场景。
②nio 是基于 java 中非阻塞 I/O 操作的 API 实现,比传统的 i/o 处理方式有更高的并发运行性能。
③apr 是从操作系统级别解决异步I/O问题,大幅度提高服务器的并发处理性能,也是 Tomcat 生产环境运行的首选方式。
# 指定tomcat以apr运行
# 主配置文件的103行有apr协议的全称,可用来修改69行
[root@master ~]# vim /usr/local/tomcat/conf/server.xml
69 protocol="org.apache.coyote.http11.Http11AprProtocol"
# 编辑catalina.sh,引用apr
[root@master ~]# vim /usr/local/tomcat/bin/catalina.sh
254 JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"
[root@master ~]# service tomcat restart
# 查看catalina.out日志文件,可以看到tomcat已经以apr正常运行了。
[root@master ~]# tail -n 3 /usr/local/tomcat/logs/catalina.out
28-Jun-2020 23:35:56.529 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"]
28-Jun-2020 23:35:56.539 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
28-Jun-2020 23:35:56.544 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 515 ms
[root@master ~]# cat /usr/local/tomcat/logs/catalina.out | grep Native
7. 使用jsp连接mysql
# 创建tomcat数据库,tomcat用户,并授予tomcat操作tomcat数据库中所有对象的权限
[root@master ~]# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 33
Server version: 5.7.19 Source distribution
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database tomcat;
Query OK, 1 row affected (0.00 sec)
mysql> use tomcat;
Database changed
mysql> grant all on tomcat.* to tomcat@localhost identified by "tomcat";
Query OK, 0 rows affected, 1 warning (0.01 sec)
# 创建测试数据
mysql> create table test(name varchar(50),sex varchar(30));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into test values('abong','man'),('yuan','woman');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> exit
Bye
# 登录tomcat用户测试,可以看到登录正常。
[root@master ~]# mysql -utomcat -ptomcat
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 34
Server version: 5.7.19 Source distribution
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
# 解压mysql-connector-java
[root@master ~]# cd /usr/local/src/
[root@master src]# tar xzvf mysql-connector-java-8.0.13.tar.gz
# 复制解压目录下的jar文件到tomcat的lib目录下
[root@master src]# cp mysql-connector-java-8.0.13/mysql-connector-java-8.0.13.jar /usr/local/tomcat/lib/
[root@master src]# service tomcat restart
# 建立jsp测试页面
[root@master ~]# vim /usr/local/tomcat/webapps/ROOT/mysql.jsp
<%@ page contentType="text/html;charset=utf-8"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%
Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
String
url ="jdbc:mysql://localhost/tomcat?user=tomcat&password=tomcat&useUnicode=true&characterEncoding=utf-8";
Connection conn= DriverManager.getConnection(url);
Statement
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()){%>
name:<%=rs.getString(1)%>
sex:<%=rs.getString(2)%><br><br>
<%}%>
<%out.print("Congratulations!!! JSP connect MYSQL IS OK!!");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
访问http://192.168.8.125:8080/mysql.jsp 验证结果是否正常。
8. 总结
1、部署jdk和tomcat,然后搭建虚拟主机,验证tomcat是否支持html静态页面。
2、使用tomcat-native技术,使得tomcat的运行模式为APR,tomcat可以利用apache的apr接口,使用操作系统的部分本地操作,提升静态页面处理能力,从而提升性能。
APR 是从操作系统级别解决异步I/O问题,大幅度提高服务器的并发处理性能,是 Tomcat 生产环境运行的首选方式。
3、通过mysql-connector-java的jar,使得jsp网页可以插入java代码块,可以连接mysql数据库,获取数据库中的数据,使得jsp成为动态网页。
4、通过以上技术,可以使用tomcat很好的处理静态页面,也可以使用JSP动态页面。