课程设计“招生管理系统”中遇到的问题

    本系统任然采用SSH框架。应该说经过这么多的练习,对这3个框架的集成应该比较熟悉了,但是在本项目中还是出了问题,而且困扰了我们将近一天。问题出在Struts1.3上,按照我的习惯,喜欢用下载的API,而不用MyEclipse自带的。但是这次下载的Struts1.3的jar包中出了些问题。最开始为了减少jar包的数量,只添加了一些必须用的jar,但是添加的这些jar出现了与tomcat不兼容的问题。最初用tomcat6.0.18的时候,一启动tomcat就报错,然后改用tomcat5.5.25,虽然不报错,但是不能调用Struts的Action,即在浏览器中输入"xxx.do"的时候始终提示找不到对应的Action。检查了很多遍web.xml和struts-config.xml,发现都没有问题。
    实在不知道问题出在哪里了,于是又回到做原始的练习。先建立一个Web Project,取名StrutsTest,通过MyEclipse向导为我生成struts的相关类和配置文件,这是用的Struts1.3 API是MyEclipse自带的,tomcat版本是6.0.16,这个练习是没有任何问题的。然后去掉MyEclipse自带的API,该用下载的Struts1.3的API,这时启动tomcat6.0.16马上就报错,改为tomcat5.5.25就不报错,但是也不能调用Action,即与课程设计的项目出的问题相似。仔细对比了下MyEclipse自带的Struts1.3 API和下载的Struts1.3 API,发现大部分类是相同的,只有少些jar有些不同,下载的Struts1.3中jstl是1.0.2,而MyEclipse自带的是1.2,下载的多一个oro-2.0.8.jar... 这样并看不出有什么问题。最后决定:使用MyEclipse自带的Struts,反正他们大部分jar包都是相同的。
    总结:为了减少lib的jar包数量,我把SSH必须的Jar进行了筛选,放在了一个专门的文件夹下。但是随着版本的更新,这些“必须”的Jar开始出现问题,尤其是Struts的Jar,Spring和Hibernate没什么问题。我们这个项目是先配置Spring和Hibernate,然后才集成Struts的。其实相比另外两个框架,Struts的Jar包并不多,可以全部引入。但是Spring非常庞大,必须对其Jar包进行筛选。一个项目最重要的还是先让它跑起来,所以以后做类似项目的时候可以先配置Struts,因为它属于Web层,这个B/S模式构架的项目要跑起来当然Web层不能有问题。再一个就是Java相关的技术中,框架或者工具的版本不兼容也是一个隐患,所以有时候也得放弃使用最新版本。
    在程序不能正常运行的时候,我会首先自己尝试根据错误信息来解决问题,实在不行就用Google搜索解决方案,还不行再到CSDN论坛上提问,任然不行的话就只有先放一放,说不定哪天有灵感了很快就能解决。



解决的问题:
1.在struts-config.xml中,<action>下<forward>元素的path属性对应的文件名应该已"/"开始,而不能用相对路径。比如:<forward name="addSuccess" path="addExamineeInfoChoice.jsp" />应该写成<forward name="addSuccess" path="/examinee/addExamineeInfoChoice.jsp" />,即要用绝对路径。

2.在struts-config.xml中,写<action>的path属性时,指定的路径最好与调用该path对应Action的jsp页面在同一个目录下。比如:有一个addExamineeInfo.jsp页面在examiee目录下,它要调用addExamineeInfo.do对应的Action,那么在<action>中应该写成path="/examinee/addExamineeInfo",这样可以避免在页面之间转向过后出问题。

3.在Struts的ActionForm中,如果要用Validator框架验证对象表单属性的合法性,最好将ActionForm的每个属性都定义为String类型,因为它从页面端获取数据,得到的就是String类型,而且ActionForm只是作为VO在页面间传输,用户只关心看到的结果(即字符),并不关心它实际是什么类型。只有当要把表单数据进行持久化,即需要把VO转化为PO时,才需要将String类型转化为实际的类型。这个过程需要手动完成,比如完成String到Date型的转换。
否则,如果在ActionForm中用了像Integer,Date这样的类型,很可能验证框架不能帮助我们进行验证。比如在ActionForm中对age属性定义为Integer类型,虽然在validate.xml中指明了age属性的验证规则为int,但验证不能成功。而把age定义为String类型,就可以了。


你可能感兴趣的:(tomcat,Hibernate,MyEclipse,struts,jar,action)