Tomcat是用来解析jsp程序的一个软件,Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。因为Tomcat技术先进、性能稳定,而且免费,成为目前比较流行的Web 应用服务器。
Tomcat是一个轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。实际上Tomcat 部分是Apache服务器的扩展,但它是独立运行的,所以当运行tomcat时,它实际上作为一个与Apache 独立的进程单独运行的。

Tomcat的安装分为两个步骤:安装JDK和安装Tomcat.
JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。所以要想运行jsp的程序必须要有JDK的支持,因此安装Tomcat的前提是安装好JDK。

一、JDK1.8.0_102 64位安装

1、JDK官方下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

cd /usr/local/src

wget http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jdk-8u102-linux-x64.rpm

yum �y install jdk-8u102-linux-x64.rpm

2、设置JDK环境变量

查询JDK的安装目录:

[root@localhost local]# yum list installed |grep jdk
jdk1.8.0_102.x86_64 2000:1.8.0_102-fcs @/jdk-8u102-linux-x64
[root@localhost local]# rpm �ql jdk1.8.0_102.x86_64

根据安装目录修改配置文件:

vim /etc/profile
在末尾输入以下内容:


JAVA_HOME=/usr/java/jdk1.8.0_102/
JAVA_BIN=/usr/java/jdk1.8.0_102/bin
JRE_HOME=/usr/java/jdk1.8.0_102/jre
PATH=$PATH:/usr/java/jdk1.8.0_102/bin:/usr/java/jdk1.8.0_102/jre/bin
CLAsspATH=/usr/java/jdk1.8.0_102/jre/lib:/usr/java/jdk1.8.0_102/lib:/usr/java/jdk1.8.0_102/jre/lib/charsets.jar
export JAVA_HOME JAVA_BIN JRE_HOME PATH CLAsspATH

保存文件后,使其生效:
source /etc/profile
检测是否设置正确:
java -version
如果显示如下内容,则配置正确:
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14,mixed mode)

二、安装Tomcat

1、下载Tomcat 9.0.0.M10并解压

Tomcat官方网站:http://tomcat.apache.org/

wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.0.M10/bin/apache-tomcat-9.0.0.M10.tar.gz

tar xvf apache-tomcat-9.0.0.M10.tar.gz

mv apache-tomcat-9.0.0.M10 /usr/local/tomcat

2、Tomcat启动环境配置

Tomcat真的是非常的简洁,属于纯绿色软件,直接下载下来解压就完成了安装。稍加配置即可顺利运行,具体的配置步骤参见$CATALINA_HOME/RUNNING.txt文件,说的非常清楚。基本原理是:Tomcat已经做了控制启动与停止的脚本bin/catalina.sh,此脚本顺利执行的唯一必须前提是,知道JDK安装路径。Tomcat官方建议新建一个bin/setevn.sh的文件,并在其中设置环境变量JAVA_HOME,因为catalina.sh文件里会自动读取setenv.sh。启动脚本会根据JAVA_HOME自动设置CLAsspATH以及CATALINA_HOME等其他环境变量,无需用户直接参与。此后就可以通过bin/catalina.sh start来启动,通过bin/catalina.sh stop来关闭Tomcat了。


vim /usr/local/tomcat/bin/catalina.sh

在第二行加入以下内容:

JAVA_HOME=/usr/java/jdk1.8.0_102/
CATALINA_HOME=/usr/local/tomcat

3、启动和关闭Tomcat

  • 启动:

/usr/local/tomcat/bin/startup.sh

or

/usr/local/tomcat/bin/catalina.sh start

  • 关闭:

/usr/local/tomcat/bin/shutdown.sh

or

/usr/local/tomcat/bin/catalina.sh stop

  • 注意:如果没有配置防火墙允许Tomcat通过,最好先关闭防火墙,不然端口不能访问。

systemctl stop firewalld.service

  • 查看是否启动成功:

ps aux |grep tomcat
如果有进程的话,在浏览器中输入http://IP:8080/就会看到tomcat的主界面。


三、配置Tomcat

1、配置tomcat服务的访问端口
tomcat默认启动的是8080,如果你想修改为80,则需要修改server.xml文件:
vim /usr/local/tomcat/conf/server.xml
找到:
<Connector port="8080" protocol="HTTP/1.1"
修改为:
<Connector port="80" protocol="HTTP/1.1"

保存后关闭服务再重启

/usr/local/tomcat/bin/shutdown.sh

/usr/local/tomcat/bin/startup.sh


四、测试网站

1、在本机上测试

