/usr/java/packages/lib/amd64_Tomcat里面的APR配置问题研究

这里,之所以研究这个问题,是因为我们的生产系统Linux环境下的tomcat日志里面,启动信息的地方有这么一个WARNING。

INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib

这个虽然对应有没有什么影响,但是看到这个信息,总是有些不愉快。

为了将这个警告或者提醒信息去除,其实也很简单,只需要做几步配置就好:

1. 安装apr

2. 安装apr-util

3. 安装tomcat-native

首先,说下,我的环境信息:

1. Linux

[root@localhost bin]# uname -a

Linux localhost.localdomain3.10.0-229.el7.x86_64 #1 SMP Thu Jan 29 18:37:38 EST 2015 x86_64 x86_64 x86_64 GNU/Linux

2. Tomcat

[root@localhost bin]# pwd/opt/shihuc/apache-tomcat-7.0.64/bin

[root@localhost bin]# ./version.sh

Using CATALINA_BASE:/opt/shihuc/apache-tomcat-7.0.64Using CATALINA_HOME:/opt/shihuc/apache-tomcat-7.0.64Using CATALINA_TMPDIR:/opt/shihuc/apache-tomcat-7.0.64/temp

Using JRE_HOME:/usr/java/jdk1.8.0_144

Using CLASSPATH:/opt/shihuc/apache-tomcat-7.0.64/bin/bootstrap.jar:/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-juli.jar

Server version: Apache Tomcat/7.0.64Server built: Aug19 2015 17:18:06UTC

Server number:7.0.64.0OS Name: Linux

OS Version:3.10.0-229.el7.x86_64

Architecture: amd64

JVM Version:1.8.0_144-b01

JVM Vendor: Oracle Corporation

接下来,进行三步走策略,完成APR的环境配置。

1. 安装apr

下载后,进行解压,并进入到根目录进行configure,make以及make install

[root@localhost apr-1.6.3]# pwd/opt/shihuc/apr-1.6.3

这个操作,比较简单,不做过多描述。

2.安装apr-util

下载后,进行解压,并进入到根目录进行configure,make以及make install

[root@localhost apr-util-1.6.1]# pwd/opt/shihuc/apr-util-1.6.1[root@localhost apr-util-1.6.1]# ./configure

checking build system type... x86_64-pc-linux-gnu

checking host system type... x86_64-pc-linux-gnu

checking target system type... x86_64-pc-linux-gnu

checkingfor a BSD-compatible install... /usr/bin/install -c

checkingfor working mkdir -p... yes

APR-util Version: 1.6.1checkingfor chosen layout... apr-util

checkingforgcc... gcc

checking whether the C compiler works... yes

checkingfor C compiler default output file name... a.outcheckingforsuffix of executables...

checking whether we are cross compiling... no

checkingfor suffix of objectfiles... o

checking whether we areusingthe GNU C compiler... yes

checking whether gcc accepts-g... yes

checkingforgcc option to accept ISO C89... none needed

Applying apr-util hints file rules for x86_64-pc-linux-gnu

checkingforAPR... no

configure: error: APR could not be located. Please use the--with-apr option.

注意,这里报错了,并且提醒了,要加--with-apr选项进行配置。意思是说,告知apr-util配置的时候apr的路径在什么地方。

[root@localhost apr-util-1.6.1]# ./configure --with-apr=/usr/local/apr

checking build system type... x86_64-pc-linux-gnu

checking host system type... x86_64-pc-linux-gnu

checking target system type... x86_64-pc-linux-gnu

checkingfor a BSD-compatible install... /usr/bin/install -c

checkingfor working mkdir -p... yes

APR-util Version: 1.6.1checkingfor chosen layout... apr-util

checkingforgcc... gcc

checking whether the C compiler works... yes

checkingfor C compiler default output file name... a.outcheckingforsuffix of executables...

checking whether we are cross compiling... no

checkingfor suffix of objectfiles... o

checking whether we areusingthe GNU C compiler... yes

checking whether gcc accepts-g... yes

checkingforgcc option to accept ISO C89... none needed

Applying apr-util hints file rules for x86_64-pc-linux-gnu

checkingforAPR... yes

setting CPP to"gcc -E"adding"-pthread"to CFLAGS

setting CPPFLAGS to"-DLINUX -D_REENTRANT -D_GNU_SOURCE"checking how to run the C preprocessor... gcc-E

