以用户注册功能模块为例浅谈MVC架构下的JavaWeb开发流程
JavaWeb应用开发,撇开分布式不谈,只讨论一个功能服务应用的开发,无论是使用原生的Servlet/JSP方案,还是时下的SSM架构,都有一套经过工程实践考验的最佳实践,这综合考虑了团队协作、项目管理、可用性等方方面面的问题。
文章图片
一些约定
考虑到项目管理的方便,一般前端不能直接访问到jsp页面,而是必须通过Servlet来管理到Jsp页面的跳转
在以上的超链接中,通过定位到继承了BaseServlet类的UserServlet的registUI方法,来处理跳转的功能。
public String registUI(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
return "/jsp/register.jsp";
}
首先,以用户注册这一功能模块为例,其服务端的逻辑如图所示:
文章图片
一般来说,一个功能模块包括许多的业务功能点,比如用户注册,就包括用户名校验、注册、发送激活邮件、发送验证短信等等具体的功能点。这些功能点就体现在不同Servlet(或者action或者Controller)的业务方法里,而所用的方法又会调用到Service包和Dao包中的增删改查原子方法。
文章图片
根据服务端的运行逻辑,一般的开发流程包括
- 页面准备
1
2 会员注册USER REGISTER
3
78
- 在对应的功能模块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 }
- 完善Service包下的接口和实现类
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 }
- 完善Dao包下的接口和实现类
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开发流程】基本上所有的基于MVC思想的架构开发,都可以遵循这样的逻辑,来逐步完善应用代码。
推荐阅读
- ES6+|七(以理论结合实践方式梳理前端 ES 6+ ——— ES 6+ 文档对象)
- Java基础案例教程 第六章集合类———【任务6-2】模拟新浪微博用户注册 (HashSet集合)
- Android高级进阶|Android 10.0以后高版本后台启动Activity的方法
- 数据分析|机器学习多元线性回归模型(公式推导以及代码实现)
- go语言专栏|如何解决GoLand2021版取消Go Module 以及Go get 因被墙下载gin失败
- python|硬件工程师需要数学功底吗_您不需要数学就可以成为软件工程师
- 腾讯刘炽平(以生态方式进行开放,不做“颠覆者”)
- vue3|vue3 setup语法糖中组件之间通讯以及vuex的使用以及数据监听,路由跳转传参等基础知识点
- MySQL|MySQL数据库的基本操作以及数据类型
- 项目可以怎么规范Git commit ()