以用户注册功能模块为例浅谈MVC架构下的JavaWeb开发流程

JavaWeb应用开发,撇开分布式不谈,只讨论一个功能服务应用的开发,无论是使用原生的Servlet/JSP方案,还是时下的SSM架构,都有一套经过工程实践考验的最佳实践,这综合考虑了团队协作、项目管理、可用性等方方面面的问题。

以用户注册功能模块为例浅谈MVC架构下的JavaWeb开发流程_第1张图片

一些约定

考虑到项目管理的方便,一般前端不能直接访问到jsp页面,而是必须通过Servlet来管理到Jsp页面的跳转

  • 注册

  • 在以上的超链接中,通过定位到继承了BaseServlet类的UserServlet的registUI方法,来处理跳转的功能。

    public String registUI(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {
        return "/jsp/register.jsp";
    }
    
    

    首先,以用户注册这一功能模块为例,其服务端的逻辑如图所示:

    以用户注册功能模块为例浅谈MVC架构下的JavaWeb开发流程_第2张图片

    一般来说,一个功能模块包括许多的业务功能点,比如用户注册,就包括用户名校验、注册、发送激活邮件、发送验证短信等等具体的功能点。这些功能点就体现在不同Servlet(或者action或者Controller)的业务方法里,而所用的方法又会调用到Service包和Dao包中的增删改查原子方法。
    以用户注册功能模块为例浅谈MVC架构下的JavaWeb开发流程_第3张图片

    根据服务端的运行逻辑,一般的开发流程包括

    1. 页面准备

    包括表单属性添加修改、拼接超链接、添加Ajax等

    1


    2 会员注册USER REGISTER
    3

    4

    5
    6

    7
    8

    9

    10

    11
    12

    13
    14

    15

    16

    17
    18

    19
    20

    21

    22

    23
    24

    25
    26

    27

    28

    29
    30

    31
    32

    33

    34

    35
    36

    37
    40
    43

    44

    45

    46
    47

    48
    49

    50

    51
    52

    53
    54

    55
    56

    57

    58
    59

    60
    61

    62
    63

    64

    65
    66

    67
    68

    69
    70

    71

    72 73 style="background: url('${pageContext.request.contextPath}/img/register.gif') no-repeat scroll 0 0 rgba(0, 0, 0, 0);
    74 height:35px;width:100px;color:white;">
    75

    76

    77

    78

    1. 在对应的功能模块Servlet中,添加功能点的方法实现

    可以通过添加注释分解步骤,逐步完善业务代码逻辑。

    1 //用户注册模块的注册功能点
    2 public String userRegist(HttpServletRequest request, HttpServletResponse response) throws Exception {
    3 // 接收表单参数
    4 Map map = request.getParameterMap();
    5 //新建User对象
    6 User user = new User();
    7 //调用Utils的popultae方法为User对象赋值
    8 //MyBeanUtil封装了Apache Common的BeanUtil方法, 添加了转换时间格式的代码
    9 MyBeanUtils.populate(user, map);
    10 // 为用户的其他属性赋值,如用户编号, 状态码, 激活码
    11 user.setUid(UUIDUtils.getId());
    12 user.setState(0);
    13 user.setCode(UUIDUtils.getCode());
    14 System.out.println(user);
    15
    16 /*
    17 * //遍历map中的数据 Set keySet = map.keySet(); Iterator
    18 * iterator = keySet.iterator(); while(iterator.hasNext()){ String
    19 * str=iterator.next(); System.out.println(str); String[] strs =
    20 * map.get(str); for (String string : strs) {
    21 * System.out.println(string); } System.out.println(); }
    22 */
    23
    24 // 注册功能点封装在业务层中
    25 UserService UserService = new UserServiceImp();
    26 try {
    27 UserService.userRegist(user);
    28 // 注册成功,向用户邮箱发送信息,跳转到提示页面
    29 // 调用MailUtils方法, 发送邮件
    30 MailUtils.sendMail(user.getEmail(), user.getCode());
    31 request.setAttribute("msg", "用户注册成功,请激活!");
    32
    33 } catch (Exception e) {
    34 // 注册失败,跳转到提示页面
    35 request.setAttribute("msg", "用户注册失败,请重新注册!");
    36
    37 }
    38 return "/jsp/info.jsp";
    39 }

    1. 完善Service包下的接口和实现类

    UserService接口

    1 public interface UserService {
    2
    3 void userRegist(User user) throws SQLException;
    4
    5 }
    UserServiceImp接口实现类

    1 public class UserServiceImp implements UserService {
    2
    3 @Override
    4 public void userRegist(User user) throws SQLException {
    5
    6 //实现注册功能
    7 UserDao UserDao=new UserDaoImp();
    8 UserDao.userRegist(user);
    9 }
    10
    11 }

    1. 完善Dao包下的接口和实现类

    UserDao接口

    1 public interface UserDao {
    2
    3 void userRegist(User user) throws SQLException;
    4
    5 }
    UserDaoImp接口实现类

    1 public class UserDaoImp implements UserDao {
    2
    3 @Override
    4 public void userRegist(User user) throws SQLException {
    5 String sql="INSERT INTO USER VALUES(?,?,?,?,?,?,?,?,?,?)";
    6 QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());
    7 Object[] params={user.getUid(),user.getUsername(),user.getPassword(),user.getName(),user.getEmail(),user.getTelephone(),user.getBirthday(),user.getSex(),user.getState(),user.getCode()};
    8 qr.update(sql, params);
    9 }
    10
    11 }

    以用户注册功能模块为例浅谈MVC架构下的JavaWeb开发流程_第4张图片

    总结

    基本上所有的基于MVC思想的架构开发,都可以遵循这样的逻辑,来逐步完善应用代码。

    你可能感兴趣的:(以用户注册功能模块为例浅谈MVC架构下的JavaWeb开发流程)