checkingfor grep that handles long lines and -e... /usr/bin/grep

checkingfor egrep... /usr/bin/grep -E

checkingforANSI C header files... yes

checkingfor sys/types.h... yes

checkingfor sys/stat.h... yes

checkingforstdlib.h... yes

checkingfor string.h... yes

checkingformemory.h... yes

checkingforstrings.h... yes

checkingforinttypes.h... yes

checkingforstdint.h... yes

checkingforunistd.h... yes

checkingforldap support...

checkingfor default DBM... sdbm (default)

checkingfor pg_config... /usr/bin/pg_config

adding"-I/usr/include"to CPPFLAGS

setting LDFLAGS to"-L/usr/lib64"checking libpq-fe.h usability... no

checking libpq-fe.h presence... no

checkingfor libpq-fe.h... no

checking postgresql/libpq-fe.h usability... no

checking postgresql/libpq-fe.h presence... no

checkingfor postgresql/libpq-fe.h... no

checking sqlite3.h usability... no

checking sqlite3.h presence... no

checkingforsqlite3.h... no

checking sqlite.h usability... no

checking sqlite.h presence... no

checkingforsqlite.h... no

checkingfor odbc_config... /home/anaconda2/bin/odbc_config

adding"-I/home/anaconda2/include"to CPPFLAGS

setting LDFLAGS to"-L/home/anaconda2/lib"setting LIBS to"-L/home/anaconda2/lib -lodbc"checking sql.h usability... yes

checking sql.h presence... yes

checkingforsql.h... yes

checkingfor SQLAllocHandle in -lodbc... yes

adding"-I/home/anaconda2/include"to APRUTIL_PRIV_INCLUDES

setting LDADD_dbd_odbc to"-L/home/anaconda2/lib -lodbc -L/home/anaconda2/lib -lodbc"checking Expat1.95.x... yes

setting APRUTIL_EXPORT_LIBS to"-lexpat"setting APRUTIL_LIBS to"-lexpat"checking iconv.h usability... yes

checking iconv.h presence... yes

checkingforiconv.h... yes

checkingfor type of inbuf parameter to iconv... char **checkingforiconv.h... (cached) yes

checking langinfo.h usability... yes

checking langinfo.h presence... yes

checkingforlanginfo.h... yes

checkingfornl_langinfo... yes

checkingfor CODESET inlanginfo.h... yes

checking whether APR has DSO support... yes

checkingfor library containing crypt... -lcrypt

checkingif system crypt() function isthreadsafe... no

checkingforcrypt_r... yes

checking style of crypt_r... struct_crypt_data

checking whether the compiler handles weak symbols... yes

checkingformemset_s support... no

checkingforexplicit_bzero support... no

adding"/usr/local/apr/lib/libapr-1.la"to APRUTIL_LIBS

adding"-lrt"to APRUTIL_LIBS

adding"-lcrypt"to APRUTIL_LIBS

adding"-lpthread"to APRUTIL_LIBS

adding"-ldl"to APRUTIL_LIBS

configure: creating ./config.status

config.status: creating Makefile

config.status: creating export_vars.sh

config.status: creating build/pkg/pkginfo

config.status: creating apr-util.pc

config.status: creating apu-1-config

config.status: creating include/private/apu_select_dbm.h

config.status: creating include/apr_ldap.h

config.status: creating include/apu.h

config.status: creating include/apu_want.h

config.status: creating test/Makefile

config.status: creating include/private/apu_config.h

config.status: executingdefaultcommands

[root@localhost apr-util-1.6.1]#

这次OK了,没有再报错。

3. 安装tomcat-native

注意,我们的tomcat是tomcat7了,这个版本以及之后的版本,是不需要单独下载tomcat-native的包的,在tomcat的bin目录下,已经带上了,我们只需要在这个目录下进行解压和安装即可。

[root@localhost apache-tomcat-7.0.64]# cd bin/[root@localhost bin]# ll

总用量788

