javaweb开发顺序

javaweb模块功能开发顺序(前后端不分离)

1.编写模块的数据库表

就是创建当前模块的主要类所拥有的属性的数据库表格,并向其中插入一些数据

2.编写模块的JavaBean

在IDEA中编写该主要类,将属性设置为私有,编写一个空参的构造器全参构造器编写所有属性的Set和Get方法重写toString方法

3.编写模块的Dao和测试Dao

  1. 就是对数据库的增删改查操作,首先编写在dao包下编写一个类接口,取名为xxxDao,在Dao类中编写增删改查的抽象方法,或者是编写你想对这个模块做的一些事情,比如全部清空clear,保存save等。

    下面是编写BaseDao的代码:

    public abstract class BaseDao {
    
        //使用DbUtils操作数据库
        private QueryRunner queryRunner = new QueryRunner();
    
        /**
         * update() 方法用来执行:Insert\Update\Delete语句
         *
         * @return 如果返回-1,说明执行失败<br/>返回其他表示影响的行数
         */
        public int update(String sql, Object... args) {
            Connection connection = JdbcUtils.getConnection();
            try {
                return queryRunner.update(connection, sql, args);
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                JdbcUtils.close(connection);
            }
            return -1;
        }
    
        /**
         * 查询返回一个javaBean的sql语句
         *
         * @param type 返回的对象类型
         * @param sql  执行的sql语句
         * @param args sql对应的参数值
         * @param <T>  返回的类型的泛型
         * @return
         */
        public <T> T queryForOne(Class<T> type, String sql, Object... args) {
            Connection con = JdbcUtils.getConnection();
            try {
                return queryRunner.query(con, sql, new BeanHandler<T>(type), args);
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                JdbcUtils.close(con);
            }
            return null;
        }
    
        /**
         * 查询返回多个javaBean的sql语句
         *
         * @param type 返回的对象类型
         * @param sql  执行的sql语句
         * @param args sql对应的参数值
         * @param <T>  返回的类型的泛型
         * @return
         */
        public <T> List<T> queryForList(Class<T> type, String sql, Object... args) {
            Connection con = JdbcUtils.getConnection();
            try {
                return queryRunner.query(con, sql, new BeanListHandler<T>(type), args);
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                JdbcUtils.close(con);
            }
            return null;
        }
    
        /**
         * 执行返回一行一列的sql语句
         * @param sql   执行的sql语句
         * @param args  sql对应的参数值
         * @return
         */
        public Object queryForSingleValue(String sql, Object... args){
    
            Connection conn = JdbcUtils.getConnection();
    
            try {
                return queryRunner.query(conn, sql, new ScalarHandler(), args);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                JdbcUtils.close(conn);
            }
            return null;
    
        }
    
    }
    
    
  2. 再在impl包下编写实现类,在这里编写的实现类要继承(extends)BaseDao和实现(implements)上面编写的xxxDao,取名为xxxDaoImpl,将接口中的抽象方法根据实际情况实现。一般就是先设置一个sql语句,再return update方法,update(sql,这后面根据形参和sql语句中的?写)。
    在这里插入图片描述

注意查询语句一般有两种,一个是通过id单个查询,一个是全部查询。

在这里插入图片描述

最后编写测试方法,在XXXDao接口里面找一个空行,然后按住ctrl+shift+t,自动生成test方法。

  1. 先在test方法里面创建一个接口类的实现对象。在这里插入图片描述

  2. 然后根据实现类XXXDaoImpl里面的具体实现方法,来编写各个test方法,做一些看实际操作能否实现的测试。
    在这里插入图片描述

4.编写模块的Service和测试Service

Service类的编写和Dao的编写类似。

都是在各自对应的包下先创建一个接口,Service的编写是在service包下创建一个XXXService接口,里面编写和Dao中XXXDao接口一样的抽象方法或者增加一些你的网页想自己实现的方法。

在这里插入图片描述

然后不同的是,Dao是实现和数据库的连接,Service是实现和服务器的连接,因此具体实现方法中,XXXServiceImpl要首先创建一个XXXDao类接口的XXXDaoImpl实现对象,然后在每个方法中通过调用实现类对象进行XXXService方法的实现--------------相当于给你想要访问数据库的操作增加了一层Service的外衣,因为你此时已经是通过服务器调用数据库了。
在这里插入图片描述
在这里插入图片描述

最后测试方法遵循一样的规则,在XXXService接口中,按住ctrl+shift+t自动创建test方法,同样首先创建一个是实现对象,这时的实现对象就是XXXServiceImpl了,test就相当于你假装通过了服务器,在本地调用,观察服务器到数据库这条道是否打通,方便你之后编写后端Servlet的时候用Service的一些类。

在这里插入图片描述

然后调用实现对象XXXService里面实现的方法

在这里插入图片描述

5.编写模块的Web层,和页面联调测试

编写Web主要就是编写一些Servlet程序,首先编写Servlet的过程在之前的文章中有,下面简述一下。

在这里插入图片描述

然后它就会在Web.xml里面自动创建下面的配置内容

在这里插入图片描述

然后自己手动配置一下下面的内容

在这里插入图片描述

这个url-pattern的路径根据需要修改

然后创建XXXServlet程序,继承一个编写好的BaseServlet程序,BaseServlet代码如下

public abstract class BaseServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String action = req.getParameter("action");
        try {
            // 获取action业务鉴别字符串,获取相应的业务 方法反射对象
            Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
//            System.out.println(method);
            // 调用目标业务 方法
            method.invoke(this, req, resp);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在XXXServlet中首先创建一个XXXService对象

在这里插入图片描述

这里就体现了XXXService的用武之地

比如说我在图书管理系统页面上设置了一个修改按钮如下,

在这里插入图片描述

前面这一部分是指要转到哪个Servlet里面去,这个跟web.xml文件有关
在这里插入图片描述

这一部分是指要执行什么操作,这一步的设置和BaseServlet有关,

在这里插入图片描述

上面的例子因为要修改某一本书,就要知道这本书主键id,然后通过id找到这本书的所有信息,为什么要页面号呢,是因为我们设置了一个页面来浏览图书,页面号pageNo的传递是为了方便后面页面回显。
在这里插入图片描述

这样找到图书之后,请求重定向去book_edit页面,

以下是book_edit隐藏域的内容,这些内容是会随着提交按钮被发送给服务器的

在这里插入图片描述

这个操作的意思是如果id为空就是action=add就是增加图书的操作,如果id不为空,就是修改图书的操作,我们可以知道请求转发过来的时候id是不为空的,因此是update操作,

在这里插入图片描述

修改完成之后,点击提交按钮,服务器得到请求,执行action=update操作,

在这里插入图片描述

首先从上面你修改过的内容得到Map里面存放着修改后的数据,然后得到一个修改之后的Book对象,根据这个对象的内容修改保存到数据库,下面是BookDaoImpl的updateBook方法

在这里插入图片描述

然后可以看到数据库中的内容已经得到修改,页面也通过PageNo回到最初点击修改的那个Page页面。

在这里插入图片描述

这里是由action=page到了page方法中,page方法就是根据pageNo页面,和pageSize的大小,调用XXXService中的page方法得到一个新的page对象
在这里插入图片描述

在这里插入图片描述

最后设置分页条的请求地址,重定向回最开始的页面显示,将我们设置的页面显示在服务器上,显示的数据即为已经更新的数据。



注意:以上大概就是设置一个模块某个功能的的开发顺序。

仅供自己复习参考,错误请大佬指正。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值