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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值