-rw-r--r--. 1 root root 28064 8月 20 2015bootstrap.jar-rw-r--r--. 1 root root 13007 8月 20 2015catalina.bat-rwxr-xr-x. 1 root root 20909 8月 20 2015catalina.sh-rw-r--r--. 1 root root 1647 8月 20 2015 catalina-tasks.xml-rw-r--r--. 1 root root 24283 8月 20 2015 commons-daemon.jar-rw-r--r--. 1 root root 204944 8月 20 2015 commons-daemon-native.tar.gz-rw-r--r--. 1 root root 2040 8月 20 2015configtest.bat-rwxr-xr-x. 1 root root 1922 8月 20 2015configtest.sh-rwxr-xr-x. 1 root root 7888 8月 20 2015daemon.sh-rw-r--r--. 1 root root 2091 8月 20 2015digest.bat-rwxr-xr-x. 1 root root 1965 8月 20 2015digest.sh-rw-r--r--. 1 root root 3430 8月 20 2015setclasspath.bat-rwxr-xr-x. 1 root root 3547 8月 20 2015setclasspath.sh-rw-r--r--. 1 root root 2020 8月 20 2015shutdown.bat-rwxr-xr-x. 1 root root 1902 8月 20 2015shutdown.sh-rw-r--r--. 1 root root 2022 8月 20 2015startup.bat-rwxr-xr-x. 1 root root 1904 8月 20 2015startup.sh-rw-r--r--. 1 root root 38217 8月 20 2015 tomcat-juli.jar-rw-r--r--. 1 root root 388787 8月 20 2015 tomcat-native.tar.gz-rw-r--r--. 1 root root 4021 8月 20 2015 tool-wrapper.bat-rwxr-xr-x. 1 root root 5024 8月 20 2015 tool-wrapper.sh-rw-r--r--. 1 root root 2026 8月 20 2015version.bat-rwxr-xr-x. 1 root root 1908 8月 20 2015 version.sh

将这个tomcat-native.tar.gz解压并进入到native目录下,进行configure,make以及make install。因为,我们的tomcat配置中,涉及apr的地方,启用了SSL,所以,我们的环境里面,必须要有SSL的支持能力。

下面的省略了。。。

所以SSL的环境必须要有,检查后发现,我的Linux系统,因为之前其他项目的需要,已经安装了openssl了,通过rpm查看。

[root@localhost native]# rpm -qa|grep openssl

openssl-devel-1.0.2k-8.el7.x86_64

openssl098e-0.9.8e-29.el7_0.2.x86_64

openssl-1.0.2k-8.el7.x86_64

openssl-libs-1.0.2k-8.el7.x86_64

[root@localhost native]#

系统当前已经安装有openssl了,版本为openssl-devel-1.0.2k-8.el7.x86_64。

或者通过这种方式,也可以查看是否安装openssl,直接执行openssl,看是否存在。那么openssl的安装路径是啥呢?

[root@localhost native]# which openssl/home/anaconda2/bin/openssl

下面检查tomcat-native的JDK环境:

[root@localhost native]# echo $JAVA_HOME/usr/java/jdk1.8.0_144

tomcat-native的依赖都有了,接下来,就是直接安装操作了。

[root@localhost native]# ./configure --with-apr=/usr/local/apr --with-ssl=/home/anaconda2/bin --with-java-home=/usr/java/jdk1.8.0_144

checking build system type... x86_64-unknown-linux-gnu

checking host system type... x86_64-unknown-linux-gnu

checking target system type... x86_64-unknown-linux-gnu

checkingfor a BSD-compatible install... /usr/bin/install -c

checkingfor working mkdir -p... yes

Tomcat Native Version:1.1.33checkingforchosen layout... tcnative

checkingforAPR... yes

setting CC to"gcc"setting CPP to"gcc -E"checkingfor JDK location (please wait)... /usr/java/jdk1.8.0_144

checking Java platform... checking Java platform...

checkingforsablevm... NONE

adding"-I/usr/java/jdk1.8.0_144/include"to TCNATIVE_PRIV_INCLUDES

checking os_type directory... linux

adding"-I/usr/java/jdk1.8.0_144/include/linux"to TCNATIVE_PRIV_INCLUDES

checkingforgcc... gcc

checking whether the C compiler works... yes

checkingfor C compiler default output file name... a.outcheckingforsuffix of executables...

checking whether we are cross compiling... no

checkingfor suffix of objectfiles... o

checking whether we areusingthe GNU C compiler... yes

checking whether gcc accepts-g... yes

checkingforgcc option to accept ISO C89... none needed

checkingfor OpenSSL library... using openssl from /home/anaconda2/bin/lib and /home/anaconda2/bin/include

checking OpenSSL library version... ok

checkingforOpenSSL DSA support... no

