7 登录功能
2016-07-01 19:38
387 查看
本章将实现系统登录功能,当用户输入正确的用户名和密码,进入系统主界面,当输入错误的用户名和密码,提示错误信息。涉及到的新知识点JSON。
在《6 模型驱动》我们在初始化表单时代码如下:
注意此段代码:
它表示 form 表单提交到 url 成功后,服务器返回给前台页面的信息,返回的信息通过JSON格式传输。
那么如何在login方法中返回信息给前台页面呢?JSON又是什么东西呢?
JSON简单说就是javascript中的对象。对象在js中表示为“{}”括起来的内容,数据结构为:
上面为键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为【对象.key】获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
要使用FastJson,我们需要在pom.xml配置文件中加入依赖:
如何将对象转换为JSON,并返回给前台页面login呢?首先我们在ilv.pageModel包中创建一个对象Json,专门负责返回信息给前台。
代码清单1:Json.java
有了Json对象后,我们在login方法中创建此对象,并赋值,然后调用阿里巴巴提供的Fastjson对象,将Json对象转换为JSON格式字符串,并返回给前台login.jsp页面。修改UserAction类中的login方法。
在登录界面输入用户名好密码,点击登录。在控制台将会看到打印的JSON数据。
可见json对象被转换为JSON格式数据:
success方法中,首先将返回的JSON数据转换为JS对象,然后判断返回的success属性,判断是否登录成功。由于我们直接返回success为true,因此,页面跳转到index.jsp。
代码清单2:UserDaoI.java
在UserDaoImpl中实现此接口。
代码清单3:UserDaoImpl.java
代码清单4:UserServiceI.java
在UserServiceImpl类中实现此接口。
代码清单5:UserServiceImpl.java
重新关联项目,重启Tomcat。输入正确的用户和错误进行测试。
在《6 模型驱动》我们在初始化表单时代码如下:
//初始化表单 $("#login_loginForm").form({ url:"${pageContext.request.contextPath}/userAction!login.action", success:function(data){ var obj = eval("(" + data + ")"); if(obj.success){ //用户密码正确,跳转主页面 window.location.href = "index.jsp"; }else{ //提示错误信息 $.messager.alert("提示", obj.msg, "warning"); } } });
注意此段代码:
success:function(data){ …… }
它表示 form 表单提交到 url 成功后,服务器返回给前台页面的信息,返回的信息通过JSON格式传输。
那么如何在login方法中返回信息给前台页面呢?JSON又是什么东西呢?
1 JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON 数据的书写格式是:名称/值对。如:{"username":"admin"}
JSON简单说就是javascript中的对象。对象在js中表示为“{}”括起来的内容,数据结构为:
{key:value, key:value, ...}
上面为键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为【对象.key】获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
2 返回JSON
有了JSON知识后,我们将使用阿里巴巴JSON工具 :【FastJson】,它是一个Json处理工具包,包括“序列化”和“反序列化”两部分。能够快速帮我们构建JSON。序列化:就是把JavaBean对象转化成JSON格式的文本。反序列化:就是将JSON格式文本转化成对象。要使用FastJson,我们需要在pom.xml配置文件中加入依赖:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.39</version> </dependency>
如何将对象转换为JSON,并返回给前台页面login呢?首先我们在ilv.pageModel包中创建一个对象Json,专门负责返回信息给前台。
代码清单1:Json.java
package ilv.pageModel; import java.io.Serializable; public class Json implements Serializable { //返回结果 private boolean success = false; //返回信息 private String msg = ""; //返回对象 private Object object = null; public boolean isSuccess() { return success; } public void setSuccess(boolean success) { this.success = success; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Object getObject() { return object; } public void setObject(Object object) { this.object = object; } }
有了Json对象后,我们在login方法中创建此对象,并赋值,然后调用阿里巴巴提供的Fastjson对象,将Json对象转换为JSON格式字符串,并返回给前台login.jsp页面。修改UserAction类中的login方法。
public void login(){ //创建Json对象 Json json = new Json(); json.setSuccess(true); json.setMsg("测试返回数据"); //将Json对象转换为JSON字符串 String strJson = JSON.toJSONString(json); //打印JSON字符串 System.out.println(strJson); //设置返回字符编码 ServletActionContext.getResponse().setContentType("text/html;charset=utf-8"); try { //将JSON数据返回前台 ServletActionContext.getResponse().getWriter().write(strJson); ServletActionContext.getResponse().getWriter().flush(); ServletActionContext.getResponse().getWriter().close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
在登录界面输入用户名好密码,点击登录。在控制台将会看到打印的JSON数据。
可见json对象被转换为JSON格式数据:
{"msg":"测试返回数据","success":true}
3 前台处理返回数据
通过Fastjson对象,将数据返回给login.jsp页面。表示表单form提交成功,触发success方法。success:function(data){ //将JSON数据转换为JS对象 var obj = eval("(" + data + ")"); if(obj.success){ //用户密码正确,跳转主页面 window.location.href = "index.jsp"; }else{ //提示错误信息 $.messager.alert("提示", obj.msg, "warning"); } }
success方法中,首先将返回的JSON数据转换为JS对象,然后判断返回的success属性,判断是否登录成功。由于我们直接返回success为true,因此,页面跳转到index.jsp。
4 判断用户是否存在
4.1 修改Dao
有了前面的基础,我们就可以编写登录功能,首先在UserDao中增加获取用户接口。代码清单2:UserDaoI.java
package ilv.dao; import ilv.model.IlvUser; import java.io.Serializable; public interface UserDaoI { public Serializable save(IlvUser user); //查找用户,不存在返回null public IlvUser get(String hql); }
在UserDaoImpl中实现此接口。
代码清单3:UserDaoImpl.java
package ilv.dao.impl; import ilv.dao.UserDaoI; import ilv.model.IlvUser; import java.io.Serializable; import java.util.List; import org.hibernate.Query; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; //注解方式,让spring管理 //dao类推荐@Repository,service类推荐@Service @Repository("UserDao") public class UserDaoImpl implements UserDaoI{ private SessionFactory sessionFactory; public SessionFactory getSessionFactory() { return sessionFactory; } //当创建UserDaoImpl时,sessionFactory自动被创建注入 @Autowired public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } @Override public Serializable save(IlvUser user) { // TODO Auto-generated method stub return this.sessionFactory.getCurrentSession().save(user); } @Override public IlvUser get(String hql) { // TODO Auto-generated method stub Query q = this.sessionFactory.getCurrentSession().createQuery(hql); List<IlvUser> l = q.list(); //存在用户返回对象,否则返回空 if (l != null && l.size() > 0) { return l.get(0); } else { return null; } } }
4.2 修改Service
给UserServiceI增加 findUser 接口。代码清单4:UserServiceI.java
package ilv.service; import ilv.model.IlvUser; import ilv.pageModel.User; import java.io.Serializable; public interface UserServiceI { public void test(); public Serializable save(IlvUser user); //查找用户 public Boolean findUser(User user); }
在UserServiceImpl类中实现此接口。
代码清单5:UserServiceImpl.java
package ilv.service; import ilv.dao.UserDaoI; import ilv.model.IlvUser; import ilv.pageModel.User; import java.io.Serializable; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service(value = "userService") public class UserServiceImpl implements UserServiceI { /** * Logger for this class */ private static final Logger logger = Logger .getLogger(UserServiceImpl.class); // 需要用到userDaoImpl操纵表TUSER private UserDaoI userDao; public UserDaoI getUserDao() { return userDao; } // 创建UserServiceImpl时,userDao被自动创建 @Autowired public void setUserDao(UserDaoI userDao) { this.userDao = userDao; } @Override public void test() { logger.info("打印信息"); } @Override public Serializable save(IlvUser user) { //调用数据库操作类UserDao操纵数据库 return userDao.save(user); } @Override public Boolean findUser(User user) { // TODO Auto-generated method stub String hql = "from IlvUser where username = '" + user.getUsername() + "' and password = '" + DigestUtils.md5Hex(user.getPassword()) + "'"; if(userDao.get(hql) != null){ return true; }else{ return false; } } }
4.3 修改Action
public void login(){ //创建Json对象 Json json = new Json(); if(userService.findUser(user)){ json.setSuccess(true); json.setMsg("登录成功!"); }else{ json.setSuccess(false); json.setMsg("登录失败!"); } //将Json对象转换为JSON字符串 String strJson = JSON.toJSONString(json); //打印JSON字符串 System.out.println(strJson); //设置返回字符编码 ServletActionContext.getResponse().setContentType("text/html;charset=utf-8"); try { //将JSON数据返回前台 ServletActionContext.getResponse().getWriter().write(strJson); ServletActionContext.getResponse().getWriter().flush(); ServletActionContext.getResponse().getWriter().close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
4.4 修改web.xml
在web.xml配置文件中增加openSessionInView配置。<!-- openSessionInView配置 --> <filter> <filter-name>openSessionInView</filter-name> <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> <init-param> <param-name>singleSession</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>openSessionInView</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping>
重新关联项目,重启Tomcat。输入正确的用户和错误进行测试。
相关文章推荐
- Canvas简单直线路径
- How to build material design on android
- ASA透明防火墙_06
- stack queue priority_queue
- Android小知识
- Linux Theano 安装教程
- Linux设备驱动之字符设备驱动
- php中get_headers函数的作用及用法的详细介绍
- [SLAM] GMapping SLAM源码阅读(草稿)
- Eclipse常见问题总结(一)
- Canvas线段终点和连线
- Redis-3.2.1入门
- 网络编程socket之accept函数
- 醉了
- bean标签的解析及注册(三)AbstractBeanDefinition属性
- android开发---9.MediaPlayer实现音乐播放的demo
- HTML5+CSS3基础
- Windows 7下MySQL数据库编码的查看与修改
- 派生类和基类的关系—类继承
- 5-6 混合类型数据格式化输入 (5分)