存档

‘Java技术栈’ 分类的存档

jstack -F 命令在Linux 64位机器报错:get_thread_regs failed for a lwp

2017年3月30日 评论已被关闭

最近发现一个线上项目运行一段时间之后会僵死。程序不报任何异常,占有系统资源也都正常,就是对外提供不了服务了。

(友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogjava.net/hankchen

根据经验,应该是程序有死锁情况,于是在线上运行“jstack –F <pid>”命令,想把线程堆栈dump下来。

但是,发现这个命令老是报下面的错误:

Thread 27316: (state = BLOCKED)
Error occurred during stack walking:
sun.jvm.hotspot.debugger.DebuggerException: sun.jvm.hotspot.debugger.DebuggerException: get_thread_regs failed for a lwp

线上环境是:

Linux 2.6.18-194.el5 x86_64 x86_64 x86_64 GNU/Linux

java version “1.6.0_21”
Java(TM) SE Runtime Environment (build 1.6.0_21-b04)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)

经过分析发现,这是JDK6u23之前版本的一个Bug,将JDK升级到最新版本(1.6.0_31)就可以解决问题了。

{B0E1C5D8-CE33-4940-B416-2E75003A59FA}

分类: Java技术栈 标签:

java CPU 100% 排查

2017年3月30日 评论已被关闭

java CPU 100% 排查

http://www.cnblogs.com/lishijia/p/5549980.html

一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环。

