linux Nginx+Tomcat负载均衡、动静分离

linux Nginx+Tomcat负载均衡、动静分离

  • 1、Tomcat的基本介绍
    • 1.1Tomcat是什么?
    • 1.2Tomcat的构成组件
    • 1.3Tomcat的核心功能
    • 1.4Tomcat请求过程
  • 2、Tomcat部署
    • 2.1安装tomcat
    • 2.2优化tomcat启动速度
    • 2.4主要目录说明
  • 3、Tomcat 虚拟主机配置
    • 3.1创建fsj和mws项目目录和文件
    • 3.2修改 Tomcat 主配置文件 server.xml
    • 3.3HTTP 请求过程
  • 4、Tomcat 优化
    • 4.1 Tomcat 配置文件参数优化
  • 5、Tomcat多实例部署
  • 6、Nginx+Tomcat负载均衡、动静分离
    • 6.1部署Nginx负载均衡器
    • 6.2 部署2台Tomcat 应用服务器
    • 6.3动静分离配置
      • 6.3.1 Tomcat1 server 配置
      • 6.3.2 Tomcat2 server 配置
      • 6.3.3 Nginx server 配置
    • 6.4测试

1、Tomcat的基本介绍

1.1Tomcat是什么?

tomcat 一款 java 开发的开源免费的 Web 应用服务程序
作用:
(1)可以作为 Web 应用服务器,处理静态 Web 页面, 如 html 页面,但性能一般
(2)还可以作为 Servlet/JSP 容器,处理 java 语言开发的 jsp 动态页面应用程序,这也是 tomcat 主要的应用场景

1.2Tomcat的构成组件

核心组件

  • web容器:完成web服务器的功能
  • servlet容器:名字为 catalina,用于处理 Servlet 代码
  • JSP容器:用于将 JSP 动态网页翻译成 Servlet 代码
    tomcat’功能组件结构
  • connector连接器:暴露监听端口,接收客户端发来的请求和返回响应消息给客户端
  • container容器:负责处理用户请求的业务逻辑。由4个子容器组成(engine、host、context、wrapper),子容器之间是父子关系:
  • engine:引擎,管理多个虚拟主机,一个container只有一个engine
  • host:代表一个虚拟主机
  • context:管理web应用的路径
  • wrapper:servlet封装器,负责处理业务逻辑

1.3Tomcat的核心功能

Tomcat 的核心功能有两个,分别是负责接收和反馈外部请求的连接器 Connector,和负责处理请求的容器 Container。
其中连接器和容器相辅相成,一起构成了基本的 web 服务 Service。每个 Tomcat 服务器可以管理多个 Service。

Connector:负责对外接收和响应请求。它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。
Container:负责对内处理业务逻辑。其内部由 Engine、Host、Context和Wrapper 四个容器组成,用于管理和调用
Servlet 相关逻辑。 Service:对外提供的 Web 服务

1.4Tomcat请求过程

(1)用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得; (2)Connector
把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应; (3)请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet 中执行对应的业务逻辑、数据存储等。 (4)执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给Connector,并通过 Connector 返回给客户端。

2、Tomcat部署

2.1安装tomcat

systemctl disable firewalld --now  
setenforce 0  //关闭防火墙

linux Nginx+Tomcat负载均衡、动静分离_第1张图片

java -version //查看一下版本

linux Nginx+Tomcat负载均衡、动静分离_第2张图片

//将源代码包置于/opt下 
 jdk-8u201-linux-x64.rpm

linux Nginx+Tomcat负载均衡、动静分离_第3张图片

rpm -ivh jdk-8u201-linux-x64.rpm
//安装jdk

linux Nginx+Tomcat负载均衡、动静分离_第4张图片

java -version //再次查看版本

linux Nginx+Tomcat负载均衡、动静分离_第5张图片

此时版本并没有改变,说明安装的包并没有生效,需要配置环境变量才可以使其生效。

rpm -qpl jdk-8u201-linux-x64.rpm
//根据软件包名查找安装路径

在这里插入图片描述
linux Nginx+Tomcat负载均衡、动静分离_第6张图片

cd /usr/java/jdk1.8.0_201-amd64
//进入到刚才查询的目录中

linux Nginx+Tomcat负载均衡、动静分离_第7张图片

ls bin  //查看一下bin包的内容

linux Nginx+Tomcat负载均衡、动静分离_第8张图片

/usr/java/jdk1.8.0_201-amd64/bin包主要放一些jdk运行的一些相关命令和工具

cd /usr/java/jdk1.8.0_201-amd64/jre/bin

linux Nginx+Tomcat负载均衡、动静分离_第9张图片

jre包下可以看到有一个lib目录,进入到此目录可以看到有很多的jar包,这jar包主要是一些依赖包和依赖配置
linux Nginx+Tomcat负载均衡、动静分离_第10张图片

接下来要将/usr/java/jdk1.8.0_201-amd64/下的 bin目录和cd /usr/java/jdk1.8.0_201-amd64/jre 下的bin目录都放入的环境变量中,让系统可以直接识别

vim /etc/profile 
//系统环境变量配置文件,我们可以在这添加相关的设置

linux Nginx+Tomcat负载均衡、动静分离_第11张图片

也可以在/etc/profile.d/下添加一个以.sh结尾的配置文件

linux Nginx+Tomcat负载均衡、动静分离_第12张图片

cd /etc/profile.d/  //切换到子配置文件所在的目录

linux Nginx+Tomcat负载均衡、动静分离_第13张图片

vim java.sh
//创建一个java.sh文件
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

linux Nginx+Tomcat负载均衡、动静分离_第14张图片
注意:

最左原则:linux查找可执行文件是根据PATH变量从左往右查找,找到即停止。 #所以需要将安装版本的路径放在$PATH前面

CLASSPATH 是一个环境变量,用于指定 Java 程序运行时的类路径。类路径是指计算机中存储 Java 类文件和库文件的路径。当Java 程序运行时,虚拟机会搜索类路径上指定的路径,以找到所需的类文件和库文件,以便正确加载和执行程序。
#CLASSPATH和 PATH是必需的,而JAVA_HOME和JRE_HOME是为了方便修改,只需要修改JAVA_HOME

source java.sh  //立即生效
java -version   //查看版本号

linux Nginx+Tomcat负载均衡、动静分离_第15张图片

vim hello.java //创建一个.java文件

public class hello {
    public static void main (String[] args){
        System.out.println("hello world!");
       }
}
//编写的程序内容

linux Nginx+Tomcat负载均衡、动静分离_第16张图片

javac hello.java  //转换为字节码文件
java hello  //执行字节码文件

linux Nginx+Tomcat负载均衡、动静分离_第17张图片

cd /opt;ls  //切换到opt目录下,查看opt下的文件
rz -E  //将tomcat的安装包导入到opt目录下
tar xf apache-tomcat-9.0.16.tar.gz //解压文件

linux Nginx+Tomcat负载均衡、动静分离_第18张图片

mv apache-tomcat-9.0.16 /usr/local/tomcat 
//将tomcat解压后的文件移动到/usr/local/tomcat
cd /usr/local/tomcat;ls
//切换到该目录下,并查看该文件夹下的文件
cd ./bin;ls //切换到bin目录下,并查看该目录下的文件

linux Nginx+Tomcat负载均衡、动静分离_第19张图片
注意:

startup.sh :启动程序文件
catalina.sh:启动程序文件
shutdown.sh:关闭程序文件

./startup.sh 8080  //启动tomcat
ss -natp |grep 8080 //查看tomcat是否启动成功

linux Nginx+Tomcat负载均衡、动静分离_第20张图片

浏览器输入ip和端口号,查看tomcat是否安装成功

linux Nginx+Tomcat负载均衡、动静分离_第21张图片

vim /usr/lib/systemd/system/tomcat.service
//编写.service文件
[Unit]
Description=tomcat server
Wants=network-online.target
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_201-amd64"
Environment="PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
Environment="CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target

linux Nginx+Tomcat负载均衡、动静分离_第22张图片

./shutdown.sh  //关闭tomcat

linux Nginx+Tomcat负载均衡、动静分离_第23张图片

systemctl daemon-reload  //重新读取配置文件
systemctl start tomcat   //启动tomcat
systemctl status tomcat  //查看tomcat状态

linux Nginx+Tomcat负载均衡、动静分离_第24张图片

2.2优化tomcat启动速度

第一次启动tomcat可能会发现 Tomcat 启动很慢,默认情况下可能会需要几十秒,可以修改jdk参数进行改。

vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security     - -117行--修改
securerandom.source=file:/dev/random
修改为securerandom.source=file:/dev/urandom

linux Nginx+Tomcat负载均衡、动静分离_第25张图片
在这里插入图片描述

2.4主要目录说明

  • bin:存放启动和关闭 Tomcat 的命令和执行文件,如 catalina.sh、startup.sh、shutdown.sh
  • conf:存放 Tomcat 服务器的各种配置文件,如主配置文件 server.xml 和 应用默认的部署描述文件 web.xml 比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件。  
    ① server.xml: Tomcat的主配置文件,包含Service,Connector,Engine,Realm,Valve,Hosts主组件的相关配置信息;
    ② context.xml:所有host的默认配置信息;
    ③ tomcat-user.xml:Realm认证时用到的相关角色、用户和密码等信息,Tomcat自带的manager默认情况下会用到此文件,在Tomcat中添加/删除用户,为用户指|定角色等将通过编辑此文件实现;
    ④ web.xml:遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的web应用程序提供包括MIME映射等默认配置信息;
  • lib:存放 Tomcat 运行需要的库文件的 jar 包,一般不作任何改动
  • logs:存放 Tomcat 执行时的日志
  • temp:存放 Tomcat 运行时产生的文件
  • webapps:存放 Tomcat 默认的 Web 应用项目资源的目录
  • work:Tomcat 的工作目录,存放 Web 应用代码生成和编译文件

