JWB8: MVC简介以及简单应用(登录功能的实现)

8.1 简介

mvc: model(模型)、view(视图)、controller(控制器)。

对应: 模型对应JavaBean与dao层,视图对应前端页面,控制器对应servlet。Servlet与JSP页面都可以写Java代码,但是为了易于维护与管理,我们约定,servelt专注于请求处理,与视图的跳转和转发;JSP专注于数据的显示。

在这里插入图片描述

8.2功能:

  • Model

    业务处理(业务逻辑service)、数据持久层CRUD(DAO)

  • View

    展示数据、提供链接发起Servlet请求(a,form,img…)

  • Controller

    接收用户请求(request:请求参数,session等等)、交给业务层处理对应代码、控制视图的跳转

8.4 项目分包

  • view层:视图层,项目中的界面
  • controller层:控制层,获取界面上的数据;将要实现的功能交给业务层处理
  • service层作用: 业务层, 功能的实现, 与controller控制层和数据访问层DAO交互, 将对数据库的操作交给DAO数据访问层来处理
  • dao层作用: 数据访问层, 用来操作数据库表的数据
  • db数据库: 这里指MySQL
  • domain 实体包: 存放JavaBean
  • tools工具包:存放项目中使用到的工具类
  • test测试包: 存放项目功能测试的代码

8.3 应用

8.3.1逻辑:

登录界面--->接收用户登录请求--->处理用户的请求--->交给业务层处理登录业务--->DAO层查询用户名与密码是否正确--->数据库

8.3.2 准备:

  • 需要在resources目录下新建文件db.properties

db.properties内容:

driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf8&useSSL=true
user = root
pwd = root
  • 需要在pojo包下创建实体类
  • servlet、service、Dao包都需要相应的内容

8.3.3 所需的项目目录

在这里插入图片描述

8.3.4 代码实现:

1).BaseDao:用于处理mysql代码

BaseDao内容:

package com.yun.dao;


import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;

public class BaseDao {
    private static String driver;
    private static String url;
    private static String user;
    private static String pwd;

    static {
        Properties pro = new Properties();
        InputStream is = BaseDao.class.getClassLoader().getResourceAsStream("db.properties");

        try {
            pro.load(is);
        }catch (Exception e){
            e.printStackTrace();
        }

        driver = pro.getProperty("driver");
        url = pro.getProperty("url");
        user = pro.getProperty("user");
        pwd = pro.getProperty("pwd");
    }


    public static Connection getConnection(){
        Connection connection=null;
        try {
            Class.forName(driver);
            connection = DriverManager.getConnection(url,user,pwd);
        }catch (Exception e){e.printStackTrace();}

        return connection;
    }


    //公共查询类
    public static ResultSet execute(Connection conn, ResultSet res, PreparedStatement pre,String sql,Object[] params) throws Exception{
        pre = conn.prepareStatement(sql);

        for (int i = 0; i < params.length; i++) {
            pre.setObject(i+1,params[i]);
        }
        res = pre.executeQuery();

        System.out.println(pre.toString());
        return res;
    }



    //公共更新类
    public static int execute(Connection conn,PreparedStatement pre,String sql,Object[] params) throws Exception{
        pre = conn.prepareStatement(sql);

        for (int i = 0; i < params.length; i++) {
            pre.setObject(i+1,params[i]);
        }
        int res = pre.executeUpdate();
        return res;
    }


    //关闭连接
    public static boolean close(Connection conn,PreparedStatement pre,ResultSet res){
        boolean flag = true;

        try {
            if (conn != null) {
                conn.close();
                conn=null;
            }
        }catch (Exception e){
            e.printStackTrace();
            flag = false;
        }

        try {
            if (pre != null) {
                pre.close();
                pre=null;
            }
        }catch (Exception e){
            e.printStackTrace();
            flag = false;
        }
        try {
            if (res != null) {
                res.close();
                res=null;
            }
        }catch (Exception e){
            e.printStackTrace();
            flag = false;
        }

        return flag;
    }
}

2).UserDao接口与其实现类UserDaoImp

UserDao内容:

import com.yun.pojo.User;

import java.sql.Connection;
import java.util.List;

public interface UserDao {
    //获取用户
    public User getUser(Connection conn,String userCode,String pwd) throws Exception;
}

UserDaoImp内容:

import com.mysql.jdbc.StringUtils;
import com.yun.dao.BaseDao;
import com.yun.pojo.User;
import org.junit.Test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class UserDaoImp implements UserDao{
    @Override
    public User getUser(Connection conn, String userCode,String pwd) throws Exception{
        PreparedStatement pre =null;
        ResultSet res = null;
        User user=null;

        String sql = "select * from smbms_user where userCode=? and userPassword=?";
        Object[] param = {userCode,pwd};

        if (conn!=null) {
            res = BaseDao.execute(conn, res, pre, sql, param);

            if (res.next()){
                user = new User();
                user.setId(res.getInt("id"));
                user.setUserCode(res.getString("userCode"));
                user.setUserName(res.getString("userName"));
                user.setUserPassword(res.getString("userPassword"));
                user.setGender(res.getInt("gender"));
                user.setBirthday(res.getDate("birthday"));
                user.setPhone(res.getString("phone"));
                user.setAddress(res.getString("address"));
                user.setUserRole(res.getInt("userRole"));
                user.setCreatedBy(res.getInt("createdBy"));
                user.setCreationDate(res.getDate("creationDate"));
                user.setModifyBy(res.getInt("modifyBy"));
                user.setModifyDate(res.getDate("modifyDate"));
            }
        }
        BaseDao.close(null,pre,res);

        return user;
    }
}

3).UserService接口与UserServiceImp实现类

UserService接口:

package com.yun.service.user;

import com.yun.pojo.User;

import java.util.List;

public interface UserService {
    //获取用户
    public User login(String userCode,String pwd);
}

UserServiceImp内容:

import com.yun.dao.BaseDao;
import com.yun.dao.user.UserDao;
import com.yun.dao.user.UserDaoImp;
import com.yun.pojo.User;
import com.yun.servlet.user.UserServlet;
import org.junit.Test;

import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;

public class UserServiceImp implements UserService{
    private UserDao userDao=null;

    public UserServiceImp(){
        userDao = new UserDaoImp();
    }

    @Override
    public User login(String userCode, String pwd) {
        Connection con = null;
        User user = null;

        try {

            con = BaseDao.getConnection();
            user = userDao.getUser(con, userCode,pwd);
        }catch (Exception e){
            e.printStackTrace();
        } finally {
            BaseDao.close(con,null,null);
        }

        return user;
    }
}

4).LoginServlet

import com.yun.pojo.User;
import com.yun.service.user.UserService;
import com.yun.service.user.UserServiceImp;
import com.yun.util.Constant;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        User user = null;
        UserService userService = new UserServiceImp();

        String userCode = req.getParameter("userCode");			//来自前端的密码与账号
        String pwd = req.getParameter("userPassword");

        user = userService.login(userCode,pwd);

        if (user!=null){
            req.getSession().setAttribute(Constant.user_session,user);
            resp.sendRedirect("jsp/frame.jsp");
        }else{
            req.setAttribute("error","用户名或密码错误!");
            req.getRequestDispatcher("login.jsp").forward(req,resp);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}


值得一提的是,serivice与Dao都是以User开头,但是Servlet却是以login开头的。主要是因为,serivice与Dao是按照对象来划分的数据库操作,而Servlet则是功能上的实现。并且:本例子源于狂神SMBMS项目的登录功能实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值