Tomcat6+Struts2


近期在用Struts2+ExtJS2.1学做东东。

针对Tomcat6和Struts2,简要记之。仅作备忘。


1. 在Tomcat5.0.28上部署测试Struts2。

 启动Tomcat时报错:

 -------------------   
 javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found

 在网上搜索后,才知是类冲突造成的。

 解决方法:可以把Tomcat安装路径下/common/endorsed/中的xml-apis.jar包移除,然后再启动Tomcat5.0.28即可。

 

2. Struts2在Tomcat5.5及以上版本上运行是没有问题的。
 
 于是改用Tomcat6,以前没有用过的。经过这两个月的使用,发现Tomcat6还是很不错的。

 到http://www.apache.org/下载了一个:apache-tomcat-6.0.16.exe。

 在使用时,发现一些地方与Tomcat5是不一样的。
 
 遇到的问题:

 1.Tomcat6启动的时候,控制台出现如下类似信息:

 -----------------------------
  信息: The Apache Tomcat Native library which allows optimal performance in production
  environments was not found on the java.library.path: ... ...
 -----------------------------

 这是 AprLifecycleListener 监听器事件信息, 位置在 Tomcat_home/conf/server.xml 中:
 ...<Listener className="org.apache.catalina.core.AprLifecycleListener

 实际这是建议使用Apache的APR。

 下载地址:

 http://tomcat.heanet.ie/native/1.1.10/binaries/win32/tcnative-1.dll

 按照说明要求,将这个文件放到Tomcat下的bin目录下

 然后重新启动Tomcat6即可。

 详情参考:http://tomcat.apache.org/tomcat-6.0-doc/apr.html

 

2.数据库连接池的配置:
 
  因Tomcat6没有像Tomcat4/5一样自带admin模块,所以无法启用Tomcat Web Server Administration Tool来配置数据库连接池等信息。

  手工配置如下:

  1) 数据库驱动jar文件copy到lib文件夹中;

  2) 参考Tomcat5.0方式,在TOMCAT_HOME/conf/文件夹下,建立/Catalina/localhost路径文件夹;

  3) 在/localhost/文件夹下,建立对应Web应用名字的xml文件,如test.xml;

  4) 仿照配置Tomcat5.0连接池的方式,编辑test.xml文件,如下:

 -----------------------------
      <?xml version='1.0' encoding='utf-8'?>
        <Context docBase="test" path="/test" privileged="true"  reloadable="true">
          <Resource name="jdbc/test"
            auth="Container"
            type="javax.sql.DataSource"
            driverClassName="oracle.jdbc.driver.OracleDriver"
            url="jdbc:oracle:thin:@127.0.0.1:1521:ORCL"
            username="system"
            password="manager"
            maxActive="50"
            maxIdle="10"
            maxWait="5000" />
        </Context>
 -----------------------------

  这个配置属性大致跟Tomcat5的一样,但较Tomcat5更简洁。

 

3. 测试部署Struts2:


 1).需要修改web.xml文件,指定Struts2的Filter。    

 2).struts.xml和struts.properties是部署在WebRoot/WEB-INF/classes/文件级中的。

 这两个文件对应可以放在Eclipse中Web项目的src目录中。

 在struts.xml中配置所有的action。

 action的转发路径,记得要以"/"开头,如:

    <result name="success">/mainframe.jsp</result>

 Struts2的表单提交可以如下写法
 
    <s:form action="loginAction" theme="simple" id="loginForm" method="post">

 其中theme="simple"属性指定了Struts2元素的排列呈现方式。

 如果转发路径配置不正确或表单提交的action指定不正确,则Tomcat6会警告:

 -----------------------------
  No configuration found for the specified action: 'loginAction.action' in namespace: ''.
  Form action defaulting to 'action' attribute's literal value.
 -----------------------------
    

 3). struts.properties是借用struts-core-2.0.x.jar中的文件,原名是default.properties。

 将其改名为struts.properties,放到Web项目的src目录下。

 做如下的修改:
 
     struts.locale=zh_CN

     struts.i18n.encoding=GB2312

 修改后struts能认识中文。

     struts.action.extension=action

 指定struts的action的后缀默认值是.action。


 4).AJAX调用Action时,可以在其指定的返回页面中,使用标签引用Action中的属性做为返回值给AJAX。如:

  -----------------------------
     <%@ page language="java" contentType = "text/html;charset=UTF-8" pageEncoding="UTF-8"%>
     <%@ taglib prefix="s" uri="/struts-tags"%>
     <s:property value="JSONDataString" escape="false"/>
  -----------------------------

 

  其中,属性escape="false" 很重要。
     
  采用Struts2标签展现结果时候,设置escape="false",使Struts2不要对字符串进行转义。
 


PS:今奥运火炬传递于石。

 

[完]

 

                                                                           by JRQ

 

                                                                     2008/07/29 于京


 

 

 

 

又PS:

在网上看到另外一种配置Tomcat6连接池的方法:

-----------------

1.修改tomcat6/conf/context.xml,在context标签内加入
<Resource name="jdbc/test1"  
       auth="Container"          
       type="javax.sql.DataSource"
       driverClassName="oracle.jdbc.driver.OracleDriver"
       url="jdbc:oracle:thin:@127.0.0.1:1521:ORCL"
       username="test1"
       password="test1"
       maxActive="100"
       maxIdle="30"
       maxWait="10000" />
<Resource name="jdbc/test2"
       auth="Container2"          
       type="javax.sql.DataSource"
       driverClassName="oracle.jdbc.driver.OracleDriver"
       url="jdbc:oracle:thin:@127.0.0.1:1521:ORCL"
       username="test2"
       password="test2"
       maxActive="100"
       maxIdle="30"
       maxWait="10000" />
      
2.修改webapp/test/WEB-INF/web.xml,在web-app标签内加入
 <resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/test1</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>
  <resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/test2</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container2</res-auth>
  </resource-ref>
 
3.程序调用连接池语句
  /**pooltag值为test1或test2*/
  public Connection poolConnect(String pooltag){
    Connection conn=null;
    try {
      Context env = new InitialContext();
      Context envctx = (Context) env.lookup("java:comp/env");
      DataSource pool = (DataSource) envctx.lookup("jdbc/"+pooltag);
      if (pool == null)
        throw new Exception("jdbc/"+pooltag+" is an unknown DataSource");
        conn = pool.getConnection();
      }
      catch (Exception e) {
        System.err.println("poolConnect:"+pooltag+". " + e.getMessage());
      }
    return conn;
  }

-------补记于南昌。2009.03.11

 

 

 又PS:

Tomcat6内存不足问题及解决方法
   

1、Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,有可能导致系统无法运行。

常见的问题是报Tomcat内存溢出错误,Out of Memory(系统内存不足)的异常,从而导致客户端显示500错误,一般调整Tomcat的使用内存即可解决此问题。


Windows环境下修改“%TOMCAT_HOME%/bin/catalina.bat”文件,在文件开头增加如下设置:set JAVA_OPTS=-Xms256m -Xmx512m

Linux环境下修改“%TOMCAT_HOME%/bin/catalina.sh”文件,在文件开头增加如下设置:JAVA_OPTS='-Xms256m -Xmx512m'

其中,-Xms设置初始化内存大小,-Xmx设置可以使用的最大内存。

 

2、Tomcat6版本已经没有catalina.bat文件了。

此时需运行%TOMCAT_HOME%/bin/tomcat6w.exe文件,设置其中的Initial memory pool和Maximum memory pool的值,分别为256和512。

 

posted @ 2008-07-29 23:09  程序员的那些  阅读(917)  评论(0编辑  收藏  举报