基于IDEA的SSH项目之三:配置Spring二

说明:这次要在之前的基础上加上对数据库的操作,之前只是模拟登陆过程,将用户名和密码都写死了,这次要在数据库中去查询得到。特别提出:本文的所有内容,都是在模仿陈雄华的《Spring 3.0 就是这么简单》,我在看这本书的时候,发现还有很多完全不懂的地方,因此就有了写本系列博客的想法。TO:陈雄华,请见谅我有很多内容点都是参照你的。

一、创建库表

我用的是Mysql 5.6数据库,新建一个数据库,并且见一个t_user表,5个字段,id,用户名,密码,上一次登陆时间,上一次登陆IP。(后面两个字段目前还用不上)。脚本如下:

DROP DATABASE IF EXISTS SSH;
CREATE DATABASE SSH DEFAULT CHARACTER SET utf8;
USE SSH ;

##创建用户表
CREATE TABLE t_user (
   user_id   INT AUTO_INCREMENT PRIMARY KEY,
   user_name VARCHAR(30),
   password  VARCHAR(32),
   last_visit datetime,
   last_ip  VARCHAR(23)
)ENGINE=InnoDB;

##插入初始化数据
INSERT INTO t_user (user_name,password) VALUES('admin','123456');
COMMIT;
我把这个脚本文件放到web的sql文件夹下。


二、设计类包

1、类包暂定为4个,分别为dao,domain,service,web。dao包下面包含UserDao.java类,domain包下面包含User.java类,service包下面包含UserService.java类,web层下除了上一次加的LoginController.java外,本次准备再添加一个LoginCommand.java的类。如下所示:


2、由于需要使用到数据库查询,这里采用Spring的JdbcTemlate来实现,因此需要配置数据源和JdbcTemlate并注入,在applicationContext.xml加入两段内容。同时启用Spring针对bean的注解配置,完成类自动转化Bean,同时完成Bean的注入。

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.1.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
    <!-- 扫描类包,将标注Spring注解的类自动转化Bean,同时完成Bean的注入 -->
    <context:component-scan base-package="com.hzb.dao"/>
    <context:component-scan base-package="com.hzb.service"/>
     <!-- 配置数据源 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close"
          p:driverClassName="com.mysql.jdbc.Driver"
          p:url="jdbc:mysql://localhost:3306/SSH"
          p:username="root"
          p:password="ROOT"/>
    <!-- 配置Jdbc模板  -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
		p:dataSource-ref="dataSource" />
</beans>
3、domain包类内容,User.java类内容如下,与数据库字段基本匹配一致。

package com.hzb.domain;

import java.util.Date;

/**
 * Created by IntelliJ IDEA.
 * User: Administrator
 * Date: 2014-4-29
 * Time: 23:17:27
 * To change this template use File | Settings | File Templates.
 */
public class User {
    private int userId;

    private String userName;

    private String password;

    private String lastIp;

    private Date lastVisit;

    public String getLastIp() {
        return lastIp;
    }

    public void setLastIp(String lastIp) {
        this.lastIp = lastIp;
    }

    public Date getLastVisit() {
        return lastVisit;
    }

    public void setLastVisit(Date lastVisit) {
        this.lastVisit = lastVisit;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

4、dao包类内容,UserDao.java类内容如下。

package com.hzb.dao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
//使用 @Repository 定义一个dao的bean
public class UserDao {
    @Autowired
    //使用  @Autowired 将Spring容器中的bean JdbcTemplate注入进来
    private JdbcTemplate jdbcTemplate;
    //通过用户名和密码查询用户的个数
    public int getMatchCount(String userName, String password) {
        String sqlStr = " SELECT count(*) FROM t_user "
                + " WHERE user_name =? and password=? ";
        return jdbcTemplate.queryForInt(sqlStr, new Object[]{userName, password});
    }
}
5、service包类内容,UserService.java类内容如下。

package com.hzb.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.hzb.dao.UserDao;

@Service
//使用 @Service 注解将 UserService 标注成为一个服务层的类
public class UserService {
    @Autowired
    //注入UserDao
    private UserDao userDao;
    //查询匹配的用户
    public boolean hasMatchUser(String userName, String password) {
        int matchCount = userDao.getMatchCount(userName, password);
        return matchCount > 0;
    }
}
6、web包类内容,LoginCommand.java类主要用来接收页面表单字段,因此它与login.jsp中的form元素保持一致,仅有两个字段。

package com.hzb.web;

public class LoginCommand {
    private String userName;

    private String password;

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
}


现在来修改LoginController.java中的登陆校验,修改成如下。

package com.hzb.web;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.beans.factory.annotation.Autowired;
import com.hzb.domain.User;
import com.hzb.service.UserService;

import java.util.Date;

@Controller
//① 标注成为一个SpringMVC的Controller
@RequestMapping(value = "/admin")
public class LoginController {
    @Autowired
    private UserService userService;
    @RequestMapping(value = "/login.html")
    //② 负责处理 /admin/login.html 的请求(需要加上类的映射请求路径),与index.jsp中的跳转目标保持一致
    public String loginPage() {
        return "login";
    }
    @RequestMapping(value = "/loginCheck.html")
    //② 负责处理 /admin/loginCheck.html 的请求 ,与login.jsp页面form表单的action保持一致
   /* public ModelAndView loginCheck(HttpServletRequest request,HttpServletRequest response) {
        if ("admin".equals(request.getParameter("userName")) && "123456".equals(request.getParameter("password"))) {
            return new ModelAndView("main");
        } else {
            return new ModelAndView("login").addObject("error", "error").addObject("errorMsg", "用户名或密码错误");
        }
    }*/
    public ModelAndView loginCheck(HttpServletRequest request, LoginCommand loginCommand) {
        boolean isValidUser =
                userService.hasMatchUser(loginCommand.getUserName(),
                        loginCommand.getPassword());
        if (!isValidUser) {
            return new ModelAndView("login", "error", "用户名或密码错误。");
        } else {
            return new ModelAndView("main");
        }
    }
}

三、登陆测试

1、现在启动tmcat服务,根据在第一步中向t_user表中插入的用户的用户名和密码,可以正常登陆。


2、到此步为止,整个项目的程序包见:http://download.csdn.net/detail/przzl/7273513

为了节省空间,我将lib文件夹中的jar包单独出来了,下载地址见:http://download.csdn.net/detail/przzl/7273519


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值