linux Nginx+Tomcat负载均衡、动静分离_第26张图片

3、Tomcat 虚拟主机配置

很多时候公司会有多个项目需要运行,一般不会是在一台服务器上运行多个 Tomcat 服务,这样会消耗太多系统资源。此时就需要使用到Tomcat 虚拟主机。

3.1创建fsj和mws项目目录和文件

mkdir /usr/local/tomcat/webapps/fsj
mkdir /usr/local/tomcat/webapps/mws
echo "fsj,fsj,fsj" > /usr/local/tomcat/webapps/fsj/index.jsp
echo "mws,mws,mws" > /usr/local/tomcat/webapps/mws/index.jsp

linux Nginx+Tomcat负载均衡、动静分离_第27张图片

3.2修改 Tomcat 主配置文件 server.xml

vim /usr/local/tomcat/conf/server.xml
--165行前--插入
"www.fsj.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	"/usr/local/tomcat/webapps/fsj" path="" reloadable="true" />
</Host>
 
"www.mws.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	"/usr/local/tomcat/webapps/mws" path="" reloadable="true" />
</Host>

linux Nginx+Tomcat负载均衡、动静分离_第28张图片

name:主机名

appBase:Tomcat程序工作目录,即存放web应用程序的目录;相对路径为webapps,绝对路径为/usr/local/tomcat/webapps

unpackWARs:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true

autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true

xmlValidation:是否验证xml文件执行有效性检验的标志 x

mlNamespaceAware:是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验

Context docBase:相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;

path:相对于Web服务器根路径而言的URI;如果为空"",则表示为此webapp的根路径 / ;

reloadable:是否允许重新加载此context相关的Web应用程序的类;默认为false

linux Nginx+Tomcat负载均衡、动静分离_第29张图片
测试

在真机的本地hosts文件中加入IP和域名

linux Nginx+Tomcat负载均衡、动静分离_第30张图片

浏览器访问域名

 http://www.fsj.com:8080
 http://www.mws.com:8080

linux Nginx+Tomcat负载均衡、动静分离_第31张图片
linux Nginx+Tomcat负载均衡、动静分离_第32张图片

3.3HTTP 请求过程

(1)Connector 连接器监听的端口是 8080。由于请求的端口和监听的端口一致,连接器接受了该请求。
(2)因为引擎的默认虚拟主机是 www.cyw.com,并且虚拟主机的目录是webapps。所以请求找到了 tomcat/webapps 目录。
(3)访问的路径为根路径,URI 为空,即空是 Web 程序的应用名,也就是 context。此时请求找到 /usr/local/tomcat/webapps/cyw 目录,解析 index.jsp 并返回。

4、Tomcat 优化

omcat默认安装下的缺省配置并不适合生产环境,它可能会频繁出现假死现象需要重启,只有通过不断压测优化才能让它最高效率稳定的运行。优化主要包括三方面,分别为操作系统优化(内核参数优化),Tomcat配置文件参数优化,Java虚拟机(JVM)调优。

4.1 Tomcat 配置文件参数优化

常用的优化相关参数如下:

【redirectPort】如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的 8443 端口。

【maxThreads】Tomcat使用线程来处理接收的每个请求,这个值表示Tomcat可创建的最大的线程数,即支持的最大并发连接数,默认值是
200。

【minSpareThreads】最小空闲线程数,Tomcat 启动时的初始化的线程数,表示即使没有人使用也开这么多空线程等待,默认值是10。

【maxSpareThreads】最大备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值是-1(无限制)。一般不需要指定。

【processorCache】进程缓冲器,可以提升并发请求。默认值是200,如果不做限制的话可以设置为-1,一般采用maxThreads的值或者-1。

【URIEncoding】指定 Tomcat 容器的 URL 编码格式,网站一般采用UTF-8作为默认编码。

【connnectionTimeout】网络连接超时,单位:毫秒,设置为 0 表示永不超时,这样设置有隐患的。通常默认 20000 毫秒就可以。

【enableLookups】是否反查域名,以返回远程主机的主机名,取值为:true 或 false,如果设置为 false,则直接返回
IP 地址,为了提高处理能力,应设置为 false。

【disableUploadTimeout】上传时是否使用超时机制。应设置为 true。

【connectionUploadTimeout】上传超时时间,毕竟文件上传可能需要消耗更多的时间,这个根据你自己的业务需要自己调,以使Servlet有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效。

【acceptCount】指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为100 个。

【maxKeepAliveRequests】指定一个长连接的最大请求数。默认长连接是打开的,设置为1时,代表关闭长连接;为-1时,代表请求数无限制

【compression】是否对响应的数据进行GZIP压缩,off:表示禁止压缩;on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为
off,压缩数据后可以有效的减少页面的大小,一般可以减小 1/3 左右,节省带宽。

【compressionMinSize】表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值就是2048。

【compressableMimeType】压缩类型,指定对哪些类型的文件进行数据压缩。

【noCompressionUserAgents=“gozilla, traviata”】对于以下的浏览器,不启用压缩 #如果已经进行了动静分离处理,静态页面和图片等数据就不需做 Tomcat 处理,也就不要在 Tomcat 中配置压缩了。

以上是一些常用的配置参数,还有好多其它的参数设置,还可以继续深入的优化,HTTP Connector 与 AJP Connector 的参数属性值,可以参考官方文档的详细说明进行学习

vim /usr/local/tomcat/conf/server.xml
......
"8080" protocol="HTTP/11.1" 
connectionTimeout="20000" 
redirectPort="8443" 
--71行--插入
minSpareThreads="50" 
enableLookups="false" 
disableUploadTimeout="true" 
acceptCount="300" 
maxThreads="500" 
processorCache="500"
URIEncoding="UTF-8" 
maxKeepAliveRequests="100"
compression="on" 
compressionMinSize="2048" 
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image /jpg,image/png"/>

5、Tomcat多实例部署

mkdir -p /usr/local/tomcat/tomcat1
//递归创建tomcal
mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
//将解压过后的安装包移到tomcat1中
cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2
//再复制一个安装包命名为tomcat2

linux Nginx+Tomcat负载均衡、动静分离_第33张图片

配置 tomcat 环境变量

vim /etc/profile.d/tomcat.sh
//设置tomcat1和tomcat2的环境变量
#tomcat1
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1

#tomcat2
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/tomcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2

linux Nginx+Tomcat负载均衡、动静分离_第34张图片

修改 tomcat2 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号

vim /usr/local/tomcat/tomcat2/conf/server.xml
//修改tomcat2的配置文件

"8006" shutdown="SHUTDOWN">		#22行,修改Server prot,默认为8005 -> 修改为8006
"8081" protocol="HTTP/1.1"		#69行,修改Connector port,HTTP/1.1  默认为8080 -> 修改为8081
"8010" protocol="AJP/1.3" redirectPort="8443" />	#116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010

linux Nginx+Tomcat负载均衡、动静分离_第35张图片
在这里插入图片描述
linux Nginx+Tomcat负载均衡、动静分离_第36张图片
linux Nginx+Tomcat负载均衡、动静分离_第37张图片

  • 8080: HTTP 请求的默认端口,用于 Web 应用程序和客户端之间的通信。
  • 8005: Shutdown 端口,用于远程关闭 Tomcat 服务。
  • 8009: AJP 端口,用于连接 Apache Web Server 和 Tomcat 服务器的通信。
    以上三个端口号皆需要修改

修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量

vim /usr/local/tomcat/tomcat1/bin/startup.sh
//修改tomcat1开启配置文件的环境变量

linux Nginx+Tomcat负载均衡、动静分离_第38张图片

vim /usr/local/tomcat/tomcat1/bin/shutdown.sh
//修改tomcat1关闭配置文件的环境变量

linux Nginx+Tomcat负载均衡、动静分离_第39张图片

vim /usr/local/tomcat/tomcat2/bin/startup.sh
//修改tomcat2的开机配置的环境变量

linux Nginx+Tomcat负载均衡、动静分离_第40张图片

vim /usr/local/tomcat/tomcat2/bin/shutdown.sh
//修改tomcat2的关闭配置的环境变量

linux Nginx+Tomcat负载均衡、动静分离_第41张图片

启动各 tomcat 中的 /bin/startup.sh

tomcat1
linux Nginx+Tomcat负载均衡、动静分离_第42张图片
linux Nginx+Tomcat负载均衡、动静分离_第43张图片
tomcat2
linux Nginx+Tomcat负载均衡、动静分离_第44张图片
linux Nginx+Tomcat负载均衡、动静分离_第45张图片

6、Nginx+Tomcat负载均衡、动静分离

Nginx服务器:192.168.190.200
tomcat1服务器:192.168.190.101
tomcat2服务器:192.168.190.120:8080
192.168.190.120:8081

6.1部署Nginx负载均衡器

systemctl stop firewalld
setenforce 0
 
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
 
useradd -M -s /sbin/nologin nginx
 
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/
 
cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \									#启用文件修改支持
--with-http_stub_status_module \					#启用状态统计
--with-http_gzip_static_module \					#启用 gzip静态压缩
--with-http_flv_module \							#启用 flv模块,提供对 flv 视频的伪流支持
--with-http_ssl_module								#启用 SSL模块,提供SSL加密功能
 
--with-stream										#启用 stream模块,提供4层调度
 
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-stream
 
