First Time 写web随记

来源:互联网 发布:淘宝网民真实评价 编辑:程序博客网 时间:2024/06/05 22:46

一个简短的background:
Software Development Practice课要求两周写一个项目出来,队友为了能够实现1个项目交2门作业的美好愿望,choose了一个非常具有普适性的——Library System…
虽然看起来很low但是,作为web纯小白的first blood还是比较适当的…
用的jsp+servlet+hibernate,数据库是mysql(这个东西语法很不友好),IDE是myeclipse10(这个东西也不是很好用)。

下面是正文:

Problem. 1. NullPointer Exception
First time 接触hibernate,用mysql逆向生成了实体类的hbm.xml,由于改了book实体类属性名后忘记同步getter的函数名了,于是测试login的时候报错:
Hibernate配置不对导致的空指针异常
开始查错的时候好心塞啊,错误信息都是reader相关半个字没提及book(毕竟这是在测试reader的login功能…),最后到console翻才在某个不起眼的一行找到:book没有对应的getter…so以后用hibernate reverse要仔细校对属性是否对应(或者直接连实体类都自动生成好了),嗯。

Conclusion:
hibernate openSession时没有成功初始化,直接导致所有涉及session、在session下(open之后close之前)需要数据的东西都只收到NULL指针——这就出现空指针异常。
下面是本渣犯过可能导致此类空指针异常的错误以及hbm.xml里一些属性的含义:

  1. hibernate框架中,生成映射文件如 book.hbm.xml,里面每个id和property name都要精确对应实体类中属性的名字(大小写敏感):
    这里写图片描述
    class name是实体类名字Book(加上包名),table是数据库中对应于Book的表名(这里是book),id name是主键(作为主键的实体类属性名,而不是数据库中的属性名),property name是实体类属性名,column name是表中属性名(也要对应)。

  2. 使用hibernate时,映射的实体类中,每个属性都要有一个set和get方法,一定要用 set+属性名/get+属性名 来命名,否则初始化失败,报错:没有setter和getter。

Problem.2. Another kind of nullpointer Exception:
这里写图片描述

这个状况发生在对数据库中记录进行操作时,本来用Reader r判断是否有rid重复的记录,如果没有,显然应该是null,但是如果在r==null时直接对r进行修改,会出现无法对调用r中set函数,具体原因还不知道,但是如果重新new一个Reader对象进行赋值,就正常了。

Solutions:
1. 这种方法在往库里加记录时较为好用:
这里写图片描述

2.(这段是以deletebook删除数据库中一条书的记录为例)
判断你传入(想添加)的id(主键)与你查询所获得的记录的id是否相同,相同说明数据库里已有此条记录,用flag置true,最后用flag判断,是否成功
这种方法在从库中删除信息时比较好用:
这里写图片描述

Problem.3.
About Servlet Config:
首先servlet其实就是实现了HttpServlet的java类,有doGet、doPost等方法需要重写。
没有配置好就会不停 404 QAQ
servlet配置:每写一个servlet,想让他工作,就要在web.xml里实现声明和映射的配置。下面的配置,这些action都是servlet,servlet的java源码存放在src下的servlet包里。
这里写图片描述

jsp中,如果action路径没有写对就会各种 404:
这里写图片描述

Problem.4.
About mysql deadlock:

mysql deadlock的问题,大概是navicat在改属性是无响应我就把它强行关了,但是mysqld并没有关,里面那个进程没有释放我要改的那条属性的资源,然后再次尝试修改那个table,删除记录各种乱试,估计其中几个操作形成死锁了,然后mysql就把table锁了。因为transaction都commit了也无法rollback。最后选择了鸵鸟——把mysqld服务关了重启,恢复正常。

mysql的语法和pgres有很大区别,不是很友好。
有一个自动编号的功能,看起来挺好用但有1个缺陷:
这里写图片描述


Personal Conclusion:
This is my first java web project, and it’s finally finished!
After a week’s coding and a few test and debugs, our web library seems function quite normal. Thank the other team member for his brief UI prototype design, which help me to learn some bootstrap knowledge.

Alex Liao
05/15/2016

0 0
原创粉丝点击