adding"-I/home/anaconda2/bin/include"to TCNATIVE_PRIV_INCLUDES

setting TCNATIVE_LDFLAGS to"-L/home/anaconda2/bin/lib -Wl,-rpath,/home/anaconda2/bin/lib -lssl -lcrypto"adding"-DHAVE_OPENSSL"to CFLAGS

setting TCNATIVE_LIBS to""setting TCNATIVE_LIBS to"/usr/local/apr/lib/libapr-1.la -lrt -lcrypt -lpthread -ldl"configure: creating ./config.status

config.status: creating tcnative.pc

config.status: creating Makefile

config.status: executingdefault commands

接下来,就执行make以及make install了。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

[root@localhost native]# make &&make install

make[1]: 进入目录“/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native”/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/address.lo -c src/address.c && touch src/address.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/bb.lo -c src/bb.c && touch src/bb.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/dir.lo -c src/dir.c && touch src/dir.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/error.lo -c src/error.c && touch src/error.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/file.lo -c src/file.c && touch src/file.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/info.lo -c src/info.c && touch src/info.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/jnilib.lo -c src/jnilib.c && touch src/jnilib.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/lock.lo -c src/lock.c && touch src/lock.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/misc.lo -c src/misc.c && touch src/misc.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/mmap.lo -c src/mmap.c && touch src/mmap.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/multicast.lo -c src/multicast.c && touch src/multicast.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/network.lo -c src/network.c && touch src/network.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/os.lo -c src/os.c && touch src/os.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/poll.lo -c src/poll.c && touch src/poll.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/pool.lo -c src/pool.c && touch src/pool.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/proc.lo -c src/proc.c && touch src/proc.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/shm.lo -c src/shm.c && touch src/shm.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/ssl.lo -c src/ssl.c && touch src/ssl.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/sslcontext.lo -c src/sslcontext.c && touch src/sslcontext.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/sslinfo.lo -c src/sslinfo.c && touch src/sslinfo.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/sslnetwork.lo -c src/sslnetwork.c && touch src/sslnetwork.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/sslutils.lo -c src/sslutils.c && touch src/sslutils.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/stdlib.lo -c src/stdlib.c && touch src/stdlib.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/thread.lo -c src/thread.c && touch src/thread.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o src/user.lo -c src/user.c && touch src/user.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o os/unix/system.lo -c os/unix/system.c && touch os/unix/system.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -o os/unix/uxpipe.lo -c os/unix/uxpipe.c && touch os/unix/uxpipe.lo/bin/sh /usr/local/apr/build-1/libtool --silent --mode=link gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -DHAVE_OPENSSL -I/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native/include -I/usr/java/jdk1.8.0_144/include -I/usr/java/jdk1.8.0_144/include/linux -I/home/anaconda2/bin/include -I/usr/local/apr/include/apr-1 -version-info 1:33:1 -o libtcnative-1.la -rpath /usr/local/apr/lib src/address.lo src/bb.lo src/dir.lo src/error.lo src/file.lo src/info.lo src/jnilib.lo src/lock.lo src/misc.lo src/mmap.lo src/multicast.lo src/network.lo src/os.lo src/poll.lo src/pool.lo src/proc.lo src/shm.lo src/ssl.lo src/sslcontext.lo src/sslinfo.lo src/sslnetwork.lo src/sslutils.lo src/stdlib.lo src/thread.lo src/user.lo os/unix/system.lo os/unix/uxpipe.lo -L/home/anaconda2/bin/lib -Wl,-rpath,/home/anaconda2/bin/lib -lssl -lcrypto /usr/local/apr/lib/libapr-1.la -lrt -lcrypt -lpthread -ldl

make[1]: 离开目录“/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native”

make[1]: 进入目录“/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native”

make[1]: 对“local-all”无需做任何事。

make[1]: 离开目录“/opt/shihuc/apache-tomcat-7.0.64/bin/tomcat-native-1.1.33-src/jni/native”/usr/local/apr/build-1/mkdir.sh /usr/local/apr/include/apr-1 /usr/local/apr/lib/pkgconfig \/usr/local/apr/lib /usr/local/apr/bin/usr/bin/install -c -m 644 tcnative.pc /usr/local/apr/lib/pkgconfig/tcnative-1.pc

list=''; for i in $list; do\

( cd $i ; make DESTDIR=install ); \