make && make install
 
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
 
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
 
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

6.2 部署2台Tomcat 应用服务器

systemctl stop firewalld
setenforce 0
 
tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
 
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
 
source /etc/profile
 
tar zxvf apache-tomcat-8.5.16.tar.gz
 
mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat
 
/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh
 
netstat -ntap | grep 8080

6.3动静分离配置

6.3.1 Tomcat1 server 配置

cd /usr/local/tomcat/tomcat/webapps
//切换到tomcat下的webapps目录
mkdir test //创建存放页面的文件夹
vim index.jsp //创建页面
填写以下内容
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


JSP test1 page<<span class="token operator">/</span>title>   <span class="token comment">#指定为 test1 页面</span>
<<span class="token operator">/</span>head>
<body>
<<span class="token operator">%</span> out<span class="token punctuation">.</span>println<span class="token punctuation">(</span><span class="token string">"动态页面 1,http://www.test1.com"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token operator">%</span>>
<<span class="token operator">/</span>body>
<<span class="token operator">/</span>html>
</code></pre> 
  <p><a href="http://img.e-com-net.com/image/info8/b0a4519c46a2469799651aeb9af4b992.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/b0a4519c46a2469799651aeb9af4b992.jpg" alt="linux Nginx+Tomcat负载均衡、动静分离_第46张图片" width="650" height="291" style="border:1px solid black;"></a></p> 
  <pre><code class="prism language-powershell">vim <span class="token operator">/</span>usr/local/tomcat/tomcat1/conf/server<span class="token punctuation">.</span>xml
<span class="token comment">#由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置</span>
</code></pre> 
  <p><a href="http://img.e-com-net.com/image/info8/a08fd32fc64341ec880bed0b93dfb037.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/a08fd32fc64341ec880bed0b93dfb037.jpg" alt="linux Nginx+Tomcat负载均衡、动静分离_第47张图片" width="650" height="327" style="border:1px solid black;"></a></p> 
  <pre><code class="prism language-powershell"><span class="token operator">/</span>usr/local/tomcat/tomcat1/bin/shutdown<span class="token punctuation">.</span>sh 
<span class="token operator">/</span>usr/local/tomcat/tomcat1/bin/startup<span class="token punctuation">.</span>sh 
关闭并重启
</code></pre> 
  <p><img src="http://img.e-com-net.com/image/info8/e36ede22a6cf45e481eca61652d08924.jpg" alt="在这里插入图片描述" width="0" height="0"></p> 
  <h3>6.3.2 Tomcat2 server 配置</h3> 
  <pre><code class="prism language-powershell">cd <span class="token operator">/</span>usr/local/tomcat/tomcat1/webapps
<span class="token operator">/</span><span class="token operator">/</span>切换到tomcat1下的webapps目录
mkdir test <span class="token operator">/</span><span class="token operator">/</span>创建存放页面的文件夹
vim index<span class="token punctuation">.</span>jsp <span class="token operator">/</span><span class="token operator">/</span>创建页面
写入以下内容
<<span class="token operator">%</span>@ page language=<span class="token string">"java"</span> import=<span class="token string">"java.util.*"</span> pageEncoding=<span class="token string">"UTF-8"</span><span class="token operator">%</span>>
<html>
<head>
<title>JSP test2 page<<span class="token operator">/</span>title>   <span class="token comment">#指定为 test2 页面</span>
<<span class="token operator">/</span>head>
<body>
<<span class="token operator">%</span> out<span class="token punctuation">.</span>println<span class="token punctuation">(</span><span class="token string">"动态页面 2,http://www.test1.com"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token operator">%</span>>
<<span class="token operator">/</span>body>
<<span class="token operator">/</span>html>
</code></pre> 
  <p><a href="http://img.e-com-net.com/image/info8/b51ccf09feb14d9f9aa6d2fac8bcd438.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/b51ccf09feb14d9f9aa6d2fac8bcd438.jpg" alt="linux Nginx+Tomcat负载均衡、动静分离_第48张图片" width="650" height="319" style="border:1px solid black;"></a></p> 
  <pre><code class="prism language-powershell">vim <span class="token operator">/</span>usr/local/tomcat/tomcat2/conf/server<span class="token punctuation">.</span>xml
<span class="token comment">#删除前面的 HOST 配置</span>
添加以下内容
<Host name=<span class="token string">"localhost"</span> appBase=<span class="token string">"webapps"</span> unpackWARs=<span class="token string">"true"</span> autoDeploy=<span class="token string">"true"</span> xmlValidation=<span class="token string">"false"</span> xmlNamespaceAware=<span class="token string">"false"</span>>
	<Context docBase=<span class="token string">"/usr/local/tomcat/tomcat2/webapps/test"</span> path=<span class="token string">""</span> reloadable=<span class="token string">"true"</span> <span class="token operator">/</span>>
<<span class="token operator">/</span>Host>
</code></pre> 
  <p><a href="http://img.e-com-net.com/image/info8/f48bbcf038c14a198d60ff37087e8777.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/f48bbcf038c14a198d60ff37087e8777.jpg" alt="linux Nginx+Tomcat负载均衡、动静分离_第49张图片" width="650" height="374" style="border:1px solid black;"></a></p> 
  <pre><code class="prism language-powershell"><span class="token operator">/</span>usr/local/tomcat/tomcat1/bin/shutdown<span class="token punctuation">.</span>sh 
<span class="token operator">/</span>usr/local/tomcat/tomcat1/bin/startup<span class="token punctuation">.</span>sh 
关闭并重启
</code></pre> 
  <p><a href="http://img.e-com-net.com/image/info8/be6a4921b7a7481eb290c108c513a7d6.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/be6a4921b7a7481eb290c108c513a7d6.jpg" alt="linux Nginx+Tomcat负载均衡、动静分离_第50张图片" width="650" height="203" style="border:1px solid black;"></a></p> 
  <pre><code class="prism language-powershell">vim <span class="token operator">/</span>usr/local/tomcat/tomcat2/webapps/test/index<span class="token punctuation">.</span>jsp
<<span class="token operator">%</span>@ page language=<span class="token string">"java"</span> import=<span class="token string">"java.util.*"</span> pageEncoding=<span class="token string">"UTF-8"</span><span class="token operator">%</span>>
<html>
 
<head>
<title>JSP test3 page<<span class="token operator">/</span>title>   <span class="token comment">#指定为 test3 页面</span>
<<span class="token operator">/</span>head>
 
<body>
<<span class="token operator">%</span> out<span class="token punctuation">.</span>println<span class="token punctuation">(</span><span class="token string">"动态页面 3,http://www.test3.com"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token operator">%</span>>
<<span class="token operator">/</span>body>
<<span class="token operator">/</span>html>
</code></pre> 
  <h3>6.3.3 Nginx server 配置</h3> 
  <p><strong>准备静态页面和静态图片</strong></p> 
  <pre><code class="prism language-powershell"><span class="token function">echo</span> <span class="token string">'<html><body><h1>静态页面</h1></body></html>'</span> > <span class="token operator">/</span>usr/local/nginx/html/index<span class="token punctuation">.</span>html
mkdir <span class="token operator">/</span>usr/local/nginx/html/img <span class="token operator">/</span><span class="token operator">/</span>创建文件夹
rz <span class="token operator">-</span>E <span class="token operator">/</span><span class="token operator">/</span>将内容拷进来
 
vim <span class="token operator">/</span>apps/nginx/conf/nginx<span class="token punctuation">.</span>conf
<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
http <span class="token punctuation">{</span>
<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
	<span class="token comment">#gzip on;</span>
</code></pre> 
  <p><a href="http://img.e-com-net.com/image/info8/10ff14221c4d42f6bd0b65e598294e81.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/10ff14221c4d42f6bd0b65e598294e81.jpg" alt="linux Nginx+Tomcat负载均衡、动静分离_第51张图片" width="650" height="227" style="border:1px solid black;"></a><br> <a href="http://img.e-com-net.com/image/info8/b223fcc3ce01472f8441c291324ff25f.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/b223fcc3ce01472f8441c291324ff25f.jpg" alt="linux Nginx+Tomcat负载均衡、动静分离_第52张图片" width="650" height="414" style="border:1px solid black;"></a></p> 
  <pre><code class="prism language-powershell"><span class="token operator">/</span><span class="token operator">/</span>实现均衡负载
upstream fsj <span class="token punctuation">{</span>
                server 192<span class="token punctuation">.</span>168<span class="token punctuation">.</span>190<span class="token punctuation">.</span>101:8080 weight=1<span class="token punctuation">;</span>
                server 192<span class="token punctuation">.</span>168<span class="token punctuation">.</span>190<span class="token punctuation">.</span>120:8080 weight=1<span class="token punctuation">;</span>
                server 192<span class="token punctuation">.</span>168<span class="token punctuation">.</span>190<span class="token punctuation">.</span>120:8081 weight=1<span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
    server <span class="token punctuation">{</span>
        listen       80<span class="token punctuation">;</span>
        server_name  www<span class="token punctuation">.</span>fsj<span class="token punctuation">.</span>com<span class="token punctuation">;</span>
</code></pre> 
  <pre><code class="prism language-powershell"><span class="token operator">/</span><span class="token operator">/</span>实现动静分离
location ~ <span class="token punctuation">.</span><span class="token operator">*</span>\<span class="token punctuation">.</span>jsp$ <span class="token punctuation">{</span>
            proxy_pass http:<span class="token operator">/</span><span class="token operator">/</span>fsj<span class="token punctuation">;</span>
  <span class="token punctuation">}</span>
 location ~<span class="token operator">*</span> \<span class="token punctuation">.</span><span class="token punctuation">(</span>jpg<span class="token punctuation">|</span>png<span class="token punctuation">|</span>gif<span class="token punctuation">|</span>bmp<span class="token punctuation">)</span>$ <span class="token punctuation">{</span>
 root  <span class="token operator">/</span>apps/nginx/html/img<span class="token punctuation">;</span>
 <span class="token punctuation">}</span>
</code></pre> 
  <p><a href="http://img.e-com-net.com/image/info8/f21f8def16e140aeb137c0952519c28c.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/f21f8def16e140aeb137c0952519c28c.jpg" alt="linux Nginx+Tomcat负载均衡、动静分离_第53张图片" width="650" height="393" style="border:1px solid black;"></a></p> 
  <h2>6.4测试</h2> 
  <p><a href="http://img.e-com-net.com/image/info8/6d33bc4fd3cf4a11bb6a4efeb7b967b1.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/6d33bc4fd3cf4a11bb6a4efeb7b967b1.jpg" alt="linux Nginx+Tomcat负载均衡、动静分离_第54张图片" width="650" height="216" style="border:1px solid black;"></a><br> <a href="http://img.e-com-net.com/image/info8/b34875c849ab43498157e47805541142.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/b34875c849ab43498157e47805541142.jpg" alt="linux Nginx+Tomcat负载均衡、动静分离_第55张图片" width="650" height="238" style="border:1px solid black;"></a><br> <a href="http://img.e-com-net.com/image/info8/0b0a6f1a048744689df31b54aa87146a.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/0b0a6f1a048744689df31b54aa87146a.jpg" alt="linux Nginx+Tomcat负载均衡、动静分离_第56张图片" width="650" height="155" style="border:1px solid black;"></a><br> <a href="http://img.e-com-net.com/image/info8/2ae5cf4df03d4c1484caddfe07c3652a.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/2ae5cf4df03d4c1484caddfe07c3652a.jpg" alt="linux Nginx+Tomcat负载均衡、动静分离_第57张图片" width="650" height="218" style="border:1px solid black;"></a><br> <a href="http://img.e-com-net.com/image/info8/50703ee902874988be066241b25469c8.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/50703ee902874988be066241b25469c8.jpg" alt="linux Nginx+Tomcat负载均衡、动静分离_第58张图片" width="650" height="180" style="border:1px solid black;"></a><br> </p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1701045500360339456"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(linux,nginx,tomcat)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1943991008740044800.htm"
                           title="上位机知识篇---SD卡&U盘镜像" target="_blank">上位机知识篇---SD卡&U盘镜像</a>
                        <span class="text-muted"></span>

                        <div>常用的镜像烧录软件balenaEtcherbalenaEtcher是一个开源的、跨平台的工具,用于将操作系统镜像文件(如ISO和IMG文件)烧录到SD卡和USB驱动器中。以下是其使用方法、使用场景和使用注意事项的介绍:使用方法下载安装:根据自己的操作系统,从官方网站下载对应的安装包。Windows系统下载.exe文件后双击安装;Linux系统若下载的是.deb文件,可在终端执行“sudodpkg-</div>
                    </li>
                    <li><a href="/article/1943985462716723200.htm"
                           title="docker-compose方式搭建lnmp环境——筑梦之路" target="_blank">docker-compose方式搭建lnmp环境——筑梦之路</a>
                        <span class="text-muted">筑梦之路</span>
<a class="tag" taget="_blank" href="/search/linux%E7%B3%BB%E7%BB%9F%E8%BF%90%E7%BB%B4/1.htm">linux系统运维</a><a class="tag" taget="_blank" href="/search/%E5%9B%BD%E4%BA%A7%E5%8C%96/1.htm">国产化</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/adb/1.htm">adb</a>
                        <div>docker-compose.yml文件#生成docker-compose.ymlcat>docker-compose.ymlnginx/conf.d/default.conf">www/index.phpecho"开始启动服务..."docker-composeup-d#获取本机ipip_addr=$(hostname-I|awk'{print$1}')echo"部署完成!"echo"访问测试页</div>
                    </li>
                    <li><a href="/article/1943972727534710784.htm"
                           title="Linux/Centos7离线安装并配置MySQL 5.7" target="_blank">Linux/Centos7离线安装并配置MySQL 5.7</a>
                        <span class="text-muted">有事开摆无事百杜同学</span>
<a class="tag" taget="_blank" href="/search/LInux%2FCentOS7/1.htm">LInux/CentOS7</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>Linux/Centos7离线安装并配置MySQL5.7超详细教程一、环境准备1.下载MySQL5.7离线包2.使用rpm工具卸载MariaDB(避免冲突)3.创建系统级别的MySQL专用用户二、安装与配置1.解压并重命名MySQL目录2.创建数据目录和配置文件3.设置目录权限4.初始化MySQL5.配置启动脚本6.配置环境变量三、启动与验证1.启动MySQL服务2.获取初始密码3.登录并修改密码</div>
                    </li>
                    <li><a href="/article/1943971211692273664.htm"
                           title="Linux操作系统磁盘管理" target="_blank">Linux操作系统磁盘管理</a>
                        <span class="text-muted">CZZDg</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>目录一.硬盘介绍1.硬盘的物理结构2.CHS编号3.磁盘存储划分4.开机流程5.要点6.磁盘存储数据的形式二.Linux文件系统1.根文件系统2.虚拟文件系统3.真文件系统4.伪文件系统三.磁盘分区与挂载1.磁盘分区方式2.分区命令3.查看与识别命令4.格式化命令5.挂载命令四.LVM逻辑卷1.概述2.管理命令五.磁盘配额1.概述usrquota:支持对用户的磁盘配额grpquota:支持对组的磁</div>
                    </li>
                    <li><a href="/article/1943967429147291648.htm"
                           title="tcpdump交叉编译" target="_blank">tcpdump交叉编译</a>
                        <span class="text-muted">weixin_45673259</span>
<a class="tag" taget="_blank" href="/search/tcpdump/1.htm">tcpdump</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>1.下载路径官网:https://www.tcpdump.org/2.编译解压:tar-xflibpcap-1.10.4.tar.xztar-xftcpdump-4.99.4.tar.xz编译libpcap./configure--host=mips-v720s229-linux--target=mips-v720s229-linuxCC=/opt/A1/mips-gcc720-uclibc229</div>
                    </li>
                    <li><a href="/article/1943954700055408640.htm"
                           title="【Linux内核模块】Linux内核模块程序结构" target="_blank">【Linux内核模块】Linux内核模块程序结构</a>
                        <span class="text-muted">byte轻骑兵</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8FLinux%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91%E5%AE%9E%E6%88%98/1.htm">嵌入式Linux驱动开发实战</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>如果你已经写过第一个"HelloWorld"内核模块,可能会好奇:为什么那个几行代码的程序能被内核识别?那些module_init、MODULE_LICENSE到底是什么意思?今天咱们就来扒一扒内核模块的程序结构,搞清楚一个合格的内核模块到底由哪些部分组成,每个部分又承担着什么角色。目录一、内核模块的"骨架":最简化结构解析二、头文件:内核模块的"说明书"2.1最常用的三个头文件2.2按需添加的其</div>
                    </li>
                    <li><a href="/article/1943953314710351872.htm"
                           title="LVM逻辑卷扩容" target="_blank">LVM逻辑卷扩容</a>
                        <span class="text-muted"></span>

                        <div>目录1.逻辑卷的简介2.逻辑卷的概念3.相关命令4.建立逻辑卷1.逻辑卷的简介1.LVM是逻辑卷管理(LogicalVolumeManager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。2.LVM最大的特点就是可以对磁盘进行动态管理。使用了LVM管理分区,动态的调整分区的大小,标准分区是做不到的。2.逻辑卷的概念</div>
                    </li>
                    <li><a href="/article/1943952432815992832.htm"
                           title="Rocky Linux 8.5/CentOS 8 安装Wine" target="_blank">Rocky Linux 8.5/CentOS 8 安装Wine</a>
                        <span class="text-muted">chen_teacher</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>RockyLinux8.5/CentOS8安装Wine首先配置EPEL镜像配置方法安装Wine首先配置EPEL镜像EPEL(ExtraPackagesforEnterpriseLinux),是由FedoraSpecialInterestGroup维护的EnterpriseLinux(RHEL、CentOS)中经常用到的包。下载地址:https://mirrors.aliyun.com/epel/相</div>
                    </li>
                    <li><a href="/article/1943949028848889856.htm"
                           title="系统迁移从CentOS7.9到Rocky8.9" target="_blank">系统迁移从CentOS7.9到Rocky8.9</a>
                        <span class="text-muted"></span>

                        <div>我有两台阿里云上的服务器是CentOS7.9,由于CentOS7已经停止支持,后续使用的话会有安全漏洞,所以需要尽快迁移,个人使用的话目前兼容性好的还是RockyLinux8,很多脚本改改就能用了。一、盘点系统和迁移应用查看当前系统发行版版本cat/etc/os-release盘点迁移清单服务器应用部署方式docker镜像来源v1wordpressdockerdockerhubv1zdirdock</div>
                    </li>
                    <li><a href="/article/1943945625670316032.htm"
                           title="【Linux内核模块】Linux内核模块简介" target="_blank">【Linux内核模块】Linux内核模块简介</a>
                        <span class="text-muted">byte轻骑兵</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8FLinux%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91%E5%AE%9E%E6%88%98/1.htm">嵌入式Linux驱动开发实战</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/arm%E5%BC%80%E5%8F%91/1.htm">arm开发</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>你是否好奇过,为什么Linux系统可以在不重启的情况下支持新硬件?为什么修改一个驱动程序不需要重新编译整个内核?这一切都离不开Linux的"模块化魔法"——内核模块(KernelModule)。作为Linux内核最灵活的特性之一,内核模块让开发者可以动态扩展内核功能,今天就来揭开这个神秘组件的面纱。目录一、什么是内核模块?1.1先打个比方:给内核装"插件"1.2技术定义:动态加载的内核代码段1.3</div>
                    </li>
                    <li><a href="/article/1943944995484528640.htm"
                           title="Linux中LVM逻辑卷扩容" target="_blank">Linux中LVM逻辑卷扩容</a>
                        <span class="text-muted"></span>

                        <div>在Linux系统中对根目录所在的LVM逻辑卷进行扩容,需要依次完成物理卷扩容➔卷组扩容➔逻辑卷扩容➔文件系统扩容四个步骤。以下是详细操作流程:一、确认当前磁盘和LVM状态#1.查看磁盘空间使用情况df-h/#2.查看块设备及LVM层级关系lsblk#3.查看LVM详细信息(物理卷PV、卷组VG、逻辑卷LV)pvdisplayvgdisplaylvdisplay二、扩容物理卷(PV)场景1:已有未分</div>
                    </li>
                    <li><a href="/article/1943930755528847360.htm"
                           title="在 Windows 上安装 Docker Desktop" target="_blank">在 Windows 上安装 Docker Desktop</a>
                        <span class="text-muted">不老刘</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>还是简单说一下,如何在Windows上安装DockerDesktop,具体步骤如下:系统要求Windows10/1164-bit(专业版、企业版或教育版,版本21H2或更高)启用WSL2(WindowsSubsystemforLinux2)或Hyper-V至少4GB内存BIOS中启用虚拟化(VT-x/AMD-V)安装步骤1.下载DockerDesktop访问Docker官网下载页面。下载Docke</div>
                    </li>
                    <li><a href="/article/1943924321755918336.htm"
                           title="Java中的Tomcat,开启Web应用腾飞【基础版】" target="_blank">Java中的Tomcat,开启Web应用腾飞【基础版】</a>
                        <span class="text-muted"></span>

                        <div>目录一、Tomcat初登场:揭开神秘面纱(一)啥是Tomcat(二)为啥要有Tomcat二、Tomcat的安装与启动:开启第一步(一)下载Tomcat(二)启动Tomcat三、Tomcat的目录结构:探秘内部布局(一)核心目录介绍(二)目录间的协同工作四、部署JavaWeb应用到Tomcat:让应用上线(一)打包Web应用为WAR文件(二)部署WAR文件到Tomcat五、Tomcat的配置优化:让</div>
                    </li>
                    <li><a href="/article/1943920666499674112.htm"
                           title="老系统改造增加初始化,自动化数据源配置(tomcat+jsp+springmvc)" target="_blank">老系统改造增加初始化,自动化数据源配置(tomcat+jsp+springmvc)</a>
                        <span class="text-muted"></span>

                        <div>老系统改造增加初始化,自动化数据源配置一、前言二、改造描述1、环境说明2、实现步骤简要思考三、开始改造1、准备sql初始化文件2、启动时自动读取jdbc文件,创建数据源,如未配置,需要一个默认的临时数据源2.1去掉spingmvc原本配置的固定dataSource,改为动态dataSource2.2代码类,这里是示例,我就不管规范了,放到一起2.2.1DynamicDataSourceConfig</div>
                    </li>
                    <li><a href="/article/1943915121613008896.htm"
                           title="【Linux】进程间通信-管道通信实验" target="_blank">【Linux】进程间通信-管道通信实验</a>
                        <span class="text-muted">会的全对٩(ˊᗜˋ*)و</span>
<a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a>
                        <div>要求:利用有名管道编写简单的聊天程序,聊天双方在线才能说话,一方说话后需另一方应答才能继续说话,即一来一往的聊天模式,如果输入quit则退出聊天程序。代码实现:进程A#include#include#include#include#include#include#defineFIFO_A"/tmp/chat_fifo_a"//进程A写消息,进程B读消息#defineFIFO_B"/tmp/chat</div>
                    </li>
                    <li><a href="/article/1943914615645728768.htm"
                           title="Tomcat:Java Web应用的幕后英雄" target="_blank">Tomcat:Java Web应用的幕后英雄</a>
                        <span class="text-muted">互联网动态分析</span>
<a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a>
                        <div>在当今数字化浪潮中,Java作为一门成熟且广泛应用的编程语言,支撑着无数企业级应用和互联网服务的稳定运行。而在JavaWeb开发领域,Tomcat无疑是一个举足轻重的存在,它宛如一位默默耕耘的幕后英雄,为众多Web应用提供了可靠的运行环境。Tomcat的起源与发展Tomcat的故事始于1999年,当时SunMicrosystems(后被Oracle收购)与Apache软件基金会合作,旨在为Java</div>
                    </li>
                    <li><a href="/article/1943913603195269120.htm"
                           title="【个人笔记】负载均衡" target="_blank">【个人笔记】负载均衡</a>
                        <span class="text-muted">撰卢</span>
<a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1/1.htm">负载均衡</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>文章目录nginx反向代理的好处负载均衡负载均很的配置方式均衡负载的方式nginx反向代理的好处提高访问速度进行负载均衡保证后端服务安全负载均衡负载均衡,就是把大量的请求按照我们指定的方式均衡的分配给集群中的每台服务器负载均很的配置方式upstreamwebservers{server192.168.100.128:8080server192.168.100.129:8080}server{lis</div>
                    </li>
                    <li><a href="/article/1943904277726556160.htm"
                           title="Python uWSGI 安装配置" target="_blank">Python uWSGI 安装配置</a>
                        <span class="text-muted">AI老李</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>关键要点uWSGI安装和配置适合PythonWSGI应用,资源丰富,适合初学者和中级用户。推荐菜鸟教程和官方文档,涵盖Linux和Windows环境。配置需注意操作系统差异和框架(如Django、Flask)需求。安装步骤uWSGI安装通常通过pip或源码编译完成。以下是基本步骤:Linux:安装依赖(如build-essentialpython-dev),然后用pipinstalluwsgi或编</div>
                    </li>
                    <li><a href="/article/1943891927694897152.htm"
                           title="上位机知识篇---Linux中的文件挂载" target="_blank">上位机知识篇---Linux中的文件挂载</a>
                        <span class="text-muted">Atticus-Orion</span>
<a class="tag" taget="_blank" href="/search/%E4%B8%8A%E4%BD%8D%E6%9C%BA%E6%93%8D%E4%BD%9C%E7%AF%87/1.htm">上位机操作篇</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E6%96%87%E4%BB%B6/1.htm">文件</a><a class="tag" taget="_blank" href="/search/%E6%8C%82%E8%BD%BD/1.htm">挂载</a>
                        <div>文章目录前言1.挂载的基本概念文件系统挂载点设备文件2.挂载的命令挂载文件系统示例卸载文件系统示例3.挂载的常用选项示例4.自动挂载(/etc/fstab文件)示例使用UUID挂载5.挂载网络文件系统(NFS)挂载NFS示例6.挂载ISO文件挂载ISO文件示例7.查看已挂载的文件系统8.挂载的注意事项9.挂载的常见问题挂载失败卸载失败10.总结前言在Linux系统中,文件挂载是指将一个文件系统(如</div>
                    </li>
                    <li><a href="/article/1943883862312546304.htm"
                           title="《C++性能优化指南》 linux版代码及原理解读 第一章" target="_blank">《C++性能优化指南》 linux版代码及原理解读 第一章</a>
                        <span class="text-muted">v俊逸</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E6%8C%87%E5%8D%97/1.htm">C++性能优化指南</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a><a class="tag" taget="_blank" href="/search/C%2B%2B%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">C++性能优化</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a>
                        <div>概述:目录概述:性能优化的必要性:C++代码优化策略总结用好的编译器并用好编译器使用更好的算法使用更好的库减少内存分配和复制移除计算使用更好的数据结构提高并发性优化内存管理性能优化的必要性:按照当今的CPU运行速度来说,执行一条指令所需要的时间是10的-9次方的时间单位,如此快速的执行速度是否就没有性能优化的必要了呢?其实不然,性能优化与CPU的执行速度并无非常大的关系,试想一下,一段代码,如果用</div>
                    </li>
                    <li><a href="/article/1943883863096881152.htm"
                           title="《C++性能优化指南》 linux版代码及原理解读 第四章" target="_blank">《C++性能优化指南》 linux版代码及原理解读 第四章</a>
                        <span class="text-muted">v俊逸</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E6%8C%87%E5%8D%97/1.htm">C++性能优化指南</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a><a class="tag" taget="_blank" href="/search/C%2B%2B%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E6%8C%87%E5%8D%97/1.htm">C++性能优化指南</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a>
                        <div>目录概述为什么字符串很麻烦字符串是动态分配的字符串赋值背后的操作如何面对字符串会进行大量复制写时复制COW(copyonwrite)尝试优化字符串避免临时字符串通过预留存储空间减少内存分配通过传递引用减少实参复制使用迭代器操作减少循环中的比较操作减少返回值的复制还没有结束,使用字符数组代替字符串再次优化字符串尝试其他的算法叠加以前的优化方式使用其他的编译器使用其他字符串的库功能丰富的字符串库使用s</div>
                    </li>
                    <li><a href="/article/1943881842402848768.htm"
                           title="如何在 Linux 上安装 RTX 5090 / 5080 /5070 Ti / 5070 驱动程序 — 详细指南" target="_blank">如何在 Linux 上安装 RTX 5090 / 5080 /5070 Ti / 5070 驱动程序 — 详细指南</a>
                        <span class="text-muted">知识大胖</span>
<a class="tag" taget="_blank" href="/search/NVIDIA/1.htm">NVIDIA</a><a class="tag" taget="_blank" href="/search/GPU%E5%92%8C%E5%A4%A7%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8B/1.htm">GPU和大语言模型开发教程</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>简介为了获得最佳性能,您需要在Linux上运行5090/5080/5070Ti/5070或其他50系列GPU(或Windows上的WSL)。这篇文章将包含有关如何操作的详细指南。主线内核和驱动程序怪癖之旅Nvidia50系列GPU拥有最新的Nvidia技术。但是,新硬件需要一些新软件或更新,这需要一些耐心。如果您在这里,您可能会遇到Ubuntu默认设置的障碍。不要害怕!我最近自己摸索了这个迷宫,结</div>
                    </li>
                    <li><a href="/article/1943878433025093632.htm"
                           title="STM32 CubMax 6.1.1 版本安装包" target="_blank">STM32 CubMax 6.1.1 版本安装包</a>
                        <span class="text-muted">姜奇惟Sparkling</span>

                        <div>STM32CubMax6.1.1版本安装包【下载地址】STM32CubMax6.1.1版本安装包本仓库提供STM32CubeMX6.1.1版本的安装包,支持Linux、macOS和Windows64位系统。STM32CubeMX是STMicroelectronics推出的一款图形化配置工具,能够自动生成适用于STM32微控制器的初始化代码,极大地简化了开发流程。用户只需根据操作系统选择相应的安装包</div>
                    </li>
                    <li><a href="/article/1943878433524215808.htm"
                           title="在 Linux(openEuler 24.03 LTS-SP1)上安装 Kubernetes + KubeSphere 的防火墙放行全攻略" target="_blank">在 Linux(openEuler 24.03 LTS-SP1)上安装 Kubernetes + KubeSphere 的防火墙放行全攻略</a>
                        <span class="text-muted"></span>

                        <div>目录在Linux(openEuler24.03LTS-SP1)上安装Kubernetes+KubeSphere的防火墙放行全攻略一、为什么要先搞定防火墙?二、目标环境三、需放行的端口和协议列表四、核心工具说明1.修正后的exec.sh脚本(支持管道/重定向)2.批量放行脚本:open_firewall.sh五、使用示例1.批量放行端口2.查看当前防火墙规则3.仅开放单一端口(临时需求)4.检查特定</div>
                    </li>
                    <li><a href="/article/1943868477316067328.htm"
                           title="解决Linux绑定失败地址已使用(端口被占用)的问题" target="_blank">解决Linux绑定失败地址已使用(端口被占用)的问题</a>
                        <span class="text-muted">誰能久伴不乏</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>文章目录解决`bindfailed:Addressalreadyinuse`问题一、问题原因1.**端口已经被其他程序占用**2.**端口处于`TIME_WAIT`状态**3.**未正确关闭套接字**二、如何排查和解决问题1.**确认端口是否被占用**2.**查找并杀掉占用端口的进程**3.**等待端口释放(`TIME_WAIT`状态)**4.**强制重用端口**(仅限开发环境)5.**使用其他端</div>
                    </li>
                    <li><a href="/article/1943864442009743360.htm"
                           title="linux/ubuntu启动引导过程详细分析" target="_blank">linux/ubuntu启动引导过程详细分析</a>
                        <span class="text-muted">奇妙之二进制</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a><a class="tag" taget="_blank" href="/search/postgresql/1.htm">postgresql</a>
                        <div>文章目录**一、固件初始化阶段(BIOS/UEFI)****1.BIOS(基本输入输出系统)模式****2.UEFI(统一可扩展固件接口)模式****二、引导加载程序阶段(GRUB2)****1.GRUB2的加载过程****2.GRUB配置解析****3.内核参数传递****三、内核加载与初始化****1.内核解压缩与启动****2.initramfs(初始内存文件系统)加载****3.根文件系统</div>
                    </li>
                    <li><a href="/article/1943863304589996032.htm"
                           title="深入理解 Linux 中的 stat 函数与文件属性操作" target="_blank">深入理解 Linux 中的 stat 函数与文件属性操作</a>
                        <span class="text-muted"></span>

                        <div>在Linux系统编程中,获取和操作文件属性是一项基础且重要的任务。stat函数作为获取文件状态信息的核心接口,为我们提供了丰富的文件元数据。本文将详细解析stat函数的用法、结构体成员含义,以及与文件时间戳、权限相关的实用操作。一、stat函数:文件信息的"万能查询器"stat函数的原型非常简洁:intstat(constchar*pathname,structstat*statbuf)功能:通过</div>
                    </li>
                    <li><a href="/article/1943857124383715328.htm"
                           title="CMD,PowerShell、Linux/MAC设置环境变量" target="_blank">CMD,PowerShell、Linux/MAC设置环境变量</a>
                        <span class="text-muted">sky丶Mamba</span>
<a class="tag" taget="_blank" href="/search/%E9%9B%B6%E5%9F%BA%E7%A1%80%E8%BD%AC%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/1.htm">零基础转大模型应用开发</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/macos/1.htm">macos</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>以下是CMD(Windows)、PowerShell(Windows)、Linux/Mac在临时/永久环境变量操作上的对比表格:环境变量操作对照表(CMDvsPowerShellvsLinux/Mac)操作CMD(Windows)PowerShell(Windows)Linux/Mac(Bash/Zsh)设置临时变量setVAR=value$env:VAR="value"exportVAR=val</div>
                    </li>
                    <li><a href="/article/1943851577341177856.htm"
                           title="Linux信号处理完全指南:程序员必知的10个关键点" target="_blank">Linux信号处理完全指南:程序员必知的10个关键点</a>
                        <span class="text-muted">操作系统内核探秘</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E5%8F%B7%E5%A4%84%E7%90%86/1.htm">信号处理</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a>
                        <div>Linux信号处理完全指南:程序员必知的10个关键点关键词:Linux信号、信号处理、进程通信、sigaction、可重入函数、信号掩码、信号生命周期、优雅退出、竞态条件、coredump摘要:本文以“生活中的紧急通知”为类比,用通俗易懂的语言拆解Linux信号处理的核心机制。通过10个程序员必须掌握的关键点,结合代码示例和生活案例,帮你彻底理解信号的生成、传递、处理全流程,掌握编写健壮信号处理逻</div>
                    </li>
                    <li><a href="/article/1943838460896931840.htm"
                           title="Cool Pi CM5-LAPTOP Linux Quick Start Guide" target="_blank">Cool Pi CM5-LAPTOP Linux Quick Start Guide</a>
                        <span class="text-muted">george-coolpi</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90/1.htm">开源</a><a class="tag" taget="_blank" href="/search/arm%E5%BC%80%E5%8F%91/1.htm">arm开发</a><a class="tag" taget="_blank" href="/search/AI%E7%BC%96%E7%A8%8B/1.htm">AI编程</a>
                        <div>MachineIntroductionCOOLPICM5open-sourcenotebookisaproductthatcombineshighperformance,portability,andopen-sourcespirit.Itnotonlymeetsthebasiccomputingneedsofusers,butalsoprovidesanidealplatformforthose</div>
                    </li>
                                <li><a href="/article/100.htm"
                                       title="iOS http封装" target="_blank">iOS http封装</a>
                                    <span class="text-muted">374016526</span>
<a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BA%A4%E4%BA%92/1.htm">服务器交互</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E8%AF%B7%E6%B1%82/1.htm">网络请求</a>
                                    <div>程序开发避免不了与服务器的交互,这里打包了一个自己写的http交互库。希望可以帮到大家。 
  
内置一个basehttp,当我们创建自己的service可以继承实现。 
  
KuroAppBaseHttp *baseHttp = [[KuroAppBaseHttp alloc] init]; 
[baseHttp setDelegate:self]; 
[baseHttp </div>
                                </li>
                                <li><a href="/article/227.htm"
                                       title="lolcat :一个在 Linux 终端中输出彩虹特效的命令行工具" target="_blank">lolcat :一个在 Linux 终端中输出彩虹特效的命令行工具</a>
                                    <span class="text-muted">brotherlamp</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/linux%E6%95%99%E7%A8%8B/1.htm">linux教程</a><a class="tag" taget="_blank" href="/search/linux%E8%A7%86%E9%A2%91/1.htm">linux视频</a><a class="tag" taget="_blank" href="/search/linux%E8%87%AA%E5%AD%A6/1.htm">linux自学</a><a class="tag" taget="_blank" href="/search/linux%E8%B5%84%E6%96%99/1.htm">linux资料</a>
                                    <div>  
那些相信 Linux 命令行是单调无聊且没有任何乐趣的人们,你们错了,这里有一些有关 Linux 的文章,它们展示着 Linux 是如何的有趣和“淘气” 。 
在本文中,我将讨论一个名为“lolcat”的小工具 – 它可以在终端中生成彩虹般的颜色。 
何为 lolcat ? 
Lolcat 是一个针对 Linux,BSD 和 OSX 平台的工具,它类似于 cat 命令,并为 cat</div>
                                </li>
                                <li><a href="/article/354.htm"
                                       title="MongoDB索引管理(1)——[九]" target="_blank">MongoDB索引管理(1)——[九]</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a><a class="tag" taget="_blank" href="/search/MongoDB%E7%AE%A1%E7%90%86%E7%B4%A2%E5%BC%95/1.htm">MongoDB管理索引</a>
                                    <div>转载请出自出处:http://eksliang.iteye.com/blog/2178427 一、概述 
      数据库的索引与书籍的索引类似,有了索引就不需要翻转整本书。数据库的索引跟这个原理一样,首先在索引中找,在索引中找到条目以后,就可以直接跳转到目标文档的位置,从而使查询速度提高几个数据量级。 
      不使用索引的查询称</div>
                                </li>
                                <li><a href="/article/481.htm"
                                       title="Informatica参数及变量" target="_blank">Informatica参数及变量</a>
                                    <span class="text-muted">18289753290</span>
<a class="tag" taget="_blank" href="/search/Informatica/1.htm">Informatica</a><a class="tag" taget="_blank" href="/search/%E5%8F%82%E6%95%B0/1.htm">参数</a><a class="tag" taget="_blank" href="/search/%E5%8F%98%E9%87%8F/1.htm">变量</a>
                                    <div>下面是本人通俗的理解,如有不对之处,希望指正 info参数的设置:在info中用到的参数都在server的专门的配置文件中(最好以parma)结尾 下面的GLOBAl就是全局的,$开头的是系统级变量,$$开头的变量是自定义变量。如果是在session中或者mapping中用到的变量就是局部变量,那就把global换成对应的session或者mapping名字。 
 
 
[GLOBAL] $Par</div>
                                </li>
                                <li><a href="/article/608.htm"
                                       title="python 解析unicode字符串为utf8编码字符串" target="_blank">python 解析unicode字符串为utf8编码字符串</a>
                                    <span class="text-muted">酷的飞上天空</span>
<a class="tag" taget="_blank" href="/search/unicode/1.htm">unicode</a>
                                    <div>php返回的json字符串如果包含中文,则会被转换成\uxx格式的unicode编码字符串返回。 
在浏览器中能正常识别这种编码,但是后台程序却不能识别,直接输出显示的是\uxx的字符,并未进行转码。 
  
转换方式如下 
  
  
>>> import json
>>> q = '{"text":"\u4</div>
                                </li>
                                <li><a href="/article/735.htm"
                                       title="Hibernate的总结" target="_blank">Hibernate的总结</a>
                                    <span class="text-muted">永夜-极光</span>
<a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a>
                                    <div>1.hibernate的作用,简化对数据库的编码,使开发人员不必再与复杂的sql语句打交道 
  
做项目大部分都需要用JAVA来链接数据库,比如你要做一个会员注册的 页面,那么 获取到用户填写的 基本信后,你要把这些基本信息存入数据库对应的表中,不用hibernate还有mybatis之类的框架,都不用的话就得用JDBC,也就是JAVA自己的,用这个东西你要写很多的代码,比如保存注册信</div>
                                </li>
                                <li><a href="/article/862.htm"
                                       title="SyntaxError: Non-UTF-8 code starting with '\xc4'" target="_blank">SyntaxError: Non-UTF-8 code starting with '\xc4'</a>
                                    <span class="text-muted">随便小屋</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                                    <div>刚开始看一下Python语言,传说听强大的,但我感觉还是没Java强吧! 
写Hello World的时候就遇到一个问题,在Eclipse中写的,代码如下 
'''
Created on 2014年10月27日

@author: Logic
'''
print("Hello World!"); 
 运行结果 
SyntaxError: Non-UTF-8 </div>
                                </li>
                                <li><a href="/article/989.htm"
                                       title="学会敬酒礼仪 不做酒席菜鸟" target="_blank">学会敬酒礼仪 不做酒席菜鸟</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/%E8%8F%9C%E9%B8%9F/1.htm">菜鸟</a>
                                    <div>俗话说,酒是越喝越厚,但在酒桌上也有很多学问讲究,以下总结了一些酒桌上的你不得不注意的小细节。 
 细节一:领导相互喝完才轮到自己敬酒。敬酒一定要站起来,双手举杯。  
 细节二:可以多人敬一人,决不可一人敬多人,除非你是领导。  
 细节三:自己敬别人,如果不碰杯,自己喝多少可视乎情况而定,比如对方酒量,对方喝酒态度,切不可比对方喝得少,要知道是自己敬人。  
 细节四:自己敬别人,如果碰杯,一</div>
                                </li>
                                <li><a href="/article/1116.htm"
                                       title="《创新者的基因》读书笔记" target="_blank">《创新者的基因》读书笔记</a>
                                    <span class="text-muted">aoyouzi</span>
<a class="tag" taget="_blank" href="/search/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/1.htm">读书笔记</a><a class="tag" taget="_blank" href="/search/%E3%80%8A%E5%88%9B%E6%96%B0%E8%80%85%E7%9A%84%E5%9F%BA%E5%9B%A0%E3%80%8B/1.htm">《创新者的基因》</a>
                                    <div>创新者的基因 
  
创新者的“基因”,即最具创意的企业家具备的五种“发现技能”:联想,观察,实验,发问,建立人脉。 
  
第一部分破坏性创新,从你开始 
第一章破坏性创新者的基因 
如何获得启示: 
发现以下的因素起到了催化剂的作用:(1) -个挑战现状的问题;(2)对某项技术、某个公司或顾客的观察;(3) -次尝试新鲜事物的经验或实验;(4)与某人进行了一次交谈,为他点醒</div>
                                </li>
                                <li><a href="/article/1243.htm"
                                       title="表单验证技术" target="_blank">表单验证技术</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/DOM%E5%AF%B9%E8%B1%A1/1.htm">DOM对象</a><a class="tag" taget="_blank" href="/search/String%E5%AF%B9%E8%B1%A1/1.htm">String对象</a><a class="tag" taget="_blank" href="/search/%E4%BA%8B%E4%BB%B6/1.htm">事件</a>
                                    <div>js最主要的功能就是验证表单,下面是我对表单验证的一些理解,贴出来与大家交流交流  ,数显我们要知道表单验证需要的技术点, String对象,事件,函数 
  
一:String对象;通常是对字符串的操作; 
  
1,String的属性; 
  
    字符串.length;表示该字符串的长度;
   var str= "java"</div>
                                </li>
                                <li><a href="/article/1370.htm"
                                       title="web.xml配置详解之context-param" target="_blank">web.xml配置详解之context-param</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a><a class="tag" taget="_blank" href="/search/web.xml/1.htm">web.xml</a><a class="tag" taget="_blank" href="/search/context-param/1.htm">context-param</a>
                                    <div>一.格式定义: 
<context-param>  
	<param-name>contextConfigLocation</param-name>  
	<param-value>contextConfigLocationValue></param-value>  
</context-param> 
作用:该元</div>
                                </li>
                                <li><a href="/article/1497.htm"
                                       title="Web系统常见编码漏洞(开发工程师知晓)" target="_blank">Web系统常见编码漏洞(开发工程师知晓)</a>
                                    <span class="text-muted">Bill_chen</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/fckeditor/1.htm">fckeditor</a><a class="tag" taget="_blank" href="/search/%E8%84%9A%E6%9C%AC/1.htm">脚本</a>
                                    <div>1.头号大敌:SQL Injection 
原因:程序中对用户输入检查不严格,用户可以提交一段数据库查询代码,根据程序返回的结果, 
获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。 
本质: 
对于输入检查不充分,导致SQL语句将用户提交的非法数据当作语句的一部分来执行。 
示例: 
String query = "SELECT id FROM users</div>
                                </li>
                                <li><a href="/article/1624.htm"
                                       title="【MongoDB学习笔记六】MongoDB修改器" target="_blank">【MongoDB学习笔记六】MongoDB修改器</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a>
                                    <div>本文首先介绍下MongoDB的基本的增删改查操作,然后,详细介绍MongoDB提供的修改器,以完成各种各样的文档更新操作    MongoDB的主要操作 
 
 show dbs 显示当前用户能看到哪些数据库 
 use foobar 将数据库切换到foobar 
 show collections 显示当前数据库有哪些集合 
 db.people.update,update不带参数,可</div>
                                </li>
                                <li><a href="/article/1751.htm"
                                       title="提高职业素养,做好人生规划" target="_blank">提高职业素养,做好人生规划</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E7%94%9F/1.htm">人生</a>
                                    <div>  
培训讲师是成都著名的企业培训讲师,他在讲课中提出的一些观点很新颖,在此我收录了一些分享一下。注:讲师的观点不代表本人的观点,这些东西大家自己揣摩。 
  
1、什么是职业规划:职业规划并不完全代表你到什么阶段要当什么官要拿多少钱,这些都只是梦想。职业规划是清楚的认识自己现在缺什么,这个阶段该学习什么,下个阶段缺什么,又应该怎么去规划学习,这样才算是规划。 
  </div>
                                </li>
                                <li><a href="/article/1878.htm"
                                       title="国外的网站你都到哪边看?" target="_blank">国外的网站你都到哪边看?</a>
                                    <span class="text-muted">bozch</span>
<a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF/1.htm">技术</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%AB%99/1.htm">网站</a><a class="tag" taget="_blank" href="/search/%E5%9B%BD%E5%A4%96/1.htm">国外</a>
                                    <div>学习软件开发技术,如果没有什么英文基础,最好还是看国内的一些技术网站,例如:开源OSchina,csdn,iteye,51cto等等。 
个人感觉如果英语基础能力不错的话,可以浏览国外的网站来进行软件技术基础的学习,例如java开发中常用的到的网站有apache.org 里面有apache的很多Projects,springframework.org是spring相关的项目网站,还有几个感觉不错的</div>
                                </li>
                                <li><a href="/article/2005.htm"
                                       title="编程之美-光影切割问题" target="_blank">编程之美-光影切割问题</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a>
                                    <div>
package a;

public class DisorderCount {

	/**《编程之美》“光影切割问题”
	 * 主要是两个问题:
	 * 1.数学公式(设定没有三条以上的直线交于同一点):
	 * 两条直线最多一个交点,将平面分成了4个区域;
	 * 三条直线最多三个交点,将平面分成了7个区域;
	 * 可以推出:N条直线 M个交点,区域数为N+M+1。
</div>
                                </li>
                                <li><a href="/article/2132.htm"
                                       title="关于Web跨站执行脚本概念" target="_blank">关于Web跨站执行脚本概念</a>
                                    <span class="text-muted">chenbowen00</span>
<a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/%E8%B7%A8%E7%AB%99%E6%89%A7%E8%A1%8C%E8%84%9A%E6%9C%AC/1.htm">跨站执行脚本</a>
                                    <div>跨站脚本攻击(XSS)是web应用程序中最危险和最常见的安全漏洞之一。安全研究人员发现这个漏洞在最受欢迎的网站,包括谷歌、Facebook、亚马逊、PayPal,和许多其他网站。如果你看看bug赏金计划,大多数报告的问题属于 XSS。为了防止跨站脚本攻击,浏览器也有自己的过滤器,但安全研究人员总是想方设法绕过这些过滤器。这个漏洞是通常用于执行cookie窃取、恶意软件传播,会话劫持,恶意重定向。在</div>
                                </li>
                                <li><a href="/article/2259.htm"
                                       title="[开源项目与投资]投资开源项目之前需要统计该项目已有的用户数" target="_blank">[开源项目与投资]投资开源项目之前需要统计该项目已有的用户数</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE/1.htm">开源项目</a>
                                    <div> 
 
 
        现在国内和国外,特别是美国那边,突然出现很多开源项目,但是这些项目的用户有多少,有多少忠诚的粉丝,对于投资者来讲,完全是一个未知数,那么要投资开源项目,我们投资者必须准确无误的知道该项目的全部情况,包括项目发起人的情况,项目的维持时间..项目的技术水平,项目的参与者的势力,项目投入产出的效益.....</div>
                                </li>
                                <li><a href="/article/2386.htm"
                                       title="oracle alert log file(告警日志文件)" target="_blank">oracle alert log file(告警日志文件)</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E5%91%8A%E8%AD%A6%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6/1.htm">告警日志文件</a><a class="tag" taget="_blank" href="/search/alert+log+file/1.htm">alert log file</a>
                                    <div>The alert log is a chronological log of messages and errors, and includes the following items: 
 
All internal errors (ORA-00600), block corruption errors (ORA-01578), and deadlock errors (ORA-00060) </div>
                                </li>
                                <li><a href="/article/2513.htm"
                                       title="关于 CAS SSO 文章声明" target="_blank">关于 CAS SSO 文章声明</a>
                                    <span class="text-muted">denger</span>
<a class="tag" taget="_blank" href="/search/SSO/1.htm">SSO</a>
                                    <div>由于几年前写了几篇 CAS 系列的文章,之后陆续有人参照文章去实现,可都遇到了各种问题,同时经常或多或少的收到不少人的求助。现在这时特此说明几点: 
 
1.  那些文章发表于好几年前了,CAS 已经更新几个很多版本了,由于近年已经没有做该领域方面的事情,所有文章也没有持续更新。 
 
2. 文章只是提供思路,尽管 CAS 版本已经发生变化,但原理和流程仍然一致。最重要的是明白原理,然后</div>
                                </li>
                                <li><a href="/article/2640.htm"
                                       title="初二上学期难记单词" target="_blank">初二上学期难记单词</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/english/1.htm">english</a><a class="tag" taget="_blank" href="/search/word/1.htm">word</a>
                                    <div>lesson 课 
traffic 交通 
matter 要紧;事物 
happy 快乐的,幸福的 
second 第二的 
idea 主意;想法;意见 
mean 意味着 
important 重要的,重大的 
never 从来,决不 
afraid 害怕 的 
fifth 第五的 
hometown 故乡,家乡 
discuss 讨论;议论 
east 东方的 
agree 同意;赞成 
bo</div>
                                </li>
                                <li><a href="/article/2767.htm"
                                       title="uicollectionview 纯代码布局, 添加头部视图" target="_blank">uicollectionview 纯代码布局, 添加头部视图</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/Collection/1.htm">Collection</a>
                                    <div>#import <UIKit/UIKit.h>

@interface myHeadView : UICollectionReusableView
{
    UILabel   *TitleLable;
}
-(void)setTextTitle;
@end
 
#import "myHeadView.h"

@implementation m</div>
                                </li>
                                <li><a href="/article/2894.htm"
                                       title="N 位随机数字串的 JAVA 生成实现" target="_blank">N 位随机数字串的 JAVA 生成实现</a>
                                    <span class="text-muted">FX夜归人</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Math/1.htm">Math</a><a class="tag" taget="_blank" href="/search/%E9%9A%8F%E6%9C%BA%E6%95%B0/1.htm">随机数</a><a class="tag" taget="_blank" href="/search/Random/1.htm">Random</a>
                                    <div>/**
 * 功能描述 随机数工具类<br />
 * @author FengXueYeGuiRen
 * 创建时间 2014-7-25<br />
 */
public class RandomUtil {
    //  随机数生成器
    private static java.util.Random random = new java.util.R</div>
                                </li>
                                <li><a href="/article/3021.htm"
                                       title="Ehcache(09)——缓存Web页面" target="_blank">Ehcache(09)——缓存Web页面</a>
                                    <span class="text-muted">234390216</span>
<a class="tag" taget="_blank" href="/search/ehcache/1.htm">ehcache</a><a class="tag" taget="_blank" href="/search/%E9%A1%B5%E9%9D%A2%E7%BC%93%E5%AD%98/1.htm">页面缓存</a>
                                    <div>页面缓存 
目录 
1       SimplePageCachingFilter 
1.1      calculateKey 
1.2      可配置的初始化参数 
1.2.1     cach</div>
                                </li>
                                <li><a href="/article/3148.htm"
                                       title="spring中少用的注解@primary解析" target="_blank">spring中少用的注解@primary解析</a>
                                    <span class="text-muted">jackyrong</span>
<a class="tag" taget="_blank" href="/search/primary/1.htm">primary</a>
                                    <div>这次看下spring中少见的注解@primary注解,例子 
 
 

@Component
public class MetalSinger implements Singer{

    @Override
    public String sing(String lyrics) {
        return "I am singing with DIO voice</div>
                                </li>
                                <li><a href="/article/3275.htm"
                                       title="Java几款性能分析工具的对比" target="_blank">Java几款性能分析工具的对比</a>
                                    <span class="text-muted">lbwahoo</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>Java几款性能分析工具的对比 
摘自:http://my.oschina.net/liux/blog/51800 
  
在给客户的应用程序维护的过程中,我注意到在高负载下的一些性能问题。理论上,增加对应用程序的负载会使性能等比率的下降。然而,我认为性能下降的比率远远高于负载的增加。我也发现,性能可以通过改变应用程序的逻辑来提升,甚至达到极限。为了更详细的了解这一点,我们需要做一些性能</div>
                                </li>
                                <li><a href="/article/3402.htm"
                                       title="JVM参数配置大全" target="_blank">JVM参数配置大全</a>
                                    <span class="text-muted">nickys</span>
<a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">应用服务器</a>
                                    <div>JVM参数配置大全 
 
/usr/local/jdk/bin/java -Dresin.home=/usr/local/resin -server -Xms1800M -Xmx1800M -Xmn300M -Xss512K -XX:PermSize=300M -XX:MaxPermSize=300M -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=5 -</div>
                                </li>
                                <li><a href="/article/3529.htm"
                                       title="搭建 CentOS 6 服务器(14) - squid、Varnish" target="_blank">搭建 CentOS 6 服务器(14) - squid、Varnish</a>
                                    <span class="text-muted">rensanning</span>
<a class="tag" taget="_blank" href="/search/varnish/1.htm">varnish</a>
                                    <div>(一)squid 
 
安装 
 
# yum install httpd-tools -y
# htpasswd -c -b /etc/squid/passwords squiduser 123456
# yum install squid -y 
 
设置 
 
# cp /etc/squid/squid.conf /etc/squid/squid.conf.bak
# vi /etc/</div>
                                </li>
                                <li><a href="/article/3656.htm"
                                       title="Spring缓存注解@Cache使用" target="_blank">Spring缓存注解@Cache使用</a>
                                    <span class="text-muted">tom_seed</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                    <div>参考资料 
http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/ 
http://swiftlet.net/archives/774 
  
缓存注解有以下三个: 
@Cacheable      @CacheEvict     @CachePut</div>
                                </li>
                                <li><a href="/article/3783.htm"
                                       title="dom4j解析XML时出现"java.lang.noclassdeffounderror: org/jaxen/jaxenexception"错误" target="_blank">dom4j解析XML时出现"java.lang.noclassdeffounderror: org/jaxen/jaxenexception"错误</a>
                                    <span class="text-muted">xp9802</span>

                                    <div>java.lang.NoClassDefFoundError: org/jaxen/JaxenExc 
关键字: java.lang.noclassdeffounderror: org/jaxen/jaxenexception 
使用dom4j解析XML时,要快速获取某个节点的数据,使用XPath是个不错的方法,dom4j的快速手册里也建议使用这种方式 
执行时却抛出以下异常: 
Exceptio</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>