基于Servlet+JSP+JavaBean开发模式的用户登录注册

参考链接:https://www.cnblogs.com/xdp-gacl/p/3902537.html

 

Servlet+JSP+JavaBean架构属于Web MVC模型,控制器采用Servlet、模型采用JavaBean、视图采用JSP,其中

servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据,如图

分层架构的代码也是按照【域模型层(domain)】→【数据访问层(dao、dao.impl)】→【业务处理层(service、service.impl)】→【表现层(web.controller、web.UI、web.filter、web.listener)】→【工具类(util)】→【测试类(junit.test)】的顺序进行编写的。

项目所需要的包
序号 包名 描述 所属层次
1 me.gacl.domain 存放系统的JavaBean类(只包含简单的属性以及属性对应的get和set方法,不包含具体的业务处理方法),提供给【数据访问层】、【业务处理层】、【Web层】来使用  domain(域模型)层
2 me.gacl.dao 存放访问数据库的操作接口类 数据访问层
3 me.gacl.dao.impl 存放访问数据库的操作接口的实现类
4 me.gacl.service 存放处理系统业务接口类 业务处理层
5 me.gacl.service.impl 存放处理系统业务接口的实现类
6 me.gacl.web.controller 存放作为系统控制器的Servlet Web层(表现层)
7 me.gacl.web.UI 存放为用户提供用户界面的servlet(UI指的是user interface)
8 me.gacl.web.filter 存放系统的用到的过滤器(Filter)
9 me.gacl.web.listener 存放系统的用到的监听器(Listener)
10 me.gacl.util 存放系统的通用工具类,提供给【数据访问层】、【业务处理层】、【Web层】来使用  
11 junit.test 存放系统的测试类  

 

 

 

 

 

 

 

 

 

 

 

 

 

开发总结

  通过这个小例子,可以了解到mvc分层架构的项目搭建,在平时的项目开发中,也都是按照如下的顺序来进行开发的:

  1、搭建开发环境

    1.1 创建web项目

    1.2 导入项目所需的开发包

    1.3 创建程序的包名,在java中是以包来体现项目的分层架构的

  2、开发domain

  把一张要操作的表当成一个VO类(VO类只定义属性以及属性对应的get和set方法,没有涉及到具体业务的操作方法),VO表示的是值对象,通俗地说,就是把表中的每一条记录当成一个对象,表中的每一个字段就作为这个对象的属性。每往表中插入一条记录,就相当于是把一个VO类的实例对象插入到数据表中,对数据表进行操作时,都是直接把一个VO类的对象写入到表中,一个VO类对象就是一条记录。每一个VO对象可以表示一张表中的一行记录,VO类的名称要和表的名称一致或者对应。

  3、开发dao

    3.1 DAO操作接口:每一个DAO操作接口规定了,一张表在一个项目中的具体操作方法,此接口的名称最好按照如下格式编写:“I表名称Dao”。

      ├DAO接口里面的所有方法按照以下的命名编写:

        ├更新数据库:doXxx()

        ├查询数据库:findXxx()getXxx()

    3.2 DAO操作接口的实现类:实现类中完成具体的增删改查操作

      ├此实现类完成的只是数据库中最核心的操作,并没有专门处理数据库的打开和关闭,因为这些操作与具体的业务操作无关。

  4、开发service(service 对web层提供所有的业务服务)

  5、开发web层

缺点

1、Servlet作为控制器的缺点

  此处的控制器使用Servlet,使用Servlet作为控制器有以下几个缺点:

  1、控制逻辑可能比较复杂,其实我们可以按照规约,如请求参数submitFlag=toLogin,我们其实可以直接调用toLogin方法,来简化控制逻辑;而且每个模块基本需要一个控制器,造成控制逻辑可能很复杂。现在流行的Web MVC框架(如Struts2)都支持"请求参数submitFlag=toAdd,就可以直接调用toAdd方法"这样的处理机制,在Struts2中类似这样的处理机制就称为"动态方法调用"

  2、请求参数到模型的封装比较麻烦,如果能交给框架来做这件事情,我们可以从中得到解放。

  请求参数到模型的封装代码:

// 1收集参数
String username = req.getParameter("username");
String password = req.getParameter("password");
// 2封装参数
UserBean user = new UserBean();
user.setUsername(username);
user.setPassword(password);

  当有几十个甚至上百个参数需要封装到模型中时,这样写恐怕就痛苦万分了,要写几十次甚至上百次这样的代码,估计写到吐了,所以现在流行的Web MVC框架(如Struts2)都提供了非常方便的获取参数,封装参数到模型的机制,减少这些繁琐的工作

  3、选择下一个视图,严重依赖Servlet API,这样很难或基本不可能更换视图。

例如:使用Servlet API提供的request对象的getRequestDispatcher方法选择要展示给用户看的视图

 

private void toLogin(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
    //使用Servlet API提供的request对象的getRequestDispatcher方法选择视图
     // 此处和JSP视图技术紧密耦合,更换其他视图技术几乎不可能 
    request.getRequestDispatcher("/mvc/login.jsp").forward(request, response);
}

 

  4、给视图传输要展示的模型数据,也需要使用Servlet API,更换视图技术也要一起更换,很麻烦。

例如:使用Servlet API提供的request对象给视图传输要展示的模型数据

//使用Servlet API提供的request对象给视图login.jsp传输要展示的模型数据(user)
request.setAttribute("user", user);
request.getRequestDispatcher("/mvc/login.jsp").forward(request, response)

3.2、JavaBean作为模型的缺点

  此处模型使用JavaBean,JavaBean组件类既负责收集封装数据,又要进行业务逻辑处理,这样可能造成JavaBean组件类很庞大,所以一般现在项目都是采用三层架构,而不直接采用JavaBean

3.3、视图的缺点

  现在被绑定在JSP,很难更换视图,比如Velocity、FreeMarker;比如我要支持Excel、PDF视图等等。

  点击此处下载项目源码:

posted @ 2018-06-15 01:18  Coosee  阅读(2561)  评论(0编辑  收藏  举报