done/bin/sh /usr/local/apr/build-1/libtool --mode=install /usr/bin/install -c -m 755 libtcnative-1.la /usr/local/apr/lib

libtool: install:/usr/bin/install -c -m 755 .libs/libtcnative-1.so.0.1.33 /usr/local/apr/lib/libtcnative-1.so.0.1.33libtool: install: (cd/usr/local/apr/lib && { ln -s -f libtcnative-1.so.0.1.33 libtcnative-1.so.0 || { rm -f libtcnative-1.so.0 && ln -s libtcnative-1.so.0.1.33 libtcnative-1.so.0; }; })

libtool: install: (cd/usr/local/apr/lib && { ln -s -f libtcnative-1.so.0.1.33 libtcnative-1.so || { rm -f libtcnative-1.so && ln -s libtcnative-1.so.0.1.33 libtcnative-1.so; }; })

libtool: install:/usr/bin/install -c -m 755 .libs/libtcnative-1.lai /usr/local/apr/lib/libtcnative-1.la

libtool: install:/usr/bin/install -c -m 755 .libs/libtcnative-1.a /usr/local/apr/lib/libtcnative-1.a

libtool: install: chmod644 /usr/local/apr/lib/libtcnative-1.a

libtool: install: ranlib/usr/local/apr/lib/libtcnative-1.a

libtool: finish: PATH="/usr/local/cuda-7.5/bin:/home/mongo/mongodb-linux-x86_64-rhel70-3.4.4/bin:/usr/local/cuda-7.5/bin:/home/mongo/mongodb-linux-x86_64-rhel70-3.4.4/bin:/usr/local/cuda-7.5/bin:/home/mongo/mongodb-linux-x86_64-rhel70-3.4.4/bin:/usr/local/cuda-7.5/bin:/home/mongo/mongodb-linux-x86_64-rhel70-3.4.4/bin:/usr/local/cuda-7.5/bin:/home/mongo/mongodb-linux-x86_64-rhel70-3.4.4/bin:/home/cuda-8.0/bin:/home/anaconda2/bin:/usr/local/cuda-7.5/bin:/home/mongo/mongodb-linux-x86_64-rhel70-3.4.4/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/apache-maven-3.3.9/bin:/home/mwwPro/tools/R2017a/bin/:/root/bin:/opt/shihuc/QANLP/idea-IC-172.4574.11/bin:/opt/apache-maven-3.3.9/bin:/opt/apache-maven-3.3.9/bin:/opt/apache-maven-3.3.9/bin:/opt/apache-maven-3.3.9/bin:/opt/apache-maven-3.3.9/bin:/sbin" ldconfig -n /usr/local/apr/lib----------------------------------------------------------------------Libraries have been installedin:/usr/local/apr/lib

If you ever happen to want to link against installed librariesina given directory, LIBDIR, you must either use libtool, and

specify the full pathname of the library, or use the'-LLIBDIR'flag during linking anddoat 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 librariesformore information, suchas the ld(1) and ld.so(8) manual pages.----------------------------------------------------------------------[root@localhost native]#

View Code

所有的安装操作都OK了,接下来,还有一点,注意,不要遗忘了配置环境变量,就是APR的环境变量。

修改/etc/profile,然后做下面的红色内容的新增,写上apr的安装路径:

export LD_LIBRARY_PATH=/usr/local/apr/lib:/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH

然后,source一下/etc/profile.启用这个新的环境配置。

所有的操作都结束了,最后就是验证是否APR生效。很简单,只需要将tomcat重启一下,查看catalina.out的日志,看看是否存在开篇提到的APR的那个提醒信息即可。我的环境配置,安装上述步骤,这个APR的提醒信息已经解除,的确不存在了。

下面对比一下,没有做上述APR配置和做了这个配置的启动日志有什么不同:

没有配置APR的日志:

五月 02, 2018 2:38:11下午 org.apache.catalina.startup.SetAllPropertiesRule begin

警告: [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'maxSpareThreads' to '200'did not find a matching property.

五月02, 2018 2:38:11下午 org.apache.catalina.startup.SetAllPropertiesRule begin

警告: [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'maxProcessors' to '1000'did not find a matching property.

五月02, 2018 2:38:11下午 org.apache.catalina.startup.SetAllPropertiesRule begin

警告: [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'minProcessors' to '5'did not find a matching property.

五月02, 2018 2:38:11下午 org.apache.catalina.startup.SetAllPropertiesRule begin

警告: [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'useURIValidationHack' to 'false'did not find a matching property.

五月02, 2018 2:38:11下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Server version: Apache Tomcat/7.0.64五月02, 2018 2:38:11下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Server built: Aug19 2015 17:18:06UTC

五月02, 2018 2:38:11下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Server number:7.0.64.0五月02, 2018 2:38:11下午 org.apache.catalina.startup.VersionLoggerListener log

信息: OS Name: Linux

五月02, 2018 2:38:11下午 org.apache.catalina.startup.VersionLoggerListener log

信息: OS Version:3.10.0-229.el7.x86_64

五月02, 2018 2:38:11下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Architecture: amd64

五月02, 2018 2:38:11下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Java Home:/usr/java/jdk1.8.0_144/jre

五月02, 2018 2:38:11下午 org.apache.catalina.startup.VersionLoggerListener log

信息: JVM Version:1.8.0_144-b01

五月02, 2018 2:38:11下午 org.apache.catalina.startup.VersionLoggerListener log

信息: JVM Vendor: Oracle Corporation

五月02, 2018 2:38:11下午 org.apache.catalina.startup.VersionLoggerListener log

信息: CATALINA_BASE:/opt/shihuc/apache-tomcat-7.0.64五月02, 2018 2:38:11下午 org.apache.catalina.startup.VersionLoggerListener log

信息: CATALINA_HOME:/opt/shihuc/apache-tomcat-7.0.64五月02, 2018 2:38:11下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument:-Djava.util.logging.config.file=/opt/shihuc/apache-tomcat-7.0.64/conf/logging.properties

五月02, 2018 2:38:11下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument:-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

五月02, 2018 2:38:11下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument:-Djava.endorsed.dirs=/opt/shihuc/apache-tomcat-7.0.64/endorsed

五月02, 2018 2:38:11下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument:-Dcatalina.base=/opt/shihuc/apache-tomcat-7.0.64五月02, 2018 2:38:11下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument:-Dcatalina.home=/opt/shihuc/apache-tomcat-7.0.64五月02, 2018 2:38:11下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument:-Djava.io.tmpdir=/opt/shihuc/apache-tomcat-7.0.64/temp

五月02, 2018 2:38:11下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent

信息: The APR based Apache Tomcat Native library which allows optimal performancein production environments was not found on the java.library.path: /home/cuda-8.0/lib64:/home/cuda-8.0/extras/CUPTI/lib64:/home/cudnn/lib64:/usr/local/cuda-7.5/lib64::/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib

五月02, 2018 2:38:11下午 org.apache.coyote.AbstractProtocol init

信息: Initializing ProtocolHandler ["http-bio-8080"]

五月02, 2018 2:38:11下午 org.apache.coyote.AbstractProtocol init

信息: Initializing ProtocolHandler ["ajp-bio-8009"]

五月02, 2018 2:38:11下午 org.apache.catalina.startup.Catalina load

信息: Initialization processedin 471ms

五月02, 2018 2:38:11下午 org.apache.catalina.core.StandardService startInternal

信息: Starting service Catalina

五月02, 2018 2:38:11下午 org.apache.catalina.core.StandardEngine startInternal

信息: Starting Servlet Engine: Apache Tomcat/7.0.64

下面是做了这个APR配置后的启动日志:

五月 02, 2018 5:09:09下午 org.apache.catalina.startup.SetAllPropertiesRule begin

警告: [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'maxSpareThreads' to '200'did not find a matching property.

五月02, 2018 5:09:09下午 org.apache.catalina.startup.SetAllPropertiesRule begin

警告: [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'maxProcessors' to '1000'did not find a matching property.

五月02, 2018 5:09:09下午 org.apache.catalina.startup.SetAllPropertiesRule begin

警告: [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'minProcessors' to '5'did not find a matching property.

五月02, 2018 5:09:09下午 org.apache.catalina.startup.SetAllPropertiesRule begin

警告: [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'useURIValidationHack' to 'false'did not find a matching property.

五月02, 2018 5:09:09下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Server version: Apache Tomcat/7.0.64五月02, 2018 5:09:09下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Server built: Aug19 2015 17:18:06UTC

五月02, 2018 5:09:09下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Server number:7.0.64.0五月02, 2018 5:09:09下午 org.apache.catalina.startup.VersionLoggerListener log

信息: OS Name: Linux

五月02, 2018 5:09:09下午 org.apache.catalina.startup.VersionLoggerListener log

信息: OS Version:3.10.0-229.el7.x86_64

五月02, 2018 5:09:09下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Architecture: amd64

五月02, 2018 5:09:09下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Java Home:/usr/java/jdk1.8.0_144/jre

五月02, 2018 5:09:09下午 org.apache.catalina.startup.VersionLoggerListener log

信息: JVM Version:1.8.0_144-b01

五月02, 2018 5:09:09下午 org.apache.catalina.startup.VersionLoggerListener log

信息: JVM Vendor: Oracle Corporation

五月02, 2018 5:09:09下午 org.apache.catalina.startup.VersionLoggerListener log

信息: CATALINA_BASE:/opt/shihuc/apache-tomcat-7.0.64五月02, 2018 5:09:09下午 org.apache.catalina.startup.VersionLoggerListener log

信息: CATALINA_HOME:/opt/shihuc/apache-tomcat-7.0.64五月02, 2018 5:09:09下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument:-Djava.util.logging.config.file=/opt/shihuc/apache-tomcat-7.0.64/conf/logging.properties

五月02, 2018 5:09:09下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument:-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

五月02, 2018 5:09:09下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument:-Djava.endorsed.dirs=/opt/shihuc/apache-tomcat-7.0.64/endorsed

五月02, 2018 5:09:09下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument:-Dcatalina.base=/opt/shihuc/apache-tomcat-7.0.64五月02, 2018 5:09:09下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument:-Dcatalina.home=/opt/shihuc/apache-tomcat-7.0.64五月02, 2018 5:09:09下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument:-Djava.io.tmpdir=/opt/shihuc/apache-tomcat-7.0.64/temp

五月02, 2018 5:09:09下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent

信息: Loaded APR based Apache Tomcat Native library1.1.33 using APR version 1.6.3.

五月 02, 2018 5:09:09 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent

信息: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].

五月 02, 2018 5:09:09 下午 org.apache.catalina.core.AprLifecycleListener initializeSSL

信息: OpenSSL successfully initialized (OpenSSL 1.0.2k 26 Jan 2017)

五月02, 2018 5:09:09下午 org.apache.coyote.AbstractProtocol init

信息: Initializing ProtocolHandler ["http-apr-8080"]

五月02, 2018 5:09:09下午 org.apache.coyote.AbstractProtocol init

信息: Initializing ProtocolHandler ["ajp-apr-8009"]

五月02, 2018 5:09:09下午 org.apache.catalina.startup.Catalina load

信息: Initialization processedin 464ms

五月02, 2018 5:09:09下午 org.apache.catalina.core.StandardService startInternal

信息: Starting service Catalina

五月02, 2018 5:09:09下午 org.apache.catalina.core.StandardEngine startInternal

信息: Starting Servlet Engine: Apache Tomcat/7.0.64

总结:

1. APR这个就算没有配置,也不影响tomcat的正常使用,无非就是性能稍微差点。

2. 在tomcat-native的configure操作中,若不正确配置--with-ssl这个选项的话,其他的就算都配置好了,依然会出现开篇提到的APR提醒信息。也就是说APR功能不启用。

3.关于tomcat启动日志中,下面的这些警告信息,我没有找到最终的解释,但是个人基于http://tomcat.apache.org/tomcat-7.0-doc/config/http.html#Standard_Implementation的介绍,认为是这些警告的信息涉及到的配置在tomcat7里面已经过期了,也就是说找不到相关的配置,即使有这个警告,也没什么问题。若有高人对这个有确切的了解,还请分享下。

五月 02, 2018 5:09:09下午 org.apache.catalina.startup.SetAllPropertiesRule begin

警告: [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'maxSpareThreads' to '200'did not find a matching property.

五月02, 2018 5:09:09下午 org.apache.catalina.startup.SetAllPropertiesRule begin

警告: [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'maxProcessors' to '1000'did not find a matching property.

五月02, 2018 5:09:09下午 org.apache.catalina.startup.SetAllPropertiesRule begin

警告: [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'minProcessors' to '5'did not find a matching property.

五月02, 2018 5:09:09下午 org.apache.catalina.startup.SetAllPropertiesRule begin

警告: [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'useURIValidationHack' to 'false' did not find a matching property.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值