zoukankan      html  css  js  c++  java
  • jsp-2 用mvc模式,整理前两次的代码并增加登陆注册

    简单的servlet连接mysql数据库 使用mvc的登录注册

    这里就要联系到前面的jsp-1了(以下全复制粘贴)

    在MVC的项目中一般不会直接去访问JSP,都是通过.do来转发。
    这样做的好处是:
    1 所有请求全部通过action来转发,这样便于整体框架的处理。比如,可以加入登陆到某个页面的权限控制,只需要在配置文件中配置,而不用再每个JSP文件中加入相关的逻辑。
    2 与数据库,文件等底层存储层连接,读取数据的代码可以在类(action)中执行。这样做,一方面可以将很多方法复用,另一方面使JSP页面的代码变得简单而容易维护。
    3 其实.do也就是MVC当中的C,是控制器。在整个系统中起到中央枢纽的作用。先通过它的话就可以把逻辑代码隐藏在后台,使JSP文件作为单纯的VIEW分离出来,降低了系统的耦合性。

    基本的意思就是在每次访问页面的时候都要访问一次服务器,并根据其结果判断能否访问。

    就是mvc的分层的思想了

     jdbcutils(数据库连接池-----c3p0)

    package com.javaweb.utils;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    
    import javax.sql.DataSource;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    /**
     * MAVEN
     * 实现数据连接,通过数据库连接池(C3P0来获取DataSource)
     * DataSource:数据库连接对象
     *
     */
    public class JdbcUtils {
    
        private static DataSource dataSource=null;
        
        static{
            //找到c3p0-config里默认名为intergalactoApp的连接池
            dataSource=new ComboPooledDataSource("intergalactoApp");
        }
        
        /**
         * 获取数据连接
         * @return
         * @throws SQLException
         */
        public static Connection getConnection() throws SQLException{
            return dataSource.getConnection();
        }
        
        /**
         * 关闭数据库连接
         * @param conn
         * @throws SQLException
         */
        public static void closeConn(Connection conn) throws SQLException{
            if(conn!=null){
                conn.close();
            }
        }
        
    }

    上一篇写了那么多的数据库连接池

    这次导个jar就简单明了很多了

    DBDao(数据库操作工具-----dbutils)

    package com.javaweb.dao;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.List;
    
    import org.apache.commons.dbutils.QueryRunner;
    import org.apache.commons.dbutils.handlers.BeanHandler;
    import org.apache.commons.dbutils.handlers.BeanListHandler;
    
    import com.javaweb.dao.impl.DBDaoImpl;
    import com.javaweb.utils.JdbcUtils;
    
    public class DBDao<T> implements DBDaoImpl<T> {
        
        private QueryRunner queryRunner=new QueryRunner();
        
        @Override
        public List<T> selectAll(String sql, Class<T> clazz, List<Object> params) {
            Connection conn=null;
            try {
                conn = JdbcUtils.getConnection();
                if(params!=null && !params.isEmpty()){
                    return queryRunner.query(conn, sql, new BeanListHandler<>(clazz), params.toArray());
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        @Override
        public T selectOne(String sql, Class<T> clazz, List<Object> params) {
            Connection conn=null;
            try {
                conn = JdbcUtils.getConnection();
                if(params!=null && !params.isEmpty()){
                    return queryRunner.query(conn, sql, new BeanHandler<>(clazz), params.toArray());
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        @Override
        public int insert(String sql, List<Object> params) {
            Connection conn=null;
            try {
                conn = JdbcUtils.getConnection();
                if(params!=null && !params.isEmpty()){
                     return queryRunner.update(conn, sql, params.toArray());
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return 0;
        }
        @Override
        public int update(String sql, List<Object> params) {
            Connection conn=null;
            try {
                conn = JdbcUtils.getConnection();
                if(params!=null && !params.isEmpty()){
                    return queryRunner.update(conn, sql, params.toArray());
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return 0;
        }
    
        @Override
        public int delete(String sql, List<Object> params) {
            Connection conn=null;
            try {
                conn = JdbcUtils.getConnection();
                if(params!=null && !params.isEmpty()){
                    return queryRunner.update(conn, sql, params.toArray());
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return 0;
        }
    
        @Override
        public int insertOrUpdate(String sql, List params) {
            // TODO Auto-generated method stub
            return 0;
        }
    
    }

    同上一篇很多玩意,这次一个query就能省下很多不必要的代码

    基本代码所要用到的方法都在前两篇有提及

    mvc

    所以

    mvc我就根据目录来说一下了mvc就是model-view-control

    其中简单的说

    view

    就是用户响应的收集,响应结果的显示

    用.jsp来表示,webcontent

    control

    就是对用户响应的任务分配

    用servlet来表示,com.javaweb.action

    model

    就是任务的具体完成

    而其中

    service是服务类,根据任务来划分什么服务

    entity是实体类,就是实体,没什么好说的

    utils是工具类,调用数据库,或者对字符串分割等。这类加工型操作

    dao.impl是接口,表示应该具有什么操作

    dao操作类,实现接口,对数据的操作,重点是逻辑方面

    例如

    userDao

    package com.javaweb.dao;
    
    
    import java.util.List;
    
    import com.javaweb.dao.impl.UserDaoImpl;
    import com.javaweb.entity.User;
    
    public class UserDao extends DBDao<User> implements UserDaoImpl {
    
        @Override
        public User login(String sql, Class<User> clazz, List<Object> params) {
            // TODO Auto-generated method stub
            return selectOne(sql,clazz,params);
        }
    
        @Override
        public int register(String sql, List<Object> params) {
            // TODO Auto-generated method stub
            return insert(sql,params);
        }
        
    }

    假如用户要登录

    我可以直接使用DBDao里的selectOne来实现登录

    但是方法明里没有用户没有登录

    这样逻辑就不清晰了

    而我现在用UserDao继承DBDao,并在里面的login调用selectOne

    这样一来逻辑就清晰很多了

  • 相关阅读:
    VS 2017 没有工具栏中没有Report Viewer的解决方案
    数据类型和C#关系对应
    .NET CORE部署各种问题
    .NET CORE AutoMapper使用
    .NET CORE 配置Swagger文档
    window快捷登陆linux的的设置方式(设置ssh的config配置)
    linux安装mongodb并启动
    windows更改DNS设置
    scp的使用
    浏览器缓存机制
  • 原文地址:https://www.cnblogs.com/ydymz/p/6287112.html
Copyright © 2011-2022 走看看