curl -xlocalhost:80 localhost

2、在网络中的浏览器上测试

在可以连通服务器的其它电脑的浏览器上输入地址:

http://IP (如:http://192.168.222.200/)



+--------------------------------server.xml配置文件解释-----------------------------------+

1、server的结构

tomcat-startup.gif?_=2334187

2、该文件描述了如何启动Tomcat Server

<Server><Listener/><GlobaNamingResources></GlobaNamingResources<Service><Connector/><Engine><Logger/><Realm/><host><Logger/><Context/></host></Engine></Service></Server>


server.xml

“server.xml” 是 Tomcat 的主配置文件,在 <CATALINA_HOME>conf 目录下可以看到。重构后(删掉注释和格式化后)的默认”server.xml“文件如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

<?xml version='1.0' encoding='utf-8'?>

<Server port="8005" shutdown="SHUTDOWN">

<Listener className="org.apache.catalina.core.JasperListener" />

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

<GlobalNamingResources>

<Resource name="UserDatabase" auth="Container"

type="org.apache.catalina.UserDatabase"

description="User database that can be updated and saved"

factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

pathname="conf/tomcat-users.xml" />

</GlobalNamingResources>

<Service name="Catalina">

<Connector port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443" />

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

<Engine name="Catalina" defaultHost="localhost">

<Realm className="org.apache.catalina.realm.LockOutRealm">

<Realm className="org.apache.catalina.realm.UserDatabaseRealm"

resourceName="UserDatabase"/>

</Realm>

<Host name="localhost" appBase="webapps"

unpackWARs="true" autoDeploy="true">

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

prefix="localhost_access_log." suffix=".txt"

pattern="%h %l %u %t "%r" %s %b" />

</Host>

</Engine>

</Service>

</Server>


1、Server

Server(第二行)是顶级组件,代表一个 Tomcat 实例。可以包含一个或多个 Services ,其中每个 Service 都有自己的 Engines 和 Connectors。

1

<Server port="8005" shutdown="SHUTDOWN"> ...... </Server>

1.1、基本属性

className使用 Java 实现类的名称。这个类必须实现 org.apache.catalina.Server 接口。如果没有指定类名,将会使用标准实现。

address server 在这个 TCP/IP 地址上监听一个 shutdown 命令。如果没有指定地址,将会使用 localhost。

portserver 在这个端口上监听一个 shutdown 命令。设置为 -1 表示禁用 shutdown 命令。

shutdown连接到指定端口的 TCP/IP 收到这个命令字符后,将会关闭 Tomcat。


2、Listeners

Server 可以包含几个监听器。一个监听器监听指定事件,并对其作出响应。

JasperListener 作用于 Jasper JSP 引擎,该引擎负责对更新后的 JSP 页面进行重编译。

1

Listener className="org.apache.catalina.core.JasperListener" />

GlobalResourcesLifecycleListener 作用于全局资源,保证 JNDI 对资源的可达性,比如数据库。

1

<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

2.1、基本属性

SSLEngine使用的SSLEngine名称。off:不使用 SSL,on:使用 SSL 但不指定引擎。默认值是 on。会初始化本地 SSL 引擎,对于使用 SSLEnabled 属性的 APR/native connector 来讲,该选项必须可用。

SSLRandomSeed:指定伪随机数生成器(PRNG)的随机数种子源,默认值为 builtin。在开发环境下,可能要将其设置为 /dev/urandom,以获得更快地启动速度。

FIPSMode设置为 on 会请求 OpenSSL 进入 FIPS 模式(如果 OpenSSL 已经处于 FIPS 模式,将会保留该模式)。设置为 enter 会强制 OpenSSL 进入 FIPS 模式(如果 OpenSSL 已经处于 FIPS 模式,将会产生一个错误)。设置为 require 要求 OpenSSL 已经处于 FIPS 模式(如果 OpenSSL 当前没有处于 FIPS 模式将会产生一个错误)。


3、全局命名资源

9到15行的元素定义了 JNDI(Java 命名和目录接口)资源,其允许 Java 软件客户端通过名称搜寻和查找数据。

默认配置通过10到14行的元素定义了一个名称为 UserDatabase 的 JNDI,通过”conf/tomcat-users.xml“得到了一个用于用户授权的内存数据库。

1

2

3

4

5

6

7

<GlobalNamingResources>

<Resource name="UserDatabase" auth="Container"

type="org.apache.catalina.UserDatabase"

description="User database that can be updated and saved"

factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

pathname="conf/tomcat-users.xml" />

</GlobalNamingResources>

你也可以定义其它全局化JNDI资源来实现连接池,比如 MysqL 数据库。


4、Services

一个 Service 可以连接一个或多个 Connectors 到一个引擎。默认配置定义了一个名为“Catalina”的 Service ,连接了两个 Connectors:HTTP 和 AJP 到当前的引擎。

1

<Service name="Catalina"> ...... </Service>

4.1、基本属性

className该实现使用的 Java 类名称。这个类必须实现 org.apache.catalina.Service 接口。如果没有指定类名称,将会使用标准实现。

nameService 的显示名称,如果采用了标准的 Catalina 组件,将会包含日志信息。每个 Service 与某个特定的 Server 关联的名称必须是唯一的。


5、Connectors

一个 Connector 关联到一个 TCP 端口,负责处理 Service 与客户端之间的交互。默认配置定义了两个 Connectors。

HTTP/1.1:处理 HTTP 请求,使得 Tomcat 成为了一个 HTTP 服务器。客户端可以通过 Connector 向服务器发送 HTTP 请求,接收服务器端的 HTTP 响应信息。

1

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

与生产服务默认使用80端口不同,Tomcat HTTP 服务默认在 TCP 端口8080上运行 。你可以选择1024到65535之间的任意数字作为端口号来运行 Tomcat 服务器,前提是该端口没有被任何其它应用使用。connectionTimeOut 属性定义了这个 connector 在链接获得同意之后,获得请求 URI line(请求信息)响应的最大等待时间毫秒数。默认为20秒。redirect 属性会把 SSL 请求重定向到 TCP 的8443端口。AJP/1.3:Apache JServ Protocol connector 处理 Tomcat 服务器与 Apache HTTP 服务器之间的交互。

1

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

可以将 Tomcat 和 Apache HTTP 服务运行在一起,Apache HTTP 服务器处理静态请求和 PHP;Tomcat 服务器负责处理 Java Servlet/JSP 。可以参阅“Tomcat 与 Apache 协同工作如何配置”。


6、容器

包含了 Engine、Host、Context和 Cluster 的 Tomcat 称为容器。最高级的是 Engine,最底层的是 Context。某些组件,比如 Realm 和 Valve,也可以放在容器中。


7、引擎

引擎是容器中最高级别的部分。可以包含一个或多个 Host。Tomcat 服务器可以配置为运行在多个主机名上,包括虚拟主机。

1

<Engine name="Catalina" defaultHost="localhost"/>

Catalina 引擎 从 HTTP connector 接收 HTTP 请求,并根据请求头部信息中主机名或 IP 地址重定向到正确的主机上。

7.1、基本属性

backgroundProcessorDelay ―― 这个值表示了在这个引擎和它的子容器上调用 backgroundProcess 方法之间间隔的秒数,包括所有 host 和 context。值为非负时不会调用子容器(意味着其使用自身的处理线程)。设置为正值会产生一个衍生线程。等待指定的时间之后,该线程会在这个引擎和它的所有子容器上调用 backgroundProcess 方法。如果没有指定,默认值为10,即会有10秒的延迟。

className实现该引擎使用的 Java 类名。该类必须实现 org.apache.catalina.Engine 接口。如果没有指定,会使用标准值(下面有定义)。

defaultHost默认主机名,定义了处理指向该服务器的请求所在主机的名称,但名称不是在这个文件中配置。

jvmRoute在负载均衡场景下必须定义该参数,来保证 session affinity 可用,对于集群中所有 Tomcat 服务器来讲定义的名称必须是唯一的, 该名称将会被添加到生成的会话标示符中,因此,允许前端代理总是将特定会话转发到同一个 Tomcat 实例。

name:Engine 的逻辑名称,用在日志和错误信息中。当在相同的 Server 中使用多个 Service 元素时,每个 Engine 必须指定一个唯一的名称。

startStopThreadsEngine 在启动 Host 子元素时将会并发使用的线程数目。如果设置为0,将会使用 Runtime.getRuntime().availableProcessors() 的值。设置为负数,将会使用 Runtime.getRuntime().availableProcessors() + value 的值,如果结果小于1,将会使用 1 个线程。如果没有指定,默认值为 1 。


8、Realm

一个 Realm(域)就是一个包含 user、password 和 role 认证(比如访问控制)的数据库。你可以在任何容器中定义 Realm ,例如 Engine、Host、Context 和 Cluster。

1

2

3

<Realm className="org.apache.catalina.realm.LockOutRealm">

