关于做java web课程设计时遇到的一些坑(宿舍报修系统)
在做课设初期,一定要先想好逻辑思路,明白需求和要实现的功能,最好使用画图工具画出逻辑流程
一开始很多人不知道从哪开始,不知道从何下手,其实只要迈开第一步后面的都会迎刃而解了
在写代码之初,想好所有功能,系统流程,设计好数据库表,用prosess on或者pencil这类的工具来构建出整体的流程,这样后面就可以按照构建好的逻辑流程来一步步实现各个功能就好了
数据库表一定要仔细想好有哪些表,每个表里有哪些内容,有哪些需要设计主键外键,每个属性的类型,属性的长度都需要考虑,同样将每个表的设计思路记录下来,在设计数据库时参考使用
系统功能的实现一直都是增删改查,增删改查的每个功能的方法写在DAO里,一个DAO对应一个实体类,一个实体类对应一个数据库的表。如果涉及到多个表联立的增删改查,那就对需要增删改查的属性构建初一个实体类写get set方法和DAO
举个栗子,就登录的功能实现,首先需要对用户表user创建一个实体类,再写一个用户表的userDAO,在userDAO里写查询操作的方法,查询方法里传进用户名username和用户密码userpassword两个参数,select的sql语句对用户表进行查询,有则返回TRUE无则返回FALSE
那这两个参数,username和userpassword从哪里来的呢?那肯定是我们自己输入的呀,通过用户自己输入的两个值来查询用户表中有无对应的。具体是从jsp页面,form表单要包裹住input标签和button按钮,form表单action属性写自己登录的servlet,method方式推荐使用post,按钮的type属性设置为submit这样才能提交表单,input标签的name属性,servlet里就是同过name获取值的,跟js通过id获取是类似的,servlet是通过name。
大致的流程是,通过jsp页面里,form表单中设置好input的name属性,提交到servlet里,在servlet里request.getParameter(“name属性名”)获得到输入的值也就是value,调用DAO里的方法,将值传进去,查询数据库有则用户名密码正确无用户名或密码错误
基本上所有的功能都是这样的流程了,在jsp页面展示数据,form提交表单或a连接到Servlet,在Servlet调用DAO操控数据库,转发到另外的jsp页面,灵活使用这样的流程就可以实现功能了
遇到的一些坑
1、
input disabled="disabled"
input的这个属性是禁用输入框,也就是不能输入内容了,但是提交表单后在Servlet里不能通过request.getParameter()来获取里面的内容了,我在做数据回传时显示了value值,但是并不能提交表单后获取到它的value值,没办法我在它上面又加了个input表单只不过设置了dispaly:none 隐藏了它拿到的,后来搜了之后才发现,用readOnly="readOnly" 可以实现与disable相同的效果,并且request.getParameter()还能拿到数据回显的value值。还是学艺不精啊!
2、
查询数据库中为空的字段要使用is null
在查询数据库表中某一字段为空的时候,下意识sql语句就用了where后面的条件age=null,然后什么也查询不到,原因在于写条件语句某个字段是空的要用is null来代表,比如这里就应该写为age is null,注意不是等于null,是is null
3、
有时候查询某个字段时查询不到,检查一下是否有空格或回车,这个特别搞人心态,查了半天sql语句明明没有问题,却就是查询不到,如果说在图形化界面用sql语句查询特定字段查不到,就仔细看看有没有空格,表里那有空格而写的sql语句里没有,那肯定是查不到的
另外文本域标签<textarea type="text" style="resize:none;" ></textarea> 这后面的尖括号一定要对齐放在同一行,中间不要有回车空格,不然在文本域里的光标不会定在第一个,这样写入数据时会有空格 假如写的是<textarea type="text" style="resize:none;" > </textarea> 这种那就会有空格 或者写成这种有回车的,也有
4、
有需要传递某个参数,最好用form表单提交到Servlet,用session有些占资源,用?传参的话在页面特别丑而且不安全。在一开始做课设时我用?加&传递参数,在跳转时页面的地址栏就显示出id啊name什么的,特别不安全且不美观。如果在遇到需要传递for : 循环里的get的某个值时,可以用js来传递,也或者用a链接加?<%=要传递的参数%>传递到Servlet
一些建议
无论是写DAO还是实体类,或者写jsp页面和Servlet,最好按照规范来,用多个包来分别装,这样写到后面不会很混乱,找对应的jsp或Servlet会方便很多,在写DAO里的sql语句时,先在图形化界面写sql语句运行,成功的话再对照着写sql语句,因为sql语句里的单引号双引号很容易出错。起名按照规范起,也能看的清楚找的方便。
想不起来了,后面想起来再补充吧
|