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/1903854715993649152.htm"
                           title="编译乱序 vs 执行乱序" target="_blank">编译乱序 vs 执行乱序</a>
                        <span class="text-muted">三境界</span>
<a class="tag" taget="_blank" href="/search/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/1.htm">操作系统</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91/1.htm">驱动开发</a>
                        <div>背景今天留意了一下linux内核对writel和readl的实现,涉及到了dmb,imb这类屏障指令,过去对这类机制的了解比较模糊,所以查阅了一些资料,做一下记录。#if__LINUX_ARM_ARCH__>=7#defineisb(option)__asm____volatile__("isb"#option:::"memory")#definedsb(option)__asm____volat</div>
                    </li>
                    <li><a href="/article/1903853327066656768.htm"
                           title="Qemu&KVM 第一篇 (3)QEMU 架构" target="_blank">Qemu&KVM 第一篇 (3)QEMU 架构</a>
                        <span class="text-muted">weixin_34160277</span>
<a class="tag" taget="_blank" href="/search/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/1.htm">操作系统</a>
                        <div>QEMU架构我们首先了解一下QEMU如何实现仿真。本节将介绍QEMU的两种操作模式,以及QEMU动态翻译程序的一些有趣特点。QEMU基本操作QEMU支持两种操作模式:用户模式仿真和系统模式仿真。用户模式仿真允许一个CPU构建的进程在另一个CPU上执行(执行主机CPU指令的动态翻译并相应地转换Linux系统调用)。系统模式仿真允许对整个系统进行仿真,包括处理器和配套的外围设备。在x86主机系统上仿真</div>
                    </li>
                    <li><a href="/article/1903851055628742656.htm"
                           title="QEMU源码全解析 —— CPU虚拟化(12)" target="_blank">QEMU源码全解析 —— CPU虚拟化(12)</a>
                        <span class="text-muted">蓝天居士</span>
<a class="tag" taget="_blank" href="/search/QEMU%2FKVM/1.htm">QEMU/KVM</a><a class="tag" taget="_blank" href="/search/QEMU/1.htm">QEMU</a><a class="tag" taget="_blank" href="/search/KVM/1.htm">KVM</a><a class="tag" taget="_blank" href="/search/CPU%E8%99%9A%E6%8B%9F%E5%8C%96/1.htm">CPU虚拟化</a>
                        <div>接前一篇文章:本文内容参考:《趣谈Linux操作系统》——刘超,极客时间《QEMU/KVM》源码解析与应用——李强,机械工业出版社《深度探索Linux系统虚拟化原理与实现》——王柏生谢广军,机械工业出版社特此致谢!三、KVM模块初始化介绍1.KVM简介与源码组织结构KVM全称为Kernel-BasedVirtualMachine,中文译为基于内核的虚拟化技术。KVM是由以色列初创公司Qumrane</div>
                    </li>
                    <li><a href="/article/1903846389566205952.htm"
                           title="Docker 容器基础技术:namespace" target="_blank">Docker 容器基础技术:namespace</a>
                        <span class="text-muted">寻雾&启示</span>