<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>

</Realm>

默认配置定义了一个 Catalina Engine 的 Realm(UserDatabaseRealm),对用户访问 engine 的权限进行控制。其使用定义在 GlobalNamingResources 中,名字为 UserDatabase 的 JNDI。

除了 UserDatabaseRealm 以外,还有:JDBCRealm(授权用户是否可以通过 JDBC 驱动链接到关系型数据库);DataSourceRealm(通过 JNDI 连到数据源);JNDIRealm(连接到一个 LDAP 目录)和 MemoryRealm (将 XML 文件加载到内存)。

8.1、基本属性

className使用 Java 实现类的名称。这个类必须实现 org.apache.catalina.Realm 接口。


9、Hosts

一个 Host 定义了在 Engine 下的一个虚拟机,反过来其又支持多个 Context(web 应用)。

1

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"/>

默认配置定义了一个名为 localhost 的主机。appBase 属性定义了所有 webapp 的根目录,在这种情况下是 webapps。默认情况下,每一个 webapp 的 URL 和它所在的目录名称相同。例如,默认的 Tomcat 安装目录的 webapps 下提供了四个 web 应用:docs、examples、host-manager 和 manager。只有 ROOT 是个例外,它用一个空字符串定义。也就是说,它的 URL 是 http://localhost:8080/。unpackWARs 属性指定了放到 webapps 目录下的 WAR-file 是否应该被解压。对于 unpackWARs=”false“,Tomcat 将会直接从 WAR-file 运行应用,而不解压,这可能导致应用运行变慢。autoDeploy 属性指定了是否自动部署放到 webapps 目录下的应用。

9.1、基本属性

appBase虚拟机应用的根目录。该目录是一个可能包含部署到虚拟机上 web 应用的路径名。也可能是一个指定的绝对路径名,或者是一个相对于 $CATALINA_BASE 目录的路径名。如果没有指定,默认会使用 webapps。

xmlBase虚拟机 XML 根目录。该目录是一个可能包含部署到虚拟机上context XML 描述符的路径名。也可能是一个指定的绝对路径名,或者是一个相对于 $CATALINA_BASE 目录的路径名。如果没有指定,默认会使用 conf/ 目录。

createDirs如果设置为 true,Tomcat 将会在启动阶段,尝试创建一个由 appBase 和 xmlBase 属性定义的目录。默认值是 true。如果设置为 true ,并且目录创建失败,将会打印出一个错误信息,但是不会终止启动过程。

autoDeploy该属性的值指明了在 Tomcat 运行的时候,是否需要定时检查新的或者更新后的 web 应用。如果为 true,Tomcat 会定时检查 appBase 和 xmlBase 目录,并对找到的新 web 应用和 context XML 描述符进行部署。更新 web 应用 或 XML 上下文描述符将会触发 web 应用的重载。默认值为 true。

backgroundProcessorDelay表示在调用这台主机的 backgroundProcess 方法和它的子容器方法,包括所有的 context,之间延迟的秒数。如果延迟值不是负数的话,不会调用子容器(意味着会使用它们自己的处理线程)。设置为正数会产生衍生线程。在等待指定的时间之后,线程将会在该 host 上调用 backgroundProcess 方法,包括它的所有子容器。host将会使用后台进程执行web 应用部署相关的任务。如果没有指定,默认值为-1,意味着 host 将会依赖于它的父引擎的后台处理线程。

className使用的 Java 实现类的名称。该类必须实现 org.apache.catalina.Host 接口。

deployIgnore:一个正则表达式,定义了在自动部署和启动时部署的情况下需要忽略的目录。这就允许你在版本控制系统中保持自己的配置,例如,不会将 .svn 或者 CVS 文件夹部署到 appBase 目录下。该正则表达式是相对于 appBase 的。同时也是固定的,意味着是相对于整个文件或目录的名称进行的。因此,foo 只会匹配名称为 foo 的文件或目录,而不会匹配foo.war、foobar或者 myfooapp 这样的名称。如果想让“foo”匹配任意名称,可以使用 .*foo.*。

deployOnStartup指定在 Tomcat 启动时是否需要自动部署host下的 web 应用。默认值为 true。

failCtxIfServletStartFails设置为 true时,如果它的任意一个 load-on-startup>=0 的 servlet 停止自身启动后,停止启动它的每一个子 context 。每一个子 context 可能覆盖这个属性。如果没有指定,将会使用默认值 false。

