标题:初恋struts
关键字:JSP struts MVC Apache Tomcat
作者:jrq
内容:
struts是男是女,是雌是雄,是什么花花草草,是什么东东就不多说了。
近日尝试做一Hello Struts,记录下遇到的些许问题,权且备忘。
如另对初学者有些许帮助,则善莫大焉,聊作一慰。[:D]
BTW:“初恋struts” means “初练struts”(咳咳~~ 笔误笔误~~ [:D])
如下这些文字仅适合初恋者。如果是热恋或已婚者,那么就没有读下去的必要了。
一、Win2k + JDK1.4 + Apache Tomcat 4.1.27 + jakarta-struts-1.1 环境
本例新建struts项目应用的存放路径为:TOMCAT_HOME\webapps\ROOT\StrutsWeb 。
(TOMCAT_HOME是Apache Tomcat 4.1.27在服务器的安装路径,根据具体情况而有所不同,StrutsWeb即是一个struts项目应用的保存路径)
1.访问JSP页面:http://127.0.0.1:8080/StrutsWeb/index.jsp ,出现类似下面的错误提示:
“org.apache.jasper.JasperException: File "/WEB-INF/struts-bean.tld" not found”
“org.apache.jasper.JasperException: File "/WEB-INF/struts-html.tld" not found”
解决办法:
*1*.
先检查struts应用的标签文件的配置情况,对应\jakarta-struts-1.1\lib\中的*.tld文件,看看\StrutsWeb\WEB-INF\中的*.tld文件是否完整。
如果不全,则需要从\jakarta-struts-1.1\lib\中,把全部*.tld文件copy至\StrutsWeb\WEB-INF\中。
然后重新启动Apache Tomcat,看看效果如何。
*.tld是标签库描述器文件,它们描述了多个struts标记库中的自定义标签。
*2*.
如果确认struts项目的标签文件配置无误,那么,在一般情况下,是需要把struts项目的这个WEB应用在Tomcat的服务应用中单独描述出来,
即需修改TOMAT_HOME\conf\server.xml文件,在server.xml中找到如下行:
<!-- Tomcat Root Context -->
<!--
<Context path="" docBase="ROOT" debug="0"/>
-->
然后在其下面加上这句:
<Context path="/mystruts" docBase="TOMCAT_HOME\webapps\ROOT\StrutsWeb" debug="0" reloadable="true"/>
保存server.xml,然后重新启动Apache Tomcat,这样就可以访问这个WEB应用了。
即可这样访问:http://127.0.0.1:8080/mystruts/
或 http://127.0.0.1:8080/mystruts/index.jsp。
注意:“TOMCAT_HOME”的具体含义如前所述,是根据本机的情况而定的。
2.访问JSP页面:http://127.0.0.1:8080/mystruts/index.jsp ,出现如下的错误提示:
“org.apache.jasper.JasperException: Cannot find ActionMappings or ActionFormBeans collection”
解决办法:
*1*
对应\jakarta-struts-1.1\lib\中的*.jar文件(struts1.1共有10个*.jar文件),看看\StrutsWeb\WEB-INF\lib\中的*.jar文件是否完整。
如果在\StrutsWeb\WEB-INF\lib\中只有一个struts.jar,那么将其他的*.jar文件也copy到\StrutsWeb\WEB-INF\lib\中。
然后重新启动Apache Tomcat即可访问。
struts.jar是一个重要的文件,它包含了struts中的所有Java类。
*2*
如果经过上面的一步还没有搞定,那么请耐心的检查或修改\StrutsWeb\WEB-INF\中的struts-config.xml配置文件。
看看struts配置情况是否写错,action-mappings的配置是否写错。
一定要注意区分字母的大小写。
请再检查一遍。
然后请再检查一遍。
不要烦躁,一定要像对待初恋情人一样对待它,不然会死的很难堪!
一定要好好检查。
这个MVC中的C很要命的,流程控制全靠它了,一定要小心呵护的。[:D]
还有,记得修改完毕后重新启动Apache Tomcat。
*3*
我在网上看到有人对这个问题说“试了千百回,改了千百次,就是不知道什么原因”。
如果你也恰好和struts是初恋,也恰好试了千百回,改了千百次,
“Cannot find ActionMappings or ActionFormBeans collection”的错误仍然涛声依旧,
那么,请不要灰心,
相信我,胜利的喜悦你马上就能体会到!
因为,这里有一个毕杀绝技!!!!!
请按照如下操作:
打开TOMAT_HOME\conf\server.xml文件,找到在上面提到过的加入WEB应用的那一行:
<Context path="/mystruts" docBase="TOMCAT_HOME\webapps\ROOT\StrutsWeb" debug="0" reloadable="true"/>
然后对其修改成为:
<Context path="/mystruts" docBase="TOMCAT_HOME\webapps\ROOT\StrutsWeb" debug="0" reloadable="true" privileged="true"/>
这样就加上一个参数:privileged="true",这个参数是至关重要的。
(我花N多时间找了N多帖子问了N个人才搞定的,可见struts的初恋有多辛苦了!! [:(])
然后重新启动Apache Tomcat,这样访问JSP页面就没有问题了。[:D]
*4*
我在网上查找了一些struts应用的配置说明资料,一些配置资料上只提到把struts.jar这个文件copy到\WEB-INF\lib\中,
而并没有说需要把sturts的全部*.jar文件进行copy。
上面提到过,struts.jar包含了struts中的所有Java类。故我有此一试。
(当然,如果连struts.jar都没有了,那就没有搞头了。[:(] )
我只把struts.jar文件copy到\StrutsWeb\WEB-INF\lib\中,然后启动Apache Tomcat(当然,web.xml和struts-config.xml已经配置完毕)。
一试,果然不爽。
访问JSP页面时,看到提示错误:
“org.apache.jasper.JasperException: Cannot find ActionMappings or ActionFormBeans collection”
傻眼了。
又折腾了半天,发现上面提到的privileged="true"在这种情况下也可以发挥作用,
即修改server.xml文件,在<Context>的描述中加上参数privileged="true",使之变成这样:
<Context path="/mystruts" docBase="TOMCAT_HOME\webapps\ROOT\StrutsWeb" debug="0" reloadable="true" privileged="true"/>
这样就可以访问JSP页面并且运行无误,没有错误提示了。[^ō^]
所以可以得出这样一个东东:
如果在\StrutsWeb\WEB-INF\lib\中只有一个struts.jar而没有其他的*.jar文件,那么,在server.xml文件中把相对的WEB应用的描述进行修改,在其中加入privileged="true"参数,就可以使struts项目的应用正常运行且访问无误。
二、Win2k + JDK1.4 + Apache Tomcat 5.0.13 + jakarta-struts-1.1 环境
用Tomcat5作为JSP的容器,上述问题在struts中也会经常遇到,解决方法也都大致相同,privileged="true"对Tomcat5也同样有效。[:D]
下面主要说一下不同的地方。
平时对Apache Tomcat没有仔细研究,这次发现了几点,简略记录一下。
*1*
与Apache Tomcat4比较,Apache Tomcat5在其conf文件夹中增加了Catalina目录及子目录,其详细路径为:TOMCAT_HOME\conf\Catalina\localhost\,在localhost文件夹中全部是*.xml文件。
每个*.xml文件对应一个Tomcat的WEB应用的名字。
localhost文件夹中,Apache Tomcat5自动生成的有两个文件,即admin.xml和manager.xml文件。
当Apache Tomcat5启动后,就可以这样访问了:
http://127.0.0.1:8080/manager/
其中,访问http://127.0.0.1:8080/admin/ ,通过用户名和密码的验证后,就可以进入Tomcat的WEB服务管理器(TOMCAT WEBSERVER ADMINISTRATION TOOL)了。
*2*
在Tomcat4中新增一个WEB应用项目的访问,是在TOMAT_HOME\conf\server.xml文件中增加一个<Context>描述,在server.xml中找到如下行:
<!-- Tomcat Root Context -->
<!--
<Context path="" docBase="ROOT" debug="0"/>
-->
然后在其下面加上这句:
<Context path="/mystruts" docBase="TOMCAT_HOME\webapps\ROOT\StrutsWeb" debug="0" reloadable="true"/>
保存server.xml后重新启动Apache Tomcat4,就可以通过http://127.0.0.1:8080/mystruts/ 来访问这个WEB应用了。
在Tomcat5中同样的也可以这么做。
同样的,在TOMAT_HOME\conf\server.xml文件中增加一个<Context>描述,重新启动Tomcat服务后就可以用来访问了。
需要特别指出的是,当在在Tomcat5的server.xml文件中增加一个<Context>描述后,重新启动Tomcat时,会自动在TOMCAT_HOME\conf\Catalina\localhost\路径下生成一个xml文件,这个xml文件的名称和<Context>描述中所写的WEB应用的名字是一样的。
如果server.xml文件中的这个<Context>描述有所改动的话(增加属性或修改属性),重新启动Tomcat时,这些改动变化都会及时的反映在同名的xml文件中(这样就做到了同步一致)。
例如上面在server.xml中所写的
<Context path="/mystruts" docBase="TOMCAT_HOME\webapps\ROOT\StrutsWeb" debug="0" reloadable="true"/>
当Tomcat5启动后,会在\Catalina\localhost\下生成一个名字为“mystruts.xml”的文件。
其内容和server.xml中所写的一样,为:
<Context docBase="TOMCAT_HOME/webapps/ROOT/StrutsWeb" path="/mystruts" reloadable="true">
</Context>
所以,我们可以这样说:如果要在Apache Tomcat5中新增WEB应用服务的话,就可以直接在TOMCAT_HOME\conf\Catalina\localhost\路径下编辑生成一个xml文件,在这个xml文件中写上相对应的<Context>描述即可,而不需要在server.xml中增加或编辑其他东东了。[^ō^]
*3*
另外,需要说明的是,Apache Tomcat正常安装后的启动方式有多个:
** 可以在TOMCAT_HOME\bin\中点击startup.bat来启动Tomcat服务。
** 可以在“开始”-->“程序”-->“Apache Tomcat”菜单中点击“Start Tomcat”来运行Tomcat服务。
但是,Tomcat4和Tomcat5的服务运行形式是不一样的。
Tomcat4无论从“startup.bat”点击运行还是从“Start Tomcat”点击运行,都会出现黑屏白字的命令提示符窗口(类DOS窗口),用来提示说明Tomcat服务的运行情况和一些日志信息。
Tomcat5从“startup.bat”点击运行后,出现的是黑屏白字的命令提示符窗口,而从“Start Tomcat”点击运行后,服务窗口不会出现,而只会在屏幕的右下方出现一个带绿色三角的托盘图标([:D]乍一看,这个图标和MS SQLSERVER服务管理器的图标几乎一模一样)。
*4*
使用Apache Tomcat5做服务,特别需要指出的是,如果在TOMAT_HOME\conf\server.xml文件中增加一个<Context>描述,
用“startup.bat”方式启动Tomcat服务时,在命令提示符窗口上会显示出如下信息(但是不会影响struts的使用)
------------------------------
警告: Error storing config file
java.io.FileNotFoundException: ..\..\conf\Catalina\localhost\mystruts.xml (系统找
不到指定的路径。)
------------------------------
并且\Catalina\localhost\下对应的xml文件不会得到更新。
从“Start Tomcat”点击运行Tomcat5服务是不会有这种情况的(这个可以察看Tomcat的日志文件)。
*5*
再来关注一下<Context>描述中的参数“privileged="true"”。
在路径TOMCAT_HOME\conf\Catalina\localhost\下,找到Apache Tomcat5自动生成的有两个文件,即admin.xml和manager.xml文件。
打开xml文件,能分别找到如下内容:
------------------------------
<Context path="/admin" docBase="../server/webapps/admin"
debug="0" privileged="true">
</Context>
<Context path="/manager" docBase="../server/webapps/manager"
debug="0" privileged="true">
</Context>
------------------------------
呵呵,看明白了吗?
Apache Tomcat5自动生成的xml文件中,对<Context>的描述中,都有一个参数,即privileged="true" 。
[完毕]
By jrq
2004年10月19日夜 于石市