首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

tomcat支配多个项目

2012-10-23 
tomcat部署多个项目最近有个项目需要在tomcat部署多个项目:(个人解决方案)第一种:在host中加: Host name

tomcat部署多个项目
最近有个项目需要在tomcat部署多个项目:(个人解决方案)
第一种:
在host中加:
<Host name="localhost" appBase="webapps"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">

<Context path="/xfpm222"  docBase="D:\running\Xfpm2" debug="0" reloadable="true">
<Resource name="jdbc/Oraclexfpm222" auth="Container" type="javax.sql.DataSource"  maxActive="100"   maxIdle="50"   maxWait="-1" username="xfpm2"  

password="xfpm2"   driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@162.8.156.40:1521:orcl"/>
</Context>
</Host>

报错1:
java.lang.IllegalStateException: Web app root system property already set to dif
ferent value: 'webapp.root' = [D:\running\Xfpm2\] instead of [C:\Program Files\T
omcat 5.5\webapps\Xfpm2\] - Choose unique values for the 'webAppRootKey' context
-param in your web.xml files!
        at org.springframework.web.util.WebUtils.setWebAppRootSystemProperty(Web
Utils.java:132)
        at org.springframework.web.util.Log4jWebConfigurer.initLogging(Log4jWebC
onfigurer.java:118)
......

解决1:
是两个项目的设置重复了,导致出错,但我发现web.xml里并没有配置webAppRootKey项,然后查阅网上资料
,原来是因为如果没有web.xm 内没有设置webAppRootKey项,是为默认设置

public  static  void  setWebAppRootSystemProperty(ServletContext servletContext) throws  IllegalStateException  {
        String  param = servletContext.getInitParameter(WEB_APP_ROOT_KEY_PARAM);
        String  key = (param != null  ? param : DEFAULT_WEB_APP_ROOT_KEY);
        String  oldValue = System .getProperty(key);
        if  (oldValue != null ) {
            throw  new  IllegalStateException ("WARNING: Web app root system property already set: "  + key + " = "  +
                                                                

            oldValue + " - Choose unique webAppRootKey values in your web.xml files!" );
        }
        String  root = servletContext.getRealPath("/" );
        if  (root == null ) {
            throw  new  IllegalStateException ("Cannot set web app root system property when WAR file is not 

expanded");
        }
        System .setProperty(key, root);
        servletContext.log("Set web app root system property: "  + key + " = "  + root);
    }

从代码看出,该方法其实就是把该web application的根目录的绝对文件路径作为属性保存在 System的属性列表中。该属性的名字,由web.xml文件中的名为"webAppRootKey"的参数值指出。

如果不在web.xml中定义 webAppRootKey参数,那么属性名就是缺省的"webapp.root".在我们的petclinic项目中已经定义了 webAppRootKey参数,其值为"petclinic.root",因此,属性的名字

就是"petclinic.root".

最后将webAppRootKey项配置好,错误解决。

以上解释懂一点,但是自己解决方法:在web.xml中加:
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>web1.root</param-value>
</context-param>
另一个项目中加:
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>web2.root</param-value>
</context-param>


报错2:

Caught exception while loading file struts-default.xml - [unknown location]
        at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loa
dConfigurationFiles(XmlConfigurationProvider.java:795)
        at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loa
dDocuments(XmlConfigurationProvider.java:132)
......

解决2:可能是出现包之间的冲突,可以把冲突的包放在tomcat的common中(xerces-2.6.2.jar)

报错3:
java.lang.NullPointerException
        at jimmystudio.util.table.TableParser.getPageCount(Unknown Source)
        at jimmystudio.util.table.TableParser.getPage(Unknown Source)
        at jimmystudio.util.table.TableUtils.init(Unknown Source)
        at org.apache.jsp.util.table.table_jsp._jspService(table_jsp.java:57)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper
.java:332)

解决3:这是同一数据库,出现找不到数据(不知道是页面缓存的问题,还是数据库连接的问题)
如果数据用同一数据库可能出现报错!!
解决另外建立数据库、用户名和密码,分开连接。




第二种:增加虚拟目录,配置多个项目(自己还未实践)

      想要通过tomcat访问你的项目,第一种方法就是把你的项目复制到tomcat目录下的webapps目录里。第二种方法就是

配置要运行的项目的路径,如下:

      打开tomcat目录下的conf目录找到server.xml用记事本打开,找到<Host ....></Host>标记,先看看我的tomcat的server.xml里的Host标记里的配置:

     <Host name="127.0.0.1"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">

            <Context path="" docBase="D:\HtmlTools\xinjing\yangWork\homework\web" debug="0" reloadable="true"  crossContext="true"></Context>
        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->
        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
        -->
      </Host>
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">

           <Context path="" docBase="D:\HtmlTools\xinjing\teacher\GWTGXT_TEST_4\web" debug="0" reloadable="true"  crossContext="true"></Context>

      </Host>

      我的配了两个Host,每一个Host配了一个项目,就是说我的tomcat配了两个项目。(如果没有Context path...,可以自己加上去)注意:两个Host的name就不能相同,这个name就是访

问tomcat的域名,也就是说这里每个项目配置了独立的域名。我试过在同一个Host里配两个项目(就是在</Context>后加一个<Context path>),可是这样会出错,就是说同一个域名不能配

两个项目。访问时要注意:第一个是:http://127.0.0.1:8080/Homework.html,第二个是:http://localhost:8080/GWTGXTTest.html;我的tomcat的端口配置是8080;同在server.xml配置

访问端口:

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
      maxThreads="500" minSpareThreads="50" maxSpareThreads="500"
               enableLookups="false" acceptCount="500"
               redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true"/>

        GET方式URL乱码问题解决也是在这里,其中的UTF-8 请根据你的需要自己修改,比如GBK。

   tomcat的权限请看conf目录下tomcat-users.xml,在这不多说了。

热点排行