2009/08/24

weblcc发布了

上周五Tom把virtual server帮我搞定. 可是把该装的软件都在新的Windows server 2008上装好后, 却在Netbeans中运行时发生Java虚拟机的错误. 周末想了两天, 发现还是MCR的问题: 在数据库操作之后实例化matlab接口会出现问题. 看来还是要在server 2008上装matlab. 那个stand along的MCR还是不太完善. 

今天上午装上了matlab. 虽然可以在一个普通的Java类中实例化matlab接口,可是还是运行不了web程序. 比较一下, 看到web程序中servlet实例化matlab接口的方法是:

weblcc.WeblccMat weblccMat = null;

...

synchronized (application) {
weblccMat = (weblcc.WeblccMat) pageContext.getAttribute("weblccMat", PageContext.APPLICATION_SCOPE);
if (weblccMat == null) {
weblccMat = new weblcc.WeblccMat();
pageContext.setAttribute("weblccMat", weblccMat, PageContext.APPLICATION_SCOPE);
}
}

于是尝试把程序改为

if(session.getAttribute("weblccMat")==null){

  weblccMat =  new weblcc.WeblccMat();

 session.setAttribute("weblccMat",weblccMat);

}else{

  weblccMat = (weblcc.WeblccMat)session.getAttribute("weblccMat");

}

运行,失败。不是代码的错误,而是glassfish在经历了Java虚拟机的错误之后就启动不了了。当初之所以用glassfish,是因为netbeans的doc是用glassfish做实例。可是后来看网上很多资料都是tomcat相关的。而且,我也发现tomcat的启动速度要比glassfish快很多, 这对于调试当然很重要了。于是我决定用tomcat做我的服务器程序。

在netbeans中设置tomcat为运行时服务器后,weblcc终于可以顺利运行。

之后我把weblcc的web程序在tomcat中deploy,运行,前面所有页面都顺利,就是最后的results picture出不来。有了上次的经验,我很快找到了问题的原因:还是路径问题。 matlab程序将图片按绝对路径存到了我的netbeans的project下build/web/resultpics/文件夹下,可是tomcat会按相对路径在tomcat目录下的webapps/LCC/resultpics/文件夹下找图片。 这样当然不会显示图片。

于是我把原servlet程序中的

private static final String figureDir = System.getProperty("user.dir") + "/domains/LCC/build/web/resultpics/";

改为

private static final String figureDir = "D:/program/Apache Tomcat 6.0.18/webapps/LCC/resultpics/". 注意最后那个backslash一定要加,不然图片全存到/LCC下了!

运行bin/startup.bat,成功!


weblcc 顺利发布。 


No comments:

Post a Comment