name通常是虚拟主机的网络名称,注册在你的域名服务器上。无论指定的主机名称是什么样的,Tomcat 在内部都会将其转换为小写。嵌套在 Engine 内部的 Host ,其中必须有一个 Host 的名称匹配 Engine 的默认 Host 设置。

startStopThreadsHost 在启动子 Context 元素时会并发使用的线程数。如果自动部署被使用的话将会使用该线程池部署新的 Context。值为0时将会使用 Runtime.getRuntime().availableProcessors() 的值。值为负数时将会使用 Runtime.getRuntime().availableProcessors() 加上该值得和,而和小于1时将会使用1个线程。如果没有指定,会使用默认值1。

undeployOldVersion:该选项的值决定 Tomcat,即自动部署进程部分,是否会检查并发部署的过时 web 应用,任何找到的应用都会被移除。只有在 autoDeploy 为 true 的情况下才会生效。如果没有指定将会使用默认值 false。


10、集群

Tomcat 支持服务器集群。它可以复制整个集群的会话和上下文属性。也可以部署一个 WAR 文件到所有的集群上。

10.1、基本属性

className集群主类,当前只有一个是有效的, org.apache.catalina.ha.tcp.SimpleTcpCluster。

channelSendOptions 组通讯(tribe channel)发送选项,默认为8。该选项被用来标志所有的信息通过 SimpleTcpCluster 发送。该标志指定怎样发送信息,是一个简单的逻辑或。

channelStartOptions设置集群使用对象的启动和停止标志。默认是 Channel.DEFAULT,会启动所有的 channel 服务,包括发送者、接收者、组播发送者和组播接收者。

heartbeatBackgroundEnabled标志是否在容器的后台线程中调用 channel 的心跳检测。默认是 false。当设置为 true 时,不要忘了禁用 channel 心跳检测线程。

notifyLifecycleListenerOnFailure当所有的 ClusterListener 不能接收 channel 消息时,该标志位决定是否通知 LifecycleListeners。默认是 false。


11、Valve

Valve (阀门)作为请求的前置处理程序,可以在请求发送到应用之前拦截 HTTP 请求。可以定义在任何容器中,比如 Engine、Host、Context和 Cluster。默认配置中,AccessLogValve 会拦截 HTTP 请求,并在日志文件中创建一个日志切入点,如下:

1

2

3

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

prefix="localhost_access_log." suffix=".txt"

pattern="%h %l %u %t "%r" %s %b" />

11.1、基本属性

className设置为 org.apache.catalina.ha.tcp.ReplicationValve

o filter ―― 对于已知文件扩展名或 url ,可以在请求中使用 Valve 通知 cluster 没有修改 session,对于本次变化 cluster 没有必要通知 session 管理者。如果请求匹配该过滤器模型,cluster 会假设 session 没有发生变化。一个filter 样例大概是这样的 filter=“.*.gif|.*.js|.*.jpeg|.*.jpg|.*.png|.*.htm|.*.html|.*.css|.*.txt”。filter 使用 java.util.regex 的正则表达式。

primaryIndicator布尔值。如果为 true,replication valve 将会把 primaryIndicatorName 属性定义的名称插入到 request 属性中。该值无论是 Boolean.TRUE 或者 Boolean.FALSE,都会被放入 request 属性中。

primaryIndicatorName默认值为 org.apache.catalina.ha.tcp.isPrimarySession,这个值定义了一个 request 属性的名称,值是一个布尔值,表示会话所在的服务器是否为主服务器。

statistics布尔值。如果想让 valve 收集请求的统计数据,设置为 true。默认值为 false

以下是其它一些 valve:

RemoteAddrValve阻截来自特定的 IP 地址的请求。

RemoteHostValve阻截基于主机名称的请求。

RequestDumperValve记录了请求的详细信息。

SingleSignOn Valve当置于a下时,允许单点登录到该主机下的所有应用上。

+--------------------------------server.xml配置文件解释-----------------------------------+


+------------------------------tomcat重新后删除原来的session------------------------------------------------------+

tomcat关闭后重新启动,发现原来的session没有被删掉,用原来的request获取session仍然可以取到。但是并没有配置session持久化。

原因如下:

tomcat的conf目录下有一个context.xml,这是所有web应用共享的配置信息。

里面有这么一段话:

<!-- Uncomment this to disable session persistence across Tomcat restarts -->

<!--

<Manager pathname="" />

-->

缺省情况下,<Manager pathname="" />是被注释掉的,此时,tomcat在每次重新启动的时候,都会保留原来的session。

如果不想保留的话,需要把<Manager pathname="" />的注释放开,这样tomcat关闭的时候,会删掉所有的session。 通过如下命令实现:vim /usr/local/tomcat/conf/context.xml

默认情况下,tomcat使用StandardManager来管理session,当tomcat关闭,或者web应用被重新加载的时候,会对内存中的HttpSession对象进行持久化,把它们保存在文件系统中,默认的文件是(比如:host name是localhost,app name是test):

work\Catalina\localhost\test\SESSIONS.ser

+-------------------------------------------------tomcat重新后删除原来的session------------------------------------------------------+

CentOS7.2中安装JDK1.8.0_102+Tomcat9.0.0.M10的更多相关文章

  1. ios – Xcode警告:“没有处理文件的规则”和“找不到目录”

    重命名我的项目文件夹后,我收到以下错误消息:什么可能出错?解决方法关于第一个警告,您可以在项目设置中的“构建阶段”中检查XCode,即头文件不会出现在“编译源”列表中.

  2. 你如何将xcode项目转换为cocoapod?

    我有一段代码,我发现我在多个不同的项目中重复使用,所以我想把它变成一个cocoapod并使用私人cocoapod仓库.我的问题是如何将xcode项目设置为cocoapod?它应该是一个静态库还是一个带有appdelegate的空“项目”?

  3. ios – 如何将文件添加到主包的/ Library / Sounds目录中?

    根据Apple’sdocumentation,/Library/Sounds中的声音文件将在尝试播放声音时由系统搜索.如何将声音文件添加到此文件夹?适用于iOS的正确文档应为here总之,您只需将声音文件作为应用程序包的非本地化资源添加到项目中.

  4. ios – 资产目录与文件夹参考:何时使用其中一个?

    我可以将文件放入Assets.xcassets,或者我可以将文件放入文件夹引用.我何时会选择一个而不是另一个?

  5. ios – 尝试向我们分配IP而不是localhost或home时,NSURLSession失败

    我有一台本地运行的服务器(我的IP是192.168.0.98),并且已经尝试使用一些网络代码来访问它.最初这是通过AFNetworking完成的,但我现在用这样的NSURLSession完成了它:然后我用这3个URL运行它:>http://localhost:8080/api–>作品.>http://127.0.0.1:8080/api–>作品.>http://192.168.0.98:8080/

  6. ios – 从icloud备份中限制sqlite-wal和sqlite-shm

    我是第一次使用coredata,我必须从文档目录中的iCloud备份限制sqlitedb文件,我使用下面的代码完成了它//阻止iCloud备份文档目录文件夹现在我不明白的是,我们还需要从icloud备份中限制sqlite-wal和sqlite-shm文件,如果是,那么如何从icloud备份限制sqlite-wal和sqlite-shm文件我想要一个解决方案,而无需从文档目录文件夹中更改sqlitedb位置…

  7. 通过AFNetworking 2.0上传iOS图像

    我一直在寻找新的AFNetworking2.0上传图像的例子.但是我正在撞墙,无法弄清楚代码有什么问题.所以这是我使用的代码TIA解决方法我最终使用了多部分请求

  8. ios – 在Objective-C中发送分块的HTTP 1.1请求

    我有以下问题:我正在创建一个非常大的SOAP请求(数据是一个编码为Base64字符串的视频),因此我不能将其作为原始SOAP请求发送,而是需要在HTTP1.1块中发送它.我似乎无法弄明白该怎么做.我在这里使用了代码:WhatarealternativestoNSURLConnectionforchunkedtransferencoding但它似乎没有做我认为应该做的事情–我可以看到请求作为单个请求

  9. iOS:如何从文档目录中删除具有特定扩展名的所有现有文件?

    当我更新我的iOS应用程序时,我想删除Documents目录中的任何现有sqlite数据库.现在,在应用程序更新时,我将数据库从软件包复制到文档目录,并通过附加软件包版本来命名它.因此,在更新时,我还想删除可能存在的任何旧版本.我只是希望能够删除所有sqlite文件,而无需循环浏览并查找以前版本的文件.是否有任何方法可以对removeFileAtPath:方法进行通配符?解决方法那么,你想要删除所有*.sqlite文件?

  10. .dylib在Debug中链接,在XCode中找不到适用于iPhone的版本

    所以我已经将libxml2.2.dylib库包含在我的iPhoneXCode项目中,以创建一些Xml和XPath解析实用程序.当我编译并运行在模拟器和设备的调试模式时,我没有问题,但是,当我切换到发布模式我得到…

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部