First Time 写web随记

本文分享了作者第一次接触Java Web项目的经历,特别是在使用Hibernate框架过程中遇到的各种问题及解决办法,包括空指针异常、Servlet配置及MySQL死锁等问题。

一个简短的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

(1)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 “听歌历史 + 收藏偏好” 展示 “推荐歌单(每日 30 首)、新歌速递、相似曲风推荐”,支持按 “场景(通勤 / 学习 / 运动)” 切换推荐维度。 播放页功能:支持 “无损音质切换、倍速播放(0.5x-2.0x)、定时关闭、歌词逐句滚动”,提供 “沉浸式全屏模式”(隐藏冗余控件,突出歌词与专辑封面)。 多端同步:自动同步 “播放进度、收藏列表、歌单” 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现与管理: 智能搜索:支持 “歌曲名 / 歌手 / 歌词片段” 搜索,提供 “模糊匹配(如输入‘晴天’联想‘周杰伦 - 晴天’)、热门搜索词推荐”,结果按 “热度 / 匹配度” 排序。 歌单管理:创建 “公开 / 私有 / 加密” 歌单,支持 “批量添加歌曲、拖拽排序、一键分享到社交平台”,系统自动生成 “歌单封面(基于歌曲风格配色)”。 音乐分类浏览:按 “曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)” 分层浏览,每个分类页展示 “TOP50 榜单”。 社交互动功能: 动态广场:查看 “关注的用户 / 音乐人发布的动态(如‘分享新歌感受’)、好友正在听的歌曲”,支持 “点赞 / 评论 / 转发”,可直接点击动态中的歌曲播放。 听歌排行:个人页展示 “本周听歌 TOP10、累计听歌时长”,平台定期生成 “全球 / 好友榜”(如 “好友中你本周听歌时长排名第 3”)。 音乐圈:加入 “特定曲风圈子(如‘古典音乐爱好者’)”,参与 “话题讨论(如‘你心中最经典的钢琴曲’)、线上歌单共创”。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 “无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面” 上传,填 “歌曲信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值