(友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogjava.net/hankchen

以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题。

 

根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障。

通过ps aux | grep PID命令,可以进一步确定是tomcat进程出现了问题。但是,怎么定位到具体线程或者代码呢?

首先显示线程列表:

ps -mp pid -o THREAD,tid,time

 

找到了耗时最高的线程28802,占用CPU时间快两个小时了!

其次将需要的线程ID转换为16进制格式:

printf “%x\n” tid

 

最后打印线程的堆栈信息:

jstack pid |grep tid -A 30

 

找到出现问题的代码了!

现在来分析下具体的代码:ShortSocketIO.readBytes(ShortSocketIO.java:106)

ShortSocketIO是应用封装的一个用短连接Socket通信的工具类。readBytes函数的代码如下:

public byte[] readBytes(int length) throws IOException {

if ((this.socket == null) || (!this.socket.isConnected())) {

throw new IOException(“++++ attempting to read from closed socket”);

}

byte[] result = null;

ByteArrayOutputStream bos = new ByteArrayOutputStream();

if (this.recIndex >= length) {

bos.write(this.recBuf, 0, length);

byte[] newBuf = new byte[this.recBufSize];

if (this.recIndex > length) {

System.arraycopy(this.recBuf, length, newBuf, 0, this.recIndex – length);

}

this.recBuf = newBuf;

this.recIndex -= length;

} else {

int totalread = length;

if (this.recIndex > 0) {

totalread -= this.recIndex;

bos.write(this.recBuf, 0, this.recIndex);

this.recBuf = new byte[this.recBufSize];

this.recIndex = 0;

}

int readCount = 0;

while (totalread > 0) {

if ((readCount = this.in.read(this.recBuf)) > 0) {

if (totalread > readCount) {

bos.write(this.recBuf, 0, readCount);

this.recBuf = new byte[this.recBufSize];

this.recIndex = 0;

} else {

bos.write(this.recBuf, 0, totalread);

byte[] newBuf = new byte[this.recBufSize];

System.arraycopy(this.recBuf, totalread, newBuf, 0, readCount – totalread);

this.recBuf = newBuf;

this.recIndex = (readCount – totalread);

}

totalread -= readCount;

}

}

}

问题就出在标红的代码部分。如果this.in.read()返回的数据小于等于0时,循环就一直进行下去了。而这种情况在网络拥塞的时候是可能发生的。

至于具体怎么修改就看业务逻辑应该怎么对待这种特殊情况了。

 

最后,总结下排查CPU故障的方法和技巧有哪些:

1、top命令:Linux命令。可以查看实时的CPU使用情况。也可以查看最近一段时间的CPU使用情况。

2、PS命令:Linux命令。强大的进程状态监控命令。可以查看进程以及进程中线程的当前CPU使用情况。属于当前状态的采样数据。

3、jstack:Java提供的命令。可以查看某个进程的当前线程栈运行情况。根据这个命令的输出可以定位某个进程的所有线程的当前运行状态、运行代码,以及是否死锁等等。

4、pstack:Linux命令。可以查看某个进程的当前线程栈运行情况。

分类: Java技术栈 标签:

Java出错 Error:Could not create the Java Virtual Machine Error:A fatal exception has occurred

2017年2月23日 评论已被关闭

Java出错 Error:Could not create the Java Virtual Machine Error:A fatal exception has occurred

http://blog.csdn.net/y6300023290/article/details/45478009

提示如下:

scala compile server. error:could not create the java machine.Error: A fatal exception has occurred. program will exit.

这个原因是因为在安装JDK的时候在C:\Windows\System32生成的java.exe、javaw.exe、javaws.exe这个3个引起的;只要把这3个运行文件删除掉就可以了

java -version
分类: Java技术栈 标签:

tomcat配置及优化

2016年11月2日 评论已被关闭

tomcat配置及优化
https://blog.linuxeye.com/413.html
jdk安装

su – root
mkdir jdk
cd jdk
wget https://mirror.its.sfu.ca/mirror/CentOS-Third-Party/NSG/common/x86_64/jdk-7u76-linux-x64.rpm
rpm -ivh jdk-7u76-linux-x64.rpm
环境变量

vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.7.0_76
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
. /etc/profile
tomcat下载

#建议用一般用户运行tomcat
wget http://www.apache.org/dist/tomcat/tomcat-7/v7.0.59/bin/apache-tomcat-7.0.59.tar.gz
tar xzf apache-tomcat-7.0.59.tar.gz
apache-tomcat-7.0.59/bin
chmod +x *.sh
tomcat隐藏版本号

cd apache-tomcat-7.0.59/lib
mkdir test
cd test
jar xf ../catalina.jar
vi org/apache/catalina/util/ServerInfo.properties
server.info=Tomcat
server.number=6
server.built=Jan 18 2013 14:51:10 UTC
jar cf ../catalina.jar ./*
rm -rf test
Tomcat jconsole监控远程jvm配置

参考://blog.linuxeye.com/262.html
Tomcat的三种模式及并发优化

Tomcat的运行模式有3种
1. bio
默认的模式,性能非常低下,没有经过任何优化处理和支持.
2. nio
利用java的异步io护理技术,noblocking IO技术
想运行在该模式下,直接修改server.xml里的Connector节点,修改protocol为
<Connector port=”80″
protocol=”org.apache.coyote.http11.Http11NioProtocol”
connectionTimeout=”20000″
URIEncoding=”UTF-8″
useBodyEncodingForURI=”true”
enableLookups=”false”
redirectPort=”8443″>
启动后,就可以生效。
3. apr
从操作系统级别来解决异步的IO问题,大幅度的提高性能。
必须要安装apr和native,直接启动就支持apr
修改protocol为org.apache.coyote.http11.Http11AprProtocol
安装apr
yum -y install apr apr-devel
安装native
进入tomcat/bin目录,比如:
cd /usr/local/tomcat/bin/
tar xzfv tomcat-native.tar.gz
cd tomcat-native-1.1.32-src/jni/native/
./configure –with-apr=/usr/bin/apr-1-config
make && make install
安装完成之后 会出现如下提示信息
Libraries have been installed in:
/usr/local/apr/lib
安装成功后还需要对tomcat设置环境变量,方法是在catalina.sh文件中增加1行:
CATALINA_OPTS=”-Djava.library.path=/usr/local/apr/lib”
修改8080端对应的conf/server.xml
protocol=”org.apache.coyote.http11.Http11AprProtocol”
启动tomcat之后,查看日志会有这一行信息,说明已经是APR模式启动了
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
并发优化
1.JVM调优
新增文件TOMCAT_HOME/bin/setenv.sh如下语句,具体数值视情况而定。
JAVA_OPTS=”-Xms1024m -Xmx1024m -Xss1024K -XX:PermSize=64m -XX:MaxPermSize=128m”
参数详解
-Xms JVM初始化堆内存大小
-Xmx JVM堆的最大内存
-Xss 线程栈大小
-XX:PermSize JVM非堆区初始内存分配大小
-XX:MaxPermSize JVM非堆区最大内存
建议和注意事项:
-Xms和-Xmx选项设置为相同堆内存分配,以避免在每次GC 后调整堆的大小,堆内存建议占内存的60%~80%;非堆内存是不可回收内存,大小视项目而定;线程栈大小推荐256k.
32G内存配置如下:
JAVA_OPTS=”-Xms20480m -Xmx20480m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=2048m”
2.关闭DNS反向查询
在<Connector port=”8080″ 中加入如下参数
enableLookups=”false”
3.优化tomcat参数(使用APR)
<Listener className=”org.apache.catalina.core.AprLifecycleListener” />

<Connector port=”8080″
protocol=”org.apache.coyote.http11.Http11AprProtocol”
connectionTimeout=”20000″ //链接超时时长
redirectPort=”8443″
maxThreads=”500″
minSpareThreads=”20″
acceptCount=”1000″
enableLookups=”false”
URIEncoding=”UTF-8″ />

分类: Java技术栈 标签:

tomcat实现多端口、多域名访问

2016年11月2日 评论已被关闭

tomcat实现多端口、多域名访问

https://my.oschina.net/u/2375445/blog/515063

摘要: tomcat可以实现:多个端口访问同一个web应用、不同的应用通过不同的域名进行访问。

tomcat可以实现:多个端口访问同一个web应用、不同的应用通过不同的域名进行访问。

本文介绍的都是只启动一个tomcat服务的情况下,当然,实现这些功能也可以通过启动多个tomcat服务实现。

百度经验:jingyan.baidu.com

工具/原料

  • tomcat(以tomcat7.0.50为例)
  • 两个用于测试的web应用

百度经验:jingyan.baidu.com

tomcat实现多端口访问

  1. 1

    说明:这个部分介绍如何在tomcat中进行配置,使同一个应用可以通过不同的端口号进行访问。

    在某些需要进行安全控制的场景中会应用到。例如:不同地址段只能通过某个端口访问。

  2. 2

    找到tomcat的主目录,打开conf文件夹,找到并打开server.xml文件。

    编辑server.xml文件,在<Service></Service>标签中添加:

    <Connector port=”9090″ protocol=”HTTP/1.1″               connectionTimeout=”20000″               redirectPort=”8443″ />

    如图:

    tomcat实现多端口、多域名访问步骤阅读

  3. 3

    进行步骤2中的配置,多端口就完成了,保存并启动tomcat。

    使用8080端口访问的效果图:

    tomcat实现多端口、多域名访问步骤阅读

  4. 4

    使用9090端口访问的效果图:

    这样,就实现了不同的端口号访问到同一个应用程序了。如果还想在其他端口进行监听,就把步骤2中的内容多添加几个就行了。

    tomcat实现多端口、多域名访问步骤阅读

    END

百度经验:jingyan.baidu.com

tomcat实现多域名访问(通过同一个端口号)

  1. 1

    说明:在同一个端口号的情况下,tomcat可以配置不同的域名对应不同的应用程序。

    但是,我不确定“域名管理服务器”是否支持2个不同的域名映射到同一个IP地址的同一个端口。

  2. 2

    找到tomcat的主目录,打开conf文件夹,找到并打开server.xml文件。

    编辑server.xml文件,在<Service></Service>标签中添加:

    <Host name=”www.domain2.com”  appBase=”webapps”            unpackWARs=”true” autoDeploy=”true”>         <Context path=”” docBase=”/myweb2″/>        <Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs”               prefix=”localhost_access_log.” suffix=”.txt”               pattern=”%h %l %u %t &quot;%r&quot; %s %b” />      </Host>

    如图:

    tomcat实现多端口、多域名访问步骤阅读

  3. 3

    进行步骤2中的配置,保存并启动tomcat。

    即可实现使用domain1访问到web1;使用domain2访问到web2。

    END

百度经验:jingyan.baidu.com

tomcat实现多域名访问(使用不同的端口号)

  1. 1

    说明:相对于第二种情况,目前的情况应该是应用得很普遍的。

  2. 2

    找到tomcat的主目录,打开conf文件夹,找到并打开server.xml文件。

    编辑server.xml文件,把<Service>…</Service>标签拷贝一份,对Service name、监听端口、域名名称、默认加载的应用 进行修改。

    如图:

    tomcat实现多端口、多域名访问步骤阅读

  3. 3

    进行步骤2中的配置,保存并启动tomcat。

    即可实现使用domain1访问到web1;使用domain2访问到web2。

  4. 4

    说明:第三种情况与第二种情况最大的区别就在于是使用另一个端口号,这也是普遍的情况吧。(不同的域名映射到不同的端口)

    END

百度经验:jingyan.baidu.com

tomcat实现多应用多端口访问

一、Tomcat 安装后本身提供了一个server,端口配置默认是8080,对应目录为:..\Tomcat 6.0\webapps
二、Tomcat 6.0 配置多个端口,其实也就是给Tomcat增加几个server,并设置对应目录。下面以增加两个端口号为例
第一步、修改server.xml[..\Tomcat 6.0\conf]
(1)Tomcat提供的如下:

Xml代码 复制代码 收藏代码

  1. <Service name=”Catalina”>
  2.  
  3.     <Connector port=”8090″ maxHttpHeaderSize=”8192″
  4.                maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″
  5.                enableLookups=”false” redirectPort=”8443″ acceptCount=”100″
  6.                connectionTimeout=”20000″ disableUploadTimeout=”true” />
  7.  
  8.     <Connector port=”8009″
  9.                enableLookups=”false” redirectPort=”8443″ protocol=”AJP/1.3″ />
  10.  
  11.  
  12.     <Engine name=”Catalina” defaultHost=”localhost”>
  13.  
  14.  
  15.       <Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
  16.              resourceName=”UserDatabase”/>
  17.  
  18.       <Host name=”localhost” appBase=”webapps”
  19.        unpackWARs=”true” autoDeploy=”true”
  20.        xmlValidation=”false” xmlNamespaceAware=”false”>
  21.       </Host>
  22.  
  23.  
  24.     </Engine>
  25.  
  26.  
  27. </Service>
<Service name="Catalina">
   
    <Connector port="8090" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" />
    
    <Connector port="8009" 
               enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />


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


      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>
      
      <Host name="localhost" appBase="webapps"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">              
      </Host>


    </Engine>


</Service>

 

(2)比着上面的葫芦画下面的瓢、新增两个端口号,注意Service name、Engine name、appBase,
当然了,端口号别忘了修改,以免重复。

Xml代码 复制代码 收藏代码

  1. <Service name=”Catalina1″>
  2.  
  3.     <Connector port=”8091″ maxHttpHeaderSize=”8192″
  4.                maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″
  5.                enableLookups=”false” redirectPort=”8443″ acceptCount=”100″
  6.                connectionTimeout=”20000″ disableUploadTimeout=”true” />
  7.  
  8.     <Connector port=”8009″
  9.                enableLookups=”false” redirectPort=”8443″ protocol=”AJP/1.3″ />
  10.  
  11.  
  12.     <Engine name=”Catalina1″ defaultHost=”localhost”>
  13.  
  14.  
  15.       <Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
  16.              resourceName=”UserDatabase”/>
  17.  
  18.       <Host name=”localhost” appBase=”webapps1″
  19.        unpackWARs=”true” autoDeploy=”true”
  20.        xmlValidation=”false” xmlNamespaceAware=”false”>
  21.       </Host>
  22.  
  23.  
  24.     </Engine>
  25.  
  26.  
  27. </Service>
<Service name="Catalina1">
   
    <Connector port="8091" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" />
    
    <Connector port="8009" 
               enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />


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


      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>
      
      <Host name="localhost" appBase="webapps1"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">              
      </Host>


    </Engine>


</Service>

 

Xml代码 复制代码 收藏代码

  1. <Service name=”Catalina2″>
  2.  
  3.     <Connector port=”8092″ maxHttpHeaderSize=”8192″
  4.                maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″
  5.                enableLookups=”false” redirectPort=”8443″ acceptCount=”100″
  6.                connectionTimeout=”20000″ disableUploadTimeout=”true” />
  7.  
  8.     <Connector port=”8009″
  9.                enableLookups=”false” redirectPort=”8443″ protocol=”AJP/1.3″ />
  10.  
  11.  
  12.     <Engine name=”Catalina2″ defaultHost=”localhost”>
  13.  
  14.  
  15.       <Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
  16.              resourceName=”UserDatabase”/>
  17.  
  18.       <Host name=”localhost” appBase=”webapps2″<!– 这个地方很重要,我今天没修改这个,导致webapps下的几个应用都可以用多个端口访问,结果只好将默认的webapps下的应用拷到其他地方,在${tomcat_home}/conf/下创建Catalina2/localhost/,并创建不同的xml文件将docBase指向应用所在的路径–>
  19.        unpackWARs=”true” autoDeploy=”true”
  20.        xmlValidation=”false” xmlNamespaceAware=”false”>
  21.       </Host>
  22.  
  23.  
  24.     </Engine>
  25.  
  26.  
  27. </Service>
<Service name="Catalina2">
   
    <Connector port="8092" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" />
    
    <Connector port="8009" 
               enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />


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


      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>
      
      <Host name="localhost" appBase="webapps2"<!-- 这个地方很重要,我今天没修改这个,导致webapps下的几个应用都可以用多个端口访问,结果只好将默认的webapps下的应用拷到其他地方,在${tomcat_home}/conf/下创建Catalina2/localhost/,并创建不同的xml文件将docBase指向应用所在的路径-->
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">              
      </Host>


    </Engine>


</Service>

第二步、创建相应的部署目录
..\Tomcat 6.0\webapps1
..\Tomcat 6.0\webapps2
同时可以将Tomcat 6.0\webapps下的有用的复制到新建的部署目录

第三步、创建配置文件目录和配置文件
..\Tomcat 6.0\conf\Catalina1\localhost
..\Tomcat 6.0\conf\Catalina2\localhost
host-manager.xml
manager.xml
配置文件的配置可参照..\Tomcat 6.0\conf\Catalina\localhost下的,只需要修改一下对应目录即可
大概的配置步骤就是这些,现在可以把不同的war包放在不同的位置来访问了
以上配置方法同样适合Tomcat 5.5

注意事项

  • 要使用域名访问,用户得先去获得域名地址。
  • 通过域名管理服务,域名地址要被解析成IP地址+端口号。
分类: Java技术栈 标签:

tomcat配置多个端口

2016年11月2日 评论已被关闭

tomcat配置多个端口
http://blog.csdn.net/wanghuan203/article/details/45310799
一、Tomcat 安装后本身提供了一个server,端口配置默认是8080,对应目录为:..\Tomcat 6.0\webapps
二、Tomcat 6.0 配置多个端口,其实也就是给Tomcat增加几个server,并设置对应目录。下面以增加两个端口号为例
第一步、修改server.xml[..\Tomcat 6.0\conf]
(1)Tomcat提供的如下:
Xml代码 收藏代码
<Service name=”Catalina”>

<Connector port=”8090″ maxHttpHeaderSize=”8192″
maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″
enableLookups=”false” redirectPort=”8443″ acceptCount=”100″
connectionTimeout=”20000″ disableUploadTimeout=”true” />

<Connector port=”8009″
enableLookups=”false” redirectPort=”8443″ protocol=”AJP/1.3″ />

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

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

<Host name=”localhost” appBase=”webapps”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
</Host>

</Engine>

</Service>

(2)新增两个端口号,注意Service name、Engine name、appBase,
当然了,端口号别忘了修改,以免重复。
Xml代码 收藏代码
<Service name=”Catalina1″>

<Connector port=”8091″ maxHttpHeaderSize=”8192″
maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″
enableLookups=”false” redirectPort=”8443″ acceptCount=”100″
connectionTimeout=”20000″ disableUploadTimeout=”true” />

<Connector port=”8009″
enableLookups=”false” redirectPort=”8443″ protocol=”AJP/1.3″ />

<Engine name=”Catalina1″ defaultHost=”localhost”>

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

<Host name=”localhost” appBase=”webapps1″
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
</Host>

</Engine>

</Service>

Xml代码 收藏代码
<Service name=”Catalina2″>

<Connector port=”8092″ maxHttpHeaderSize=”8192″
maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″
enableLookups=”false” redirectPort=”8443″ acceptCount=”100″
connectionTimeout=”20000″ disableUploadTimeout=”true” />

<Connector port=”8009″
enableLookups=”false” redirectPort=”8443″ protocol=”AJP/1.3″ />

<Engine name=”Catalina2″ defaultHost=”localhost”>

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

<Host name=”localhost” appBase=”webapps2″<!– 这个地方很重要,我今天没修改这个,导致webapps下的几个应用都可以用多个端口访问,结果只好将默认的webapps下的应用拷到其他地方,在${tomcat_home}/conf/下创建Catalina2/localhost/,并创建不同的xml文件将docBase指向应用所在的路径–>
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
</Host>

</Engine>

</Service>
第二步、创建相应的部署目录
..\Tomcat 6.0\webapps1
..\Tomcat 6.0\webapps2
同时可以将Tomcat 6.0\webapps下的有用的复制到新建的部署目录
第三步、创建配置文件目录和配置文件
..\Tomcat 6.0\conf\Catalina1\localhost
..\Tomcat 6.0\conf\Catalina2\localhost

host-manager.xml
manager.xml

配置文件的配置可参照..\Tomcat 6.0\conf\Catalina\localhost下的,只需要修改一下对应目录即可

大概的配置步骤就是这些,现在可以把不同的war包放在不同的位置来访问了
以上配置方法同样适合Tomcat 5.5

分类: Java技术栈 标签:

tomcat配置多个端口(Server.xml不能加中文注释)

2016年11月2日 评论已被关闭

tomcat配置多个端口(Server.xml不能加中文注释)
http://blog.sina.com.cn/s/blog_8acf1be10101i097.html
今天试着给tomcat配置多个端口,参考网上教程
第一步、修改server.xml[..\Tomcat 6.0\conf]
(1)Tomcat提供的如下:
Catalina”>
8090″ maxHttpHeaderSize=”8192″
maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″
enableLookups=”false” redirectPort=”8443″ acceptCount=”100″
connectionTimeout=”20000″ disableUploadTimeout=”true” />
8009″
enableLookups=”false” redirectPort=”8443″ protocol=”AJP/1.3″ />
Catalina” defaultHost=”localhost”>

resourceName=”UserDatabase”/>
webapps”
unpackWARs=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>

(2)比着上面的葫芦画下面的瓢、新增两个端口号,注意Service name、Engine name、appBase,
当然了,端口号别忘了修改,以免重复。
Catalina1″>
8091″ maxHttpHeaderSize=”8192″
maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″
enableLookups=”false” redirectPort=”8443″ acceptCount=”100″
connectionTimeout=”20000″ disableUploadTimeout=”true” />
8009″
enableLookups=”false” redirectPort=”8443″ protocol=”AJP/1.3″ />
Catalina1″ defaultHost=”localhost”>

resourceName=”UserDatabase”/>
webapps1″
unpackWARs=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
增加多个端口以此类推。

第二步、创建相应的部署目录
..\Tomcat 6.0\webapps1
..\Tomcat 6.0\webapps2
同时可以将Tomcat 6.0\webapps下的有用的复制到新建的部署目录
第三步、创建配置文件目录和配置文件
..\Tomcat 6.0\conf\Catalina1\localhost
..\Tomcat 6.0\conf\Catalina2\localhost
host-manager.xml
manager.xml
配置文件的配置可参照..\Tomcat 6.0\conf\Catalina\localhost下的,只需要修改一下对应目录即可
大概的配置步骤就是这些
以上就完成配置,根据网上所说的现在就可以用不同的端口访问了,可在我这问题就来了,我的tomcat启动总是一闪而过,在没有配置之前没有这个问题,我也不明原因,在这苦苦查找,总自己认为配置出错了,可是找来找去出没有发现问题,查看日志发现错误如下:
org.apache.catalina.startup.Catalina start
严重: Cannot start server. Server instance is not configured.
提示显示Server实例没有配置,这就是说我的Server.xml还是有问题,这我就郁闷了,没有办法只好好,一步一步恢复到配置前,前启动tomcat尝试看哪个步骤出问题,结果是令我万万没有

分类: Java技术栈 标签:

关于tomcat服务器绑定域名防止恶意域名绑定

2016年11月2日 评论已被关闭

关于tomcat服务器绑定域名防止恶意域名绑定
http://blog.csdn.net/shendixiaoxuan/article/details/23858063
今天下午突然发现客户的域名被恶意域名“www.walking.cn”绑定了,由于之前没有遇到过这种情况,刚开始不知道是什么情况,还以为是客户那边改了,一问都没有,在网上找了很多解决方法什么ngnxi啊都不管用,都是说绑定自己的域名,没说如何不让其他域名绑定。

于是开始研究server.xml文件,修改tomcat/conf/server.xml,找到engine元素,仿照已有的localhost,添加host元素,比如你想禁止www.dddd.com,可以这样写:

Xml代码 收藏代码
<Host name=”www.dddd.com” appBase=”notexists”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”></Host>

其中的appBase是一个不存在的目录,所以www.dddd.com请求时,不会访问你真实的应用。但是这样只是屏蔽了一个已知的,还有很多恶意域名是不可预知的,你并不知道会有多少域名绑定到你的IP,所以这种方式行不通。

上面的方式是默认允许,把禁止的列出来,变换下思路,默认禁止,将允许的列出来,这样不就OK了?所以有第二种方式:
Xml代码 收藏代码
<!– default host is forbiden –>
<Engine name=”Catalina” defaultHost=”forbiden”>
<Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
resourceName=”UserDatabase”/>

<!– allow hosts –>
<Host name=”localhost” appBase=”webapps”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”></Host>
<Host name=”www.yourweb.com” appBase=”webapps”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”></Host>
<Host name=”192.168.0.34″ appBase=”webapps”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”></Host>

<!– forbiden host, the appBase is a not exists directory.
If the requested domain is not in the above list of hosts where are allowed, then use this host.
–>
<Host name=”forbiden” appBase=”notexists”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”></Host>
</Engine>

这里将Engine中的defaultHost设置为forbiden,下面有个name为forbiden的host,其appBase是个不存在的目录。再添加允许的host。所以,如果是未知的域名,则会使用forbiden的host,这样就访问不到真实应用目录了。

分类: Java技术栈 标签:

tomcat多个端口对应多个web应用

2016年11月2日 评论已被关闭

tomcat多个端口对应多个web应用

http://www.cnblogs.com/killbug/archive/2013/01/23/2872473.html
<?xml version=’1.0′ encoding=’utf-8′?>

<Server port=”8005″ shutdown=”SHUTDOWN”>

<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=”7777″ 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.UserDatabaseRealm”
resourceName=”UserDatabase”/>
<Host name=”localhost” appBase=”webapps”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
</Host>
</Engine>
</Service>

<Service name=”Catalina2″>
<Connector port=”8002″ protocol=”HTTP/1.1″
connectionTimeout=”20000″
redirectPort=”8444″/>
<Connector port=”8010″ protocol=”AJP/1.3″ redirectPort=”8444″ URIEncoding=”UTF-8″ />

<Engine name=”Catalina2″ defaultHost=”localhost”>
<Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
resourceName=”UserDatabase”/>
<Host name=”localhost” appBase=”webapps”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
<Context path=”” docBase=”system” />

</Host>
</Engine>
</Service>

</Server>
复制代码
重新复制一个service,改掉名字,端口,如上,测试成功。

还有一点需要数以的是:<Context path=”” docBase=”system” />

path不填就可以实现直接打入网址和端口就可以进入system引用啦。

分类: Java技术栈 标签:

Tomcat配置虚拟主机的两种方式

2016年11月2日 评论已被关闭

Tomcat配置虚拟主机的两种方式
http://www.cnblogs.com/demingblog/p/3722474.html
1.基于主机名的虚拟主机配置

在随意盘符下建立一个目录作为虚拟地址的目录。例如:F:\virtualhost1,在其下建立 test1.html,写入内容例如:test
在tomcat/conf/service.xml中 加入如下配置一段<Host> 配置
复制代码
<Host>
……
</Host> 这里的Host配置,是配置文件原本就有的,下面的需要我们自己增加
<Host appBase=”F:\virtualhost1″ autoDeploy=”true” name=”site1″ unpackWARs=”true”>

<Context path=”” docBase=”.” debug=”0″ />
</Host>
复制代码
打开C:\Windows\System32\drivers\etc 下面的hosts文件 加入127.0.0.1 site1
127.0.0.1 localhost //:有了这一行,所以浏览器输入:http://localhost:8080/ 能进入tomcat ,下一行同理
127.0.0.1 site1
假设在tomcat、wenbapps下的ROOT文件夹下有hello.html 内容写入 hello。

启动tomcat,在浏览器输入:http://localhost:8080/index.html —–>将显示 :hello 访问的是tomcat下的资源

在浏览器输入:http://site1:8080/index.html ——>将显示 :test 访问的是F:\virtualhost1 下的资源

实际上 二者的ip是一样的,都是127.0.0.1 但是却实现了访问两个“主机”上的资源,一个是tomcat下的,一个是F盘下的。假如A,B两公司很穷,网站公用一台服务器,但又不能够直接输入IP来进入,因为只有一个IP,这里在一台电脑上设置虚拟,二者设置不同的虚拟目录,使用虚拟目录名来访问便可实现公用,实际还是一个ip,一台主机。

2.基于端口的虚拟主机配置

在随意盘符下建立一个目录作为虚拟地址的目录。例如:F:\virtualhost2,在其下建立 test1.html,写入内容例如:test2
在tomcat/service.xml 里半加入一段 <Service> 配置,如下
复制代码
<Service>
<Connector ……./>
<Engine defaultHost=”localhost” name=”Catalina” >
…….
</Engine>
</Service> 这里的配置也是文件原本就有的,下面是增加的。

<Service>
<Connector connectionTimeout=”20000″ port=”8082″ protocol=”HTTP/1.1″ redirectPort=”8443″/> 因为是基于端口的配置,这里的8082端口是新增的,以后的访问将用到
<Engine name=”second” debug=”0″>
<Host appBase=”F:\virtualhost2″ autoDeploy=”true” name=”site2″ unpackWARs=”true”>
<Context path=”” docBase=”.” debug=”0″ />
</Host>
</Engine>
</Service>
复制代码
启动tomcat,输入 http://localhost:8080/index.html ——->将显示tomcat/webapps/ROOT/index.html 里边的内容

输入 http://localhost:8082/index.html ———>将显示F:\virtualhost2 下的index.html 里边的内容

这里通过不同的端口进来实现了,不同基于不同端口的虚拟主机的配置。

分类: Java技术栈 标签:

同一Tomcat 多个端口部署不同的项目

2016年11月2日 评论已被关闭

同一Tomcat 多个端口部署不同的项目
http://blog.csdn.net/shandian534/article/details/6064531

一、同一Tomcat 多个端口部署不同的项目
在tomcat 安装目录下C:/Program Files/apache-tomcat-6.0.29/conf找到server.xml

(1)、在<services>结点后面增加<services>结点,如下:

<Service name=”bm1″>
<Connector port=”8081″ maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″ enableLookups=”false” redirectPort=”8443″ acceptCount=”100″ debug=”0″ connectionTimeout=”20000″ disableUploadTimeout=”true” URIEncoding=”GBK”/>
<Engine name=”sms” defaultHost=”localhost”>
<Realm className=”org.apache.catalina.realm.UserDatabaseRealm” resourceName=”UserDatabase”/>
<Host name=”localhost” appBase=”webapps/test” unpackWARs=”true” autoDeploy=”true” xmlValidation=”false” xmlNamespaceAware=”false”>
<Context path=”” docBase=”C:/Program Files/Apache Software Foundation/Tomcat 6.0/webapps2/bookManagement” reloadable=”true” workDir=”D:/temp/Tomcat/test” debug=”0″/>
</Host>
</Engine>
</Service>

(2)、复制webapps目录, 命名成webapps2,把另外一个项目放在目录下.把docBase属性引向该目录。
好处:可以把多个项目部署在根目录
二、Tomcat 部置方式
TOMCAT部署项目有3种方法:
1、直接把项目放在webapps里
2、修改conf里server.xml文件,添加一个Context,指向项目的目录
3、在Catalina/localhost目录里,新增一个xml文件,添加一个Context内容,指向项目的目录。
<Context path=”/目录名” docBase=”e:/example” debug=”0″ reloadable=”true” />

优先级别为:3>2>1

第3个方法有个优点,可以定义别名。服务器端运行的项目名称为path,外部访问的URL则使用XML的文件名。这个方法很方便的隐藏了项目的名称,对一些项目名称被固定不能更换,但外部访问时又想换个路径,非常有效。

第2、3还有优点,可以定义一些个性配置,如数据源的配置等。

分类: Java技术栈 标签:

一个tomcat设置多个端口,多个端口对应多个应用

2016年11月2日 评论已被关闭

一个tomcat设置多个端口,多个端口对应多个应用
https://my.oschina.net/u/865478/blog/177618
修改tomcat/conf目录里面server.xml文件

例如下面这样新增一个8090端口,设置下appBase目录,这样就可以用一个tomcat监听多个端口,每个端口都可以放应用了。我这样新增下面这个配置以后,tomcat就监听了2个端口(8080,8090)

webapps目录和mywebapps目录的应用都会启动,可以根据不同的端口进行访问里面的应用

<Service name=”Catalina2″>
<Connector port=”8090″ protocol=”HTTP/1.1″

connectionTimeout=”20000″

redirectPort=”8443″ URIEncoding=”UTF-8″/>

<Engine name=”Catalina2″ defaultHost=”localhost”>

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

resourceName=”UserDatabase”/>

<Host name=”localhost” appBase=”mywebapps”

unpackWARs=”true” autoDeploy=”true”

xmlValidation=”false” xmlNamespaceAware=”false”>
</Host>

</Engine>

</Service>

分类: Java技术栈 标签:

server.xml引入子文件配置(tomcat虚拟主机)

2016年11月2日 评论已被关闭

server.xml引入子文件配置(tomcat虚拟主机)
https://blog.linuxeye.com/429.html
在配置tomcat虚拟主机时候,如何每一个虚拟主机写成单独文件,server.xml包含这些子文件? 如以下《OneinStack》中,添加JAVA环境虚拟主机后tomcat配置文件详情:
/usr/local/tomcat/conf/server.xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE server-xml [
<!ENTITY localhost-vhost SYSTEM “file:///usr/local/tomcat/conf/vhost/localhost.xml”>
<!ENTITY java.linuxeye.com-vhost SYSTEM “file:///usr/local/tomcat/conf/vhost/java.linuxeye.com.xml”>
<!ENTITY demo.linuxeye.com-vhost SYSTEM “file:///usr/local/tomcat/conf/vhost/demo.linuxeye.com.xml”>
]>
<Server port=”8006″ shutdown=”SHUTDOWN”>
<Listener className=”org.apache.catalina.core.JreMemoryLeakPreventionListener”/>
<Listener className=”org.apache.catalina.mbeans.GlobalResourcesLifecycleListener”/>
<Listener className=”org.apache.catalina.core.ThreadLocalLeakPreventionListener”/>
<Listener className=”org.apache.catalina.core.AprLifecycleListener”/>
<!–
<Listener className=”org.apache.catalina.mbeans.JmxRemoteLifecycleListener” rmiRegistryPortPlatform=”8081″ rmiServerPortPlatform=”8082″ />
–>
<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=”org.apache.coyote.http11.Http11AprProtocol”
connectionTimeout=”20000″
redirectPort=”8443″
maxThreads=”1000″
minSpareThreads=”20″
acceptCount=”1000″
debug=”0″
disableUploadTimeout=”true”
useBodyEncodingForURI=”true”
enableLookups=”false”
URIEncoding=”UTF-8″ />
<Engine name=”Catalina” defaultHost=”localhost”>
<Realm className=”org.apache.catalina.realm.LockOutRealm”>
<Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
resourceName=”UserDatabase”/>
</Realm>
&localhost-vhost;
&java.linuxeye.com-vhost;
&demo.linuxeye.com-vhost;
</Engine>
</Service>
</Server>
注:在<server>元素前添加如下格式:
<!DOCTYPE server-xml [
<!ENTITY localhost-vhost SYSTEM “file:///usr/local/tomcat/conf/vhost/localhost.xml”>
]>
并在<Engine>…</Engine]引用它(localhost-vhost,注:不能以数字开头)即可。
下面是每个单独虚拟主机文件:/usr/local/tomcat/conf/vhost/localhost.xml
<Host name=”localhost” appBase=”webapps” unpackWARs=”true” autoDeploy=”true”>
<Context path=”” docBase=”/data/wwwroot/default” debug=”0″ reloadable=”true” crossContext=”true”/>
<Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs”
prefix=”localhost_access_log.” suffix=”.txt” pattern=”%h %l %u %t &quot;%r&quot; %s %b” />
/usr/local/tomcat/conf/vhost/demo.linuxeye.com.xml
<Host name=”demo.linuxeye.com” appBase=”webapps” unpackWARs=”true” autoDeploy=”true”>
<Context path=”” docBase=”/data/wwwroot/demo.linuxeye.com” debug=”0″ reloadable=”true” crossContext=”true”/>
<Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs”
prefix=”demo.linuxeye.com_access_log.” suffix=”.txt” pattern=”%h %l %u %t &quot;%r&quot; %s %b” />
/usr/local/tomcat/conf/vhost/java.linuxeye.com.xml
<Host name=”java.linuxeye.com” appBase=”webapps” unpackWARs=”true” autoDeploy=”true”> <Alias>java1.linuxeye.com</Alias>
<Context path=”” docBase=”/data/wwwroot/java.linuxeye.com” debug=”0″ reloadable=”true” crossContext=”true”/>
<Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs”
prefix=”java.linuxeye.com_access_log.” suffix=”.txt” pattern=”%h %l %u %t &quot;%r&quot; %s %b” />
</Host>

tomcat中的server.xml中的配置文件中

2016年11月2日 评论已被关闭

tomcat中的server.xml中的配置文件中<Host appBase=”webaps”修改appBase引起的路问题
http://blog.csdn.net/xue_feitian/article/details/5980168
为了实现项目访问时可地址以直接通过访问ip和端口号就能直接访问 也就是直接访问http://localhost:8080/
而不用这样:http://localhost:8080/gxedu

项目名称是:gxedu

现在将tomcat中的server.xml中的
<Host name=”localhost” appBase=”webapps”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
改成如下:
<Host name=”localhost” appBase=”webaps”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>

然后再D:/soft/apache-tomcat-6.0.18下新建一个webaps文件夹,在webaps文件夹中新建一个ROOT空文件夹,然后将webapps中的host-manager和manager文件夹复制到新建的webaps文件夹中,然后将webapps文件夹中项目gxedu(该项目文件夹内的)的东西拷贝到webaps中的ROOT文件夹中。
重启tomcat就实现了直接访问http://localhost:8080/就能访问项目,可正常登录运行,但是其中有个地方用到了在js文件中跳转的路径不好使了。
该跳转路径是:parent.WorkFrame.location=”/gxedu/publishAction.do?functionType=selectPublish”;
———————————————————————————————————————————-
这个问题折磨了我一天 终于解决了 在这里公布一下 以便后来人借鉴
虽然解决了 但是还是不知道原因
解决办法:
js文件中跳转的路径是:parent.WorkFrame.location=”/gxedu/publishAction.do?functionType=selectPublish”;
不采用这种跳转方式,使用下面这种方式:
parent.document.getElementById(“WorkFrame”).src=”publishAction.do?functionType=selectPublish”;之后就好使了。

不懂得就是我采用parent.WorkFrame.location=”publishAction.do?functionType=selectPublish”;这种方式为什么不好使??与采用parent.document.getElementById(“WorkFrame”).src=”publishAction.do?functionType=selectPublish”;这种方式相比有什么区别呢?

分类: Java技术栈 标签:

部署WEB应用的三种方式

2016年11月2日 评论已被关闭

部署WEB应用的三种方式

http://www.cnblogs.com/yeahui/archive/2012/08/22/2650078.html

一、基本部署

Tomcat安装目录下有一个webapps目录,该目录存放所有的WEB应用程序,Tomcat会自动管理该目录下的所有WEB应用。因此,最简单的部署方式就是将要部署的WEB应用直接拷贝到Tomcat安装目录下的webapps目录中。

这种方式通常是用于开发过程中。在真正的项目实施中可能会受到限制:当使用租借的(或他人的)WEB服务器时,该服务器所在的盘符如果存在权限控制,则不能够将WEB应用程序拷贝到该盘符中,此时就不能使用这种方式部署项目,只能使用下列方式。

二、修改配置文件

Tomcat安装目录下的conf目录用于存放Tomcat的配置文件,该目录下的server.xml文件用于配置服务器的有关信息。在该文件最后的<Host />元素中通过子元素<Context />配置WEB应用的物理路径和虚拟路径。该元素最简单的配置如下:

<Context docBase=”C:\MyDemo” path=”/test”/>

 

 

docBase:指定WEB应用所在的路径;

path:指定访问该应用的路径,即如果按照上面的配置,则访问该WEB应用的路径应该是:http://localhost:8080/test/资源名称。

注意:Context标签的第一个字母是大写的C

该元素应该位于<Host />元素中的最后位置,即</Host>的上面一行:

<Host name=”localhost”  appBase=”webapps”

unpackWARs=”true” autoDeploy=”true”

xmlValidation=”false” xmlNamespaceAware=”false”>

    <Context docBase=”C:\MyDemo” path=”/test”/>

</Host>

 

 

 

 

 

使用这种方式比较方便操作,不需要拷贝WEB应用,并且不要求WEB应用的位置与Tomcat服务器在同一个盘符下。但是Tomcat6开始不推荐使用这种方式,因为这种方式会破坏Tomcat的文件结构,修改了Tomcat的配置文件。Tomcat6开始推荐使用下面这种方式。

三、扩展部署

这种方式是在上一种方式的基础上进行了扩展,避免修改Tomcat的配置文件。进入下列路径“Tomcat安装目录/conf/Catalina/localhost”,默认情况下,localhost目录中只有host-manager.xml和manager.xml两个文件,可以自己定义一个XML文件配置要部署的项目,文件名为虚拟路径,上述路径则为:test.xml,如果有多层路径,则用#间隔,如路径为http://localhost:8080/a/b/c,则文件名为a#b#c.xml。在该文件中直接通过<Context />元素的docBase属性配置WEB应用的物理路径即可:

<Context docBase=”C:\MyDemo”/>

 

 

使用这种方式不需要重启服务器,并且也没有修改Tomcat的文件,只是对其进行扩展。在实际的部署中推荐使用这种方式。

 

总结

1、 拷贝应用到webapps目录下;

2、 在conf目录下的</Host>前添加<Context />标签

<Context docBase=”物理路径” path=”/虚拟路径”/>

 

 

3、 在conf/Catalina/localhost目录下添加”虚拟路径.xml”文件:

<Context docBase=”物理路径”/>
分类: Java技术栈 标签:

同一Tomcat 多个端口部署不同的项目

2016年11月2日 评论已被关闭

同一Tomcat 多个端口部署不同的项目
http://blog.csdn.net/shandian534/article/details/6064531

一、同一Tomcat 多个端口部署不同的项目
在tomcat 安装目录下C:/Program Files/apache-tomcat-6.0.29/conf找到server.xml

(1)、在<services>结点后面增加<services>结点,如下:

<Service name=”bm1″>
<Connector port=”8081″ maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″ enableLookups=”false” redirectPort=”8443″ acceptCount=”100″ debug=”0″ connectionTimeout=”20000″ disableUploadTimeout=”true” URIEncoding=”GBK”/>
<Engine name=”sms” defaultHost=”localhost”>
<Realm className=”org.apache.catalina.realm.UserDatabaseRealm” resourceName=”UserDatabase”/>
<Host name=”localhost” appBase=”webapps/test” unpackWARs=”true” autoDeploy=”true” xmlValidation=”false” xmlNamespaceAware=”false”>
<Context path=”” docBase=”C:/Program Files/Apache Software Foundation/Tomcat 6.0/webapps2/bookManagement” reloadable=”true” workDir=”D:/temp/Tomcat/test” debug=”0″/>
</Host>
</Engine>
</Service>

(2)、复制webapps目录, 命名成webapps2,把另外一个项目放在目录下.把docBase属性引向该目录。
好处:可以把多个项目部署在根目录
二、Tomcat 部置方式
TOMCAT部署项目有3种方法:
1、直接把项目放在webapps里
2、修改conf里server.xml文件,添加一个Context,指向项目的目录
3、在Catalina/localhost目录里,新增一个xml文件,添加一个Context内容,指向项目的目录。
<Context path=”/目录名” docBase=”e:/example” debug=”0″ reloadable=”true” />

优先级别为:3>2>1

第3个方法有个优点,可以定义别名。服务器端运行的项目名称为path,外部访问的URL则使用XML的文件名。这个方法很方便的隐藏了项目的名称,对一些项目名称被固定不能更换,但外部访问时又想换个路径,非常有效。

第2、3还有优点,可以定义一些个性配置,如数据源的配置等。

分类: Java技术栈 标签:

Tomcat中部署WEB项目的四种方法

2016年11月2日 评论已被关闭

Tomcat中部署WEB项目的四种方法

http://www.cnblogs.com/cjhl/p/5805173.html

对Tomcat部署web应用的方式总结,常见的有以下四种:

1、【使用控制台部署】

访问Http://localhost:8080,并通过Tomcat Manager登录,进入部署界面即可。
2、【利用Tomcat自动部署】

将应用程序复制到Tomcat的 webapps路径下,Tomcat启动时将自动加载。
3、【修改Server.xml文件部署】

用UE或EditPlus打开Tomcat位于conf/server.xml的配置文件,找到以下内容:

<Host name=”localhost” debug=”0″ appBase=”webapps” unpackWARs=”true” autoDeploy=”true” xmlValidation=”false” xmlNamespaceAware=”false”>
…..
</Host>
…..

在Host之间添加如下内容:

<Context path=”/Mywebapps” reloadable=”true” docBase=”d:Mywebapps” workDir=”d:Mywebappsemp”/>

path:表示访问的路径;如上述例子中,访问该应用程序为:http://localhost:8080/Mywebapps

reloadable:表示可以在运行时在classes与lib文件夹下自动加载类包

docbase:表示应用程序的地址,注意斜杠的方向“”

workdir:表示缓存文件的放置地址
4、【增加自定义web部署文件(推荐使用,不需要重启Tomcat)】

在Tomcat安装目录confCatalinalocalhost下,里面有Tomcat自带的三个应用,随意复制其中的一个XML文件,然后修改docbase指向你自己的应用程序,

并把path改名,各参数参见上第三种方法。或者你也可以自己新建一个XML文件(注意此文件名将作为Context中的path,不管文件里的path怎么设置也无效),

将以下内容复制过去,修改相应路径即可。

<Context path=”/test” docBase=”F:/J2EE/yazd_war_3_0″ debug=”0″ privileged=”true” reloadable=”true” >

</Context>

部署完毕后,通过http://localhost:8080/你的path名 就可以访问。

分类: Java技术栈 标签:

Maven生命周期详解

2016年10月28日 评论已被关闭

Maven生命周期详解

http://juvenshun.iteye.com/blog/213959

 

Maven强大的一个重要的原因是它有一个十分完善的生命周期模型(lifecycle),这个生命周期可以从两方面来理解,第一,顾名思义,运行Maven的每个步骤都由它来定义的,这种预定义的默认行为使得我们使用Maven变得简单,相比而言,Ant的每个步骤都要你手工去定义。第二,这个模型是一种标准,在不同的项目中,使用Maven的接口是一样的,这样就不用去仔细理解每个项目的构建了,一般情况下,mvn clean install 这样的命令是通用的。我想,一定是吸收了许多项目的经验,Maven才能定义出如此完善的模型。

 

Maven有三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,初学者容易将Maven的生命周期看成一个整体,其实不然。这三套生命周期分别是:

  • Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
  • Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
  • Site Lifecycle 生成项目报告,站点,发布站点。

我再次强调一下它们是相互独立的,你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。

 

知道了每套生命周期的大概用途和相互关系以后,来逐个详细看一下每套生命周期,Clean和Site相对比较简单,先解释一下。

 

每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行mvn clean ,这个的clean是Clean生命周期的一个阶段。有点绕?要知道有Clean生命周期,也有clean阶段。Clean生命周期一共包含了三个阶段:

  • pre-clean  执行一些需要在clean之前完成的工作
  • clean  移除所有上一次构建生成的文件
  • post-clean  执行一些需要在clean之后立刻完成的工作

mvn clean 中的clean就是上面的clean,在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,mvn clean 等同于 mvn pre-clean clean ,如果我们运行 mvn post-clean ,那么 pre-clean,clean 都会被运行。这是Maven很重要的一个规则,可以大大简化命令行的输入。

 

下面看一下Site生命周期的各个阶段:

  • pre-site     执行一些需要在生成站点文档之前完成的工作
  • site    生成项目的站点文档
  • post-site     执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  • site-deploy     将生成的站点文档部署到特定的服务器上

这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动生成,很好看。

 

最后,来看一下Maven的最重要的Default生命周期,绝大部分工作都发生在这个生命周期中,这里,我只解释一些比较重要和常用的阶段:

  • validate
  • generate-sources
  • process-sources
  • generate-resources
  • process-resources     复制并处理资源文件,至目标目录,准备打包。
  • compile     编译项目的源代码。
  • process-classes
  • generate-test-sources
  • process-test-sources
  • generate-test-resources
  • process-test-resources     复制并处理资源文件,至目标测试目录。
  • test-compile     编译测试源代码。
  • process-test-classes
  • test     使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
  • prepare-package
  • package     接受编译好的代码,打包成可发布的格式,如 JAR 。
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install     将包安装至本地仓库,以让其它项目依赖。
  • deploy     将最终的包复制到远程的仓库,以让其它开发人员与项目共享。

基本上,根据名称我们就能猜出每个阶段的用途,关于其它阶段的解释,请参考http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

 

记住,运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。

 

此外,Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要,在之后的文章里,我将会进一步解释Maven的插件机制。

分类: Java技术栈 标签: