JEECMS两日

April 21, 2013

安装版

官网论坛上下载的安装版,在Windows下能正常安装运行,在Linux下就不行了,都是tomcat 6和jdk 1.7,略奇怪。

第一个错误:

java.lang.NoClassDefFoundError: Could not initialize class com.octo.captcha.image.gimpy.GimpyFactory

我下载了一个jcaptcha-all-1.0-RC6.jar替换掉自带的jcaptcha-1.0.jar,解决这个问题之后出现第二个问题,GenericManageableCaptchaServic参数不对。

看jcaptcha文档得知,GenericManageableCaptchaService的构造器只有3个参数,所以修改captcha-context-xml,去掉第4个参数。

<bean id="captchaService" class="com.octo.captcha.service.multitype.GenericManageableCaptchaService">
		<constructor-arg index="0" ref="imageEngine"/>
		<constructor-arg type="int" index="1" value="180"/>
		<constructor-arg type="int" index="2" value="100000"/>
		<!-- <constructor-arg type="int" index="3" value="75000"/> -->
</bean>

乱码

JEECMS一些模板是中文名的,用unzip解压要注意,不然会有乱码,我直接下载编译unzip 6.10b,加-O CP936解压。

重定向

我一开始以为这部分最简单,结果把!=写成==花了我不时间debug。

要实现把所有为登陆的请求重定向到登陆页面,可以利用Spring的HandlerInterceptor实现。因为自己对Spring不熟,所以直接改了JEECMSd的FrontContextInterceptor,它原来就有判断用户登陆,所以很简单就实现重定向。

在重定向的时候,要注意的是有些请求不能重定向到登陆页面,例如注册页面、和找回密码等等。一开始我用grep找出可以用GET请求的URL,然后自己判断是否允许。

只能GET:

grep -r "@RequestMapping" | grep GET | grep '".*\.jspx"' -oh | sort  | uniq

能GET能POST:

grep -r "@RequestMapping" | grep -v POST | grep '".*\.jspx"' -oh | sort  | uniq

后来,我是直接操作一遍,记录下要放行URL就可以了。

编译

用笨方法,直接编译,然后连代码一起打包成jar就可以了。

javac -g -cp .:/tmp/tmproot/lib/*:/tmp/tmproot/webapps/ROOT/WEB-INF/lib/* `find com -name "*.java"`
jar cf jeecms-all.jar com/

和代码一起打包是为了方便打包xml文件,如果忘了和hibernate用的xml一起打包,就会出现XXXX is not mapped的异常。用-g编译,是因为JEECMS用@RequestMapping但又不用注解指定参数的后果。

其他

今天是我最频繁用grep和find的一天,很难想像没有这些工具,要怎样快速定位到文件。犯过一些低级错误之后,我明白了昏昏欲睡的时候就应该好好休息。