关于商品管理系统实战示例2

在上期我们完成了用户注册功能,现在我们继续写用户登陆功能,我其实也不知道这期可以完成多少,人比较懒,写一点是一点,可我觉得苍蝇再小也是坨肉。
1.分析登陆页面
2.创建loginservlet
3.在上次创建的userservice添加登陆方法
4.在userdao添加查询方法,注意不要捕获异常,直接抛给servlet处理。
5.测试:
到这里登陆功能就已经完成了
下一步实现记住密码的功能
1.观察前端页面
2.在servlet创建cookie 保存账户密码
3.在页面中导入jstl标签库
4.在页面中通过el表达式获取作用域的cookie值
5.测试成功
使用beanutils解决数据类型转换的问题,得用到这两个jar包。
使用beanutils将获取的参数封装成对象
所以之前的用户注册传入的具体参数可以直接修改成传入对象,比如:
特别需要注意的是当我们使用beanutils.populate(user, parametermap)方法的时候,map的key必须与目标属性相同。简而言之就是:
接收到的参数命名与对象名称一致,否则无法就无法绑定。
当然这种用法只存在原生的写法,当我们在使用框架的时候,这些操作都是由框架来完成的,但我个人觉得还是有必要了解一下。
关于servlet抽取
在以上的示例种都是写一个功能创建一个servlet,但在实际开发过程种,都是按模块开发,比如登陆注册就是属于用户模块,我们应当整合到一起。
1.在jsp表单种添加input标签
2.通过获取method的value值,分别对应不同的方法
注意比较值的这种写法 register.equals(method),而不是method.equals(register),因为不容易造成空指针错误。
这种写法又导致另一种情况的出现,当我们method的值比较多的时候,每次进行 if 逻辑判断然后执行相应的方法就很麻烦。所以我们需要通过反射机制获取文件的字节码文件,这样就没必要每次判断。
1.新建一个baseservlet基类,重写services方法
2.让userservlet继承baseservlet,并注释掉userservlet种的doget()和dopost()方法,因为,请求访问userservlet的时候,找不到相应的doget和dopost方法就会去找其基类中的方法,也就是去找baseservlet中的service方法
3.获取字节码文件中的方法并执行
这样写简化很多代码,看起来也很舒服。但实际上框架已经帮我们完成了这些事情,我们只需要写相关的servlet就行,但我为什么要讲这些,因为感觉有必要了解一下运行的原理。