您的位置:首页 > 其它

7 登录功能

2016-07-01 19:38 387 查看
本章将实现系统登录功能,当用户输入正确的用户名和密码,进入系统主界面,当输入错误的用户名和密码,提示错误信息。涉及到的新知识点JSON。

在《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。输入正确的用户和错误进行测试。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: