javaweb课设,忙了将近一个月,终于结束了。
题目:基于opencv的教室管理系统。B/S结构
用的主要web技术:jsp+structs2+hibernate。MVC模式。
其他技术:J2SE的JNI,调用dll。图像处理opencv,数据库sqlserver。
遇到的问题:
1.数据库建表后无法使用,原因:表名不小心用了“user”这个关键字。这个需要特别注意,因为不容易把它和关键字联系起来,可以改用userInfo等。还有一些关键字,如begin,end,等很可能会在表中被误用。所以在设置表名和列名时注意不要使用关键字。
2.sql文件无法执行。碰到一个同学,sql文件提示好多错误,我们用的是sqlserver,全都是莫名其妙的。后面问他这个sql到底有没有错?他居然跟我说这个是mysql的。立马给跪了。后面还碰到几个同学也是这样,发现还是用mysql的更多啊,,,
3.数据库拒绝访问,一般跟端口有关。其中一个是不小心启动了2个tomcat,一个是自己的,一个是myeclipse中自带的,那个自己安装的tomcat一直占用着一个端口,导致myeclipse中的tomcat无法访问。还有一个是提示“connet reset”这样的话一般是hibernate的中设置的驱动连接的端口不正确,一般sqlserver2008的是1434.这个可以在配置管理工具中查看。如果你不小心写的是1433而不是配置管理工具中显示的那个1434,你会发现可以连接,但连接后只能访问一次,第二次访问就出错了,提示为connet reset。也就是说用connection driver 测试连接的时候是可以连接的,因为这就是第一次连接,但后面要用的时候就出错了,因为后面的是第二次了,这样就会造成一个假象,看测试连接明明就可以连接但为什么后面用的时候就出错了呢?然后把原因转移到其他方面而以为不是端口问题。
4.structs2中用的ognl语言,不能不说这里,函数名已经不再是你想起什么就是起什么的时代了,get/set+某个变量(如获取变量名为name的值用getName()这个函数,注意首字母大写,)都可以对这个变量进行访问,所以如果你不小心把某个变量弄错了,或者没大写,你在jsp页面可能就无法通过标签引用到这个值,而在action中你也就可能无法获得从请求中传过来的值。
5.不熟悉各种标签的用法加上不熟悉ognl语言就会使view和control层很难结合起来。这边碰到的问题也最多,但全部都是一些细节问题。这边记一些关键的代码吧。
一,
<s:iterator value="msgList" status="index"> <s:if test="#index.index<(#session.curPage*5)&&#index.index>=(#session.curPage-1)*5"> <tr><td><s:property value="timeString"/></td> <td><s:property value="userNo"/>:</td> <td><s:property value="msgContent"/></td> </tr> </s:if> </s:iterator>
二。
<a href="#" onclick="movePage('1',<s:property value="#session.curPage"/>)">下一页</a>
<a href="showMsg.action?userNo=<s:property value="#session.userInfo.userNo"/>"
function movePage(move,curPage){ document.showSearch.action= "search.action?move="+move+"&curPage="+curPage; document.showSearch.submit(); }
6.js的重定位;self.location="url";window.location.reload();后者相对于点击刷新。
7.java.sql.DataTruncation: Data truncation
以上异常是数据库数据存储时,超出字段大小导致。
示例如name字段为varchar(50),那么当你name的值插入一个为51长度的字符串时候,就会报此异常了!
8.中文的编码问题,一般把这个workspace设置为UTF-8,然后用post的话也不会有这个问题,主要是用get提交的话是在url里面,这时可以用一种比较有效的方式是str = encodeURI(encodeURI("trends.action?content="+content+"&trendsType="+trendsType));
然后在接收方用r2=URLDecoder.decode(this.content.trim(), "utf-8");解码成指定的编码方式。