登陆的逻辑:
loginServlet根据用户输入的账号密码调用UserService的login方法来查询是否有这样一个用户,并且判断邮箱是否激活(这个我这里还没实现),login方法肯定要调用Dao层的根据账号密码查找用户的方法。最后LoginServlet得到返回值并响应。
LoginServlet:
这里开始getParameterMap是获得客户端的信息,并封装成map对象,如存储了账号密码等信息。之后实例化一个user对象,目的是通过populate方法,将map中的值一一映射到user中,当然前提是user实体类的定义中有对应的属性,和get,set方法。
InvocationTargetException当被调用的方法的内部抛出了异常而没有被捕获时,将由此异常接收
IllegalAcessException 不合法的参数异常
e之后就是调用service方法查找是否有这样的user并返回一个新的u对象
根据u的内容进行逻辑判断。
最后响应数据:
格式对比:
writeValue(参数,obj):直接将传入的对象序列化为json,并且返回给客户端
writeValueAsString(obj):将传入的对象序列化为json,返回给调用者
共性:
将将对象转为json字符串
不同:
writeValue(参数,obj):
参数有四种重载形式
第一种:file 将转换后的json字符串保存到指定的file文件中
第二种:writer 将转换后的json字符串保存到字符输出流中
第二种:outputStream将转换后的json字符串保存到字节输出流中
第四种:jsonGenerator类(不常用,不作介绍)
UserService&&UserDao:
十分简单 :UserService的login方法就是返回UserDao的sql方法的返回值
没有定义这个方法,当然要去Dao中先实现
然后在DaoImpl中写对应的sql查询语句,并返回user
这里的queryForObject后面要加上password参数
Login.html页面(前端):
这里点击登录按钮,成功响应后会提交post请求
第一个参数是URL,指定要发送请求到的页面
第二个参数是data,这里指的是将本页面(用户提供的信息)序列化后的数据提交
第三个参数是回调函数,里面的data如注释所示,是loginServlet响应回来的信息
然后根据data中的内容进行逻辑判定即可。
姓名加载:
逻
逻这里在头页面添加了一个script,在页面加载时就发送一个gt请求到‘findUserServlet’页面请求数据,第二个参数未设置,因为不需要发送数据。
获得响应的data参数(这里得到的应该是user对象)后,获取user.name
加载到对应部位。
这里的getAttribute获得键值key为user的对象,应该是Beanutils.populate方法设置的user对象(前面有说),获取到了对象直接响应给html页面即可。
实现退出功能:
点击退出按钮,跳到exitServlet执行逻辑
Invalidate方法就是销毁方法,之后重定向到login.html页面。
getContextPath返回的是当前项目的应用路径,这样写是因为重定向路径的要求(有点疑问)
如名称为01的项目,返回就是/01,在这里如果加上/login.html就相当于跳转到login页面了。