java web 课设小结

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>

这边用到<s:iterator><s:if>标签,这两个标签的用法可以在网上找到,困难的是那些值的访问,和if里面的值的比较。

二。

<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();
		}

注意一个是js中的函数中的参数列表没有参数类型,直接2个变量就行了,然后就是传参,后面一参数是通过<s:properity >标签来得到参数值的,然后再将参数值传给函数。不能直接用ognl语言访问并传值。如写成“move(“1”,#session.cruPage)”,或者是“move(“1”,“<s:property value="#session.curPage"/>”)”,此外就是注意各种单引号和双引号。要分开使用。

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");解码成指定的编码方式。

你可能感兴趣的:(java,Web,Hibernate,Ognl,数据库访问,structs)