<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><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>在容器内进程是隔离的,比如容器有自己的网络和文件系统,容器内进程的PID为1,这些都是依赖于Linuxnamespace所提供的隔离机制。本篇我们来了解下Linux有哪些namespace,以及它们是如何实现隔离的。文中案例代码均由ChatGPT生成,在Linux内核5.15.0-124-generic,ubuntu22.04LTS系统上测试通过。namespace类型每个进程都有自己所属的nam</div>
                    </li>
                    <li><a href="/article/1903845003264847872.htm"
                           title="Linux系统编程:目录操作、文件权限与库管理" target="_blank">Linux系统编程:目录操作、文件权限与库管理</a>
                        <span class="text-muted">网恋东雪莲被骗114514</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>Linux系统编程:目录操作、文件权限与库管理目录的读取在Linux系统编程中,目录操作是常见的任务之一。以下是用于目录操作的核心函数及其用法:1.opendir功能:打开一个目录,返回指向目录流的指针。原型:#includeDIR*opendir(constchar*name);参数:name:目录路径字符串。返回值:成功:返回DIR*指针;失败返回NULL。示例:DIR*dir=opendir</div>
                    </li>
                    <li><a href="/article/1903825584694292480.htm"
                           title="Linux脚本实践1" target="_blank">Linux脚本实践1</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/%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/%E8%84%9A%E6%9C%AC/1.htm">脚本</a>
                        <div>前言日常在Liunx中用到多个版本的java修改很麻烦,一个脚本搞定。1.准备两个jdk(如下图所示)2.准备脚本文件viswitch_jdk.sh#!/bin/bash#提示用户输入JDK路径read-p"请输入JDK的绝对路径(例如/usr/local/jdk/jdk-11.0.21):"jdk_path#检查输入的路径是否存在if[!-d"$jdk_path"];thenecho"错误:路径</div>
                    </li>
                    <li><a href="/article/1903821676244692992.htm"
                           title="Docker之安装与配置" target="_blank">Docker之安装与配置</a>
                        <span class="text-muted">雨五夜</span>
<a class="tag" taget="_blank" href="/search/Docker/1.htm">Docker</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><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>Docker之安装与配置一、Docker环境配置1.基本配置2.镜像加速3.网络配置4.数据持久化5.优化建议6.常见问题与解决方案7.补充工具二、Docker配置本地仓库指南1.拉取Registry镜像2.启动本地仓库3.配置Docker客户端Linux/macOSWindows4.推送镜像到本地仓库标记镜像推送镜像5.推送镜像到本地仓库6.管理本地仓库7.优化与安全性8.常见问题一、Docke</div>
                    </li>
                    <li><a href="/article/1903820538418098176.htm"
                           title="Linux中的 mutex [二] —— 乐观自旋机制" target="_blank">Linux中的 mutex [二] —— 乐观自旋机制</a>
                        <span class="text-muted">jianchi88</span>
<a class="tag" taget="_blank" href="/search/%E5%86%85%E6%A0%B8%E5%90%8C%E6%AD%A5/1.htm">内核同步</a><a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/%E7%A8%B3%E5%AE%9A%E6%80%A7/1.htm">稳定性</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</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/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a>
                        <div>本文基于5.4.86版本内核mutex可视作是spinlock的可睡眠版本,同样是线程无法继续向前执行,但spinlock是"spin",导致该CPU上无法发生线程切换,而mutex是"block"(我们通常翻译成「阻塞」),可以发生线程切换,让所在CPU上的其他线程继续执行。阻塞既可以发生在线程试图获取mutex时,也可以发生在线程持有mutex时。现在的mutex机制,要从这几方面纬度理解:o</div>
                    </li>
                    <li><a href="/article/1903817384968384512.htm"
                           title="Linux中mutex机制" target="_blank">Linux中mutex机制</a>
                        <span class="text-muted">C嘎嘎嵌入式开发</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/%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中,mutex是一种用于多线程编程的同步机制,用于保护共享资源,防止多个线程同时访问或修改这些资源,从而避免竞态条件的发生。mutex是“mutualexclusion”的缩写,意为“互斥”。1.Mutex的基本概念互斥锁:mutex是一种锁机制,用于确保在任何时刻只有一个线程可以访问共享资源。当一个线程持有mutex时,其他试图获取该mutex的线程将被阻塞,直到持有mutex的线程</div>
                    </li>
                    <li><a href="/article/1903812341389127680.htm"
                           title="epoll成员函数介绍" target="_blank">epoll成员函数介绍</a>
                        <span class="text-muted">C嘎嘎嵌入式开发</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/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>epoll_create1epoll_create1是Linux系统中用于创建一个新的epoll实例的系统调用。epoll是一种高效的I/O事件通知机制,常用于处理大量的文件描述符(如套接字)。epoll_create1是epoll_create的改进版本,提供了更多的灵活性。函数原型intepoll_create1(intflags);参数说明flags类型:int描述:用于指定创建epoll实</div>
                    </li>
                    <li><a href="/article/1903807925160308736.htm"
                           title="Linux内核同步机制之(八):mutex" target="_blank">Linux内核同步机制之(八):mutex</a>
                        <span class="text-muted">ikt4435</span>
<a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                        <div>一、Mutex锁简介在linux内核中,互斥量(mutex,即mutualexclusion)是一种保证串行化的睡眠锁机制。和spinlock的语义类似,都是允许一个执行线索进入临界区,不同的是当无法获得锁的时候,spinlock原地自旋,而mutex则是选择挂起当前线程,进入阻塞状态。正因为如此,mutex无法在中断上下文使用。和mutex更类似的机制(无法获得锁时都会阻塞)是binarysem</div>
                    </li>
                    <li><a href="/article/1903799979433062400.htm"
                           title="嵌入式Linux驱动开发:从基础知识到实践精通" target="_blank">嵌入式Linux驱动开发:从基础知识到实践精通</a>
                        <span class="text-muted">坚持坚持那些年</span>

                        <div>本文还有配套的精品资源,点击获取简介:嵌入式Linux由于其稳定性、可定制性和丰富资源,在智能设备领域得到广泛应用。掌握嵌入式Linux驱动程序设计对于开发者至关重要。本课程从基础知识点出发,详细介绍了内核接口理解、设备树编程、I/O操作、字符与块设备驱动、网络驱动、电源管理、调试技巧、硬件抽象层、设备模型和模块化编程等关键技能,并通过实际操作实践来强化学习,帮助开发者成长为嵌入式Linux驱动开</div>
                    </li>
                    <li><a href="/article/1903758739748483072.htm"
                           title="linux脚本怎么访问http,如何使用现有的tcp连接从bash脚本访问http服务器?" target="_blank">linux脚本怎么访问http,如何使用现有的tcp连接从bash脚本访问http服务器?</a>
                        <span class="text-muted">玲珑阁玉韦</span>
<a class="tag" taget="_blank" href="/search/linux%E8%84%9A%E6%9C%AC%E6%80%8E%E4%B9%88%E8%AE%BF%E9%97%AEhttp/1.htm">linux脚本怎么访问http</a>
                        <div>在bashshellscipt中,我使用几个命令行工具(wget,curl,httpie)来测试我的http服务器.当使用例如curl调用GET请求,我看到tcp连接打开到我的服务器并在http通信完成后立即关闭.$curlhttp://10.5.1.1/favicon.ico-o/dev/null为了更好地测试我的服务器的保持活动行为,我想在多个http请求/响应周期中保持tcp连接打开.我可以</div>
                    </li>
                    <li><a href="/article/1903758611998371840.htm"
                           title="ngx_http_conf_port_t" target="_blank">ngx_http_conf_port_t</a>
                        <span class="text-muted">若云止水</span>
<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%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>定义在src\http\ngx_http_core_module.htypedefstruct{ngx_int_tfamily;in_port_tport;ngx_array_taddrs;/*arrayofngx_http_conf_addr_t*/}ngx_http_conf_port_t;该结构体用于在Nginx配置阶段存储监听端口的配置信息,是listen指令解析后的核心数据结构。它将同一</div>
                    </li>
                    <li><a href="/article/1903754192254726144.htm"
                           title="systemd-networkd NetworkManager 介绍" target="_blank">systemd-networkd NetworkManager 介绍</a>
                        <span class="text-muted">追心嵌入式</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>systemd-networkd和NetworkManager的详细介绍systemd-networkd和NetworkManager都是Linux系统中常用的网络管理工具,但它们的设计目标和使用场景不同。以下是它们的详细介绍、功能、使用场景和差异。1.systemd-networkdsystemd-networkd是一个由systemd提供的网络管理工具,旨在为Linux系统提供网络配置和管理的</div>
                    </li>
                    <li><a href="/article/1903753055858388992.htm"
                           title="【Linux 下的 bash 无法正常解析, Windows 的 CRLF 换行符问题导致的】" target="_blank">【Linux 下的 bash 无法正常解析, Windows 的 CRLF 换行符问题导致的】</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/bash/1.htm">bash</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a>
                        <div>文章目录报错原因:解决办法:方法一:用`dos2unix`修复方法二:手动转换换行符方法三:VSCode或其他编辑器手动改总结这个错误很常见,原因是你的wait_for_gpu.sh脚本文件格式不对,具体来说是Windows的CRLF换行符问题导致的,Linux下的bash无法正常解析。hadoop@hadoop:~/anaconda3$bashwait_for_gpu.sh:invalidopt</div>
                    </li>
                    <li><a href="/article/1903752171623608320.htm"
                           title="Linux部署模型报错OSError: Error no file named pytorch_model.bin, tf_model.h5, model.ckpt.index or flax_mod" target="_blank">Linux部署模型报错OSError: Error no file named pytorch_model.bin, tf_model.h5, model.ckpt.index or flax_mod</a>
                        <span class="text-muted">dkgee</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/pytorch/1.htm">pytorch</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>报错内容:OSError:Errornofilenamedpytorch_model.bin,tf_model.h5,model.ckpt.indexorflax_model.msgpackfoundindirectory主要原因是transformer版本不对,需要升级pipinstall--upgradehuggingface_hubpipinstalltransformers[torch]其</div>
                    </li>
                    <li><a href="/article/1903748010672713728.htm"
                           title="Xilinx系ZYNQ学习笔记(二)ZYNQ入门及点亮LED灯" target="_blank">Xilinx系ZYNQ学习笔记(二)ZYNQ入门及点亮LED灯</a>
                        <span class="text-muted">贾saisai</span>
<a class="tag" taget="_blank" href="/search/FPGA%E5%AD%A6%E4%B9%A0/1.htm">FPGA学习</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/fpga%E5%BC%80%E5%8F%91/1.htm">fpga开发</a>
                        <div>系列文章目录文章目录系列文章目录前言简单介绍简称xc7z020型号FPGAZYNQ实操通用IO点亮LED灯硬件逻辑基础前言简单入门一下ZYNQ是何种架构,如何编程,至于深入了解应该要分开深入学习Linux和FPGA简单介绍其基本架构都是在同一个硅片上集成FPGA和CPU,并通过高速、高带宽的互联架构连接起来。ARM的顺序控制、丰富外设,开源驱动、FPGA的并行运算、高速接口、灵活定制、数字之王的特</div>
                    </li>
                    <li><a href="/article/1903745866334793728.htm"
                           title="Ubuntu 20.04 安装并使用Cursor" target="_blank">Ubuntu 20.04 安装并使用Cursor</a>
                        <span class="text-muted">爱学习的小道长</span>
<a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</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/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a>
                        <div>1.安装1.1下载cursor官网:https://www.cursor.com/cn点击下载LINUX查看下载下来的文件:$ls~/Downloads/Cursor-0.47.8-82ef0f61c01d079d1b7e5ab04d88499d5af500e3.deb.glibc2.25-x86_64.AppImage/home/xxx/Downloads/Cursor-0.47.8-82ef0</div>
                    </li>
                    <li><a href="/article/1903734140587536384.htm"
                           title="linux 逻辑卷LVM" target="_blank">linux 逻辑卷LVM</a>
                        <span class="text-muted">IT小饕餮</span>
<a class="tag" taget="_blank" href="/search/linux%E5%9F%BA%E7%A1%80/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>LVM(LogicalVolumeManager)逻辑卷管理是一种在Linux系统中用于管理磁盘空间的技术,它提供了一种灵活、高效的方式来管理硬盘分区和卷。以下是关于LVM逻辑管理的详细介绍:LVM的基本概念物理卷(PhysicalVolume,PV)物理卷是LVM的基本组成部分,可以是一块磁盘、也可以是一个分区。物理卷是LVM存储的基础,用于提供实际的存储空间。卷组(VolumeGroup,VG</div>
                    </li>
                    <li><a href="/article/1903731241321033728.htm"
                           title="nginx-部署Python网站项目" target="_blank">nginx-部署Python网站项目</a>
                        <span class="text-muted">skyQAQLinux</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>一、部署Python网站项目实验要求配置Nginx使其可以将动态访问转交给uWSGI安装Python工具及依赖1)拷贝软件到proxy主机[root@server1~]#scp-r/linux-soft/s2/wk/python/192.168.99.5:/root2)安装python依赖软件[root@proxy~]#yum-yinstallgccmakepython3python3-devel</div>
                    </li>
                    <li><a href="/article/1903726950451572736.htm"
                           title="AWS CLI with MinIO Server" target="_blank">AWS CLI with MinIO Server</a>
                        <span class="text-muted">库海无涯</span>
<a class="tag" taget="_blank" href="/search/aws/1.htm">aws</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a>
                        <div>1、InstallMinIOServerhttps://min.io/docs/minio/linux/index.htmlCreateAKandSKandrecordinformation.AK:ZYYMPcLi6dSPsDfr5QeWSK:Am3m2qtpkUk2wAgT5dPbpE4hGD2tX7a6RpjsbeEdAndcreateabucketnamedaswtest.2、Install</div>
                    </li>
                    <li><a href="/article/1903720390950187008.htm"
                           title="RK3588开发笔记-buildroot添加telnet服务" target="_blank">RK3588开发笔记-buildroot添加telnet服务</a>
                        <span class="text-muted">flypig哗啦啦</span>
<a class="tag" taget="_blank" href="/search/RK3588/1.htm">RK3588</a><a class="tag" taget="_blank" href="/search/buildroot/1.htm">buildroot</a><a class="tag" taget="_blank" href="/search/busybox/1.htm">busybox</a>
                        <div>目录前言一、Telnet服务背景与适用场景二、telnet服务开启Busybox配置三、固件编译及烧录RK3588烧录验证客户端连接测试3.1Linux/MacOS连接3.2Windows连接总结前言本文主要介绍在RK3588SDK文件包中添加telnet服务,由于sdkbuildroot默认添加的是ssh服务,如用户需要主动开启telnet,则需要另外在busybox中开启telnetd服务,下</div>
                    </li>
                    <li><a href="/article/1903718243995021312.htm"
                           title="安卓 vs iOS 文件系统深度解析:开放自由与封闭安全的终极博弈" target="_blank">安卓 vs iOS 文件系统深度解析:开放自由与封闭安全的终极博弈</a>
                        <span class="text-muted">jingling1007</span>
<a class="tag" taget="_blank" href="/search/Android/1.htm">Android</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8%E6%80%A7%E6%B5%8B%E8%AF%95/1.htm">安全性测试</a>
                        <div>安卓和iOS的差异远不止于界面和生态,它们的文件系统设计更是体现了两种截然不同的技术哲学。安卓的开放目录允许用户“为所欲为”,而iOS的沙盒机制则像一座密不透风的堡垒。本文将通过技术细节对比、真实场景案例、用户操作指南,深度剖析两大系统的核心设计,回答一个关键问题:谁的设计更能平衡自由与安全?一、文件系统架构:从根目录到沙盒1.安卓:Linux的开放基因目录结构全景根目录(/):包含所有系统层级(</div>
                    </li>
                    <li><a href="/article/1903714960052121600.htm"
                           title="Linux线程控制封装及线程互斥" target="_blank">Linux线程控制封装及线程互斥</a>
                        <span class="text-muted">z一一m</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>
                        <div>1.clone函数的使用#define_GNU_SOURCE#include#includeintclone(int(*fn)(void*),void*child_stack,intflags,void*arg,...);fn:子进程或线程的入口函数child_stack:子进程的栈地址,通常需要手动分配,栈的大小需要足够容纳子进程变量的局部变量和函数调用。flags:控制子进程或线程共享哪些资源</div>
                    </li>
                    <li><a href="/article/1903712178582646784.htm"
                           title="Docker-部署ES和Kibana" target="_blank">Docker-部署ES和Kibana</a>
                        <span class="text-muted">相逢太短,莫等茶凉</span>
<a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/elasticsearch/1.htm">elasticsearch</a><a class="tag" taget="_blank" href="/search/mac/1.htm">mac</a>
                        <div>资料kibana和elasticserch兼容性表https://www.elastic.co/cn/support/matrix#matrix_compatibilityMac系统安装需要版本支持linux/arm64,需要两个都要支持有arm64,有些es支持,kibana不支持。ps:dockerpullelasticsearch出现elasticsearch:latestnotfound,</div>
                    </li>
                    <li><a href="/article/1903711044568674304.htm"
                           title="Linux——Linux系统编程之基于TFTP实现服务器与开发板间的文件传输实战总结" target="_blank">Linux——Linux系统编程之基于TFTP实现服务器与开发板间的文件传输实战总结</a>
                        <span class="text-muted">Winter_world</span>
<a class="tag" taget="_blank" href="/search/Linux%E7%B3%BB%E7%BB%9F/1.htm">Linux系统</a><a class="tag" taget="_blank" href="/search/TFTP%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA/1.htm">TFTP服务器搭建</a><a class="tag" taget="_blank" href="/search/TFTP%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93/1.htm">TFTP文件传输</a>
                        <div>目录0引言1TFTP服务器搭建1.1TFTP基础1.2Ubuntu搭建TFTP服务器1.3测试TFTP服务器2开发板实现TFTP文件传输2.1同一网段2.2配置2.3客户端与服务器的通信0引言我们前面总结的Linux字符设备、串口编程博文中,在虚拟机中编译得到可执行文件后,都是通过U盘连接开发板进行测试验证的,或者就是把可执行文件编译到最小系统中,再OTG烧写进开发板,这两种方法都比较麻烦,这里我</div>
                    </li>
                    <li><a href="/article/1903697894897152000.htm"
                           title="docker避免容器中的内容被挂载的空目录覆盖(比如nginx的html目录)" target="_blank">docker避免容器中的内容被挂载的空目录覆盖(比如nginx的html目录)</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/dockervolume/1.htm">dockervolume</a>
                        <div>我有一个镜像jb:1.0,镜像中/jb下有一些内容需要挂载到宿主机来dockervolumecreatejb_volumedockerrun--namejb-v/home/dcw/data:/data--mountsource=jb,target=/jb-itdjb:1.0如果想修改宿主机中的内容可以通过下面命令找到挂载的内容在宿主机的位置dockerinspectjbimage.png</div>
                    </li>
                    <li><a href="/article/1903694906971451392.htm"
                           title="宝塔安装mayfly-go" target="_blank">宝塔安装mayfly-go</a>
                        <span class="text-muted">mayans005</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>mayfly-go:web版linux(终端文件脚本进程)、数据库(mysqlpgsql)、redis(单机哨兵集群)、mongo统一管理操作平台。1、终端执行命令下载程序包wgethttps://gitee.com/objs/mayfly-go/releases/download/v1.3.0/mayfly-go-linux-amd64.zip2、在宝塔新建一个MySQL数据库,将下载程序包中的</div>
                    </li>
                    <li><a href="/article/1903692383581696000.htm"
                           title="开源项目推荐:Mayfly-go" target="_blank">开源项目推荐:Mayfly-go</a>
                        <span class="text-muted">周风队</span>

                        <div>开源项目推荐:Mayfly-gomayfly-goweb版linux(终端文件脚本进程)、数据库(mysqlpgsql高斯达梦)、redis(单机哨兵集群)、mongo统一管理操作平台。项目地址:https://gitcode.com/gh_mirrors/ma/mayfly-goMayfly-go是一个基于浏览器的统一管理操作平台,它支持多种数据库和系统管理功能。该项目主要使用Go语言和前端框架</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>