java三层架构是哪三层_Java单体应用 - 架构模式 - 04.实践练习(三层架构+MVC)

同步视频教程

1.构建项目结构

我们以用户登录功能进行演示 三层架构 + MVC架构 如何实现。

1.1.创建项目

打开 IDEA ,在前述章节 stage2 文件夹下创建文件夹 login-demo,如下图:

3594f911448d7d636fe691b9a380d8fe.png

创建目录

93cd25d7692c5ad1e4c407a02d0b99a9.png

目录命名 login-demo

1.2.创建 POM 文件

创建文件夹后,在 login-demo 文件夹上 右击,然后 New - File,新建一个 pom.xml 文件,文件内容如下:

4.0.0net.work100.training.stage2    login-demo    1.0.0-SNAPSHOTwar1.8${java.version}${java.version}UTF-8UTF-8javax.servlet            javax.servlet-api            4.0.1

1.3.创建目录结构

接下来,在 login-demo 文件夹下创建如下目录结构:

49b84796884c44f270c40d84c03d1b4e.png

目录结构含义说明

54d2bb9fce4338560ecd037082f9c3b2.png

目录结构

1.4.托管 POM 文件到 Maven

pom.xml 托管到 Maven,操作方式如下:

6959326a7b17423f444b278b5f044fee.png

POM托管到Maven

托管后,点击 刷新 重新导入所有 Maven 项目,结果如下:

91628b202e907ae0719a10979423fe99.png

Maven识别后的目录结构

1.5.创建包结构

在文件夹 src/main/java右击 - New - Package,包名为:net.work100.training.stage2.login.demo

然后创建我们的 三层 + MVC 包架构:

8aba3be88b71be5ea2ceeca4e50f285a.png

包含义说明

08e3775549d1dc8f5c56bc0ca8a17ee7.png

包结构

2.代码实现

2.1.定义实体类

entity 包上 右击 - New - Java Class 创建名为 User 的类。

User.java 文件代码如下:

package net.work100.training.stage2.login.demo.entity;import java.io.Serializable;/** * 

Title: User

*

Description: 用户表

* * @author liuxiaojun * @date 2020-02-09 10:43 * ------------------- History ------------------- * * 2020-02-09 liuxiaojun 初始创建 * ----------------------------------------------- */public class User implements Serializable { private String userName; private String loginId; private String loginPwd; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getLoginId() { return loginId; } public void setLoginId(String loginId) { this.loginId = loginId; } public String getLoginPwd() { return loginPwd; } public void setLoginPwd(String loginPwd) { this.loginPwd = loginPwd; } @Override public String toString() { return "User{" + "userName='" + userName + ''' + ", loginId='" + loginId + ''' + '}'; }}

2.2.实现dao层

创建 UserDao 接口

在包 dao右击 - New - Java ClassKind 选择 Interface,接口命名为 UserDao

UserDao.java 代码如下:

package net.work100.training.stage2.login.demo.dao;import net.work100.training.stage2.login.demo.entity.User;/** * 

Title: UserDao

*

Description: 用户数据访问

* * @author liuxiaojun * @date 2020-02-09 10:49 * ------------------- History ------------------- * * 2020-02-09 liuxiaojun 初始创建 * ----------------------------------------------- */public interface UserDao { /** * 登录验证 * * @param loginId 登录ID * @param loginPwd 登录密码 * @return */ User login(String loginId, String loginPwd);}

接口实现 UserDaoImpl

在包dao右击 - New - Package,类包名称为 impl,然后在包impl右击 - New - Java Class,新建类 UserDaoImpl

UserDaoImpl.java 文件代码如下:

package net.work100.training.stage2.login.demo.dao.impl;import net.work100.training.stage2.login.demo.dao.UserDao;import net.work100.training.stage2.login.demo.entity.User;/** * 

Title: UserDaoImpl

*

Description:

* * @author liuxiaojun * @date 2020-02-09 11:04 * ------------------- History ------------------- * * 2020-02-09 liuxiaojun 初始创建 * ----------------------------------------------- */public class UserDaoImpl implements UserDao { @Override public User login(String loginId, String loginPwd) { // 根据 loginId 查询出用户信息 User user = getUserByLoginId(loginId); if (user!=null) { // 验证 loginPwd 是否正确(区分大小写) if(user.getLoginPwd().equals(loginPwd)){ return user; } } return null; } private User getUserByLoginId(String loginId){ // 模拟 DB 存在的用户数据 User dbUser = new User(); dbUser.setUserName("Xiaojun"); dbUser.setLoginId("admin"); dbUser.setLoginPwd("admin"); // 判断是否存在 loginId 的用户(忽略大小写) if(dbUser.getLoginId().equalsIgnoreCase(loginId)){ return dbUser; } return null; }}

2.3.实现service层

创建 UserService 接口

在包 service右击 - New - Java ClassKind 选择 Interface,接口命名为 UserService

UserService.java 代码如下:

package net.work100.training.stage2.login.demo.service;/** * 

Title: UserService

*

Description:

* * @author liuxiaojun * @date 2020-02-09 11:20 * ------------------- History ------------------- * * 2020-02-09 liuxiaojun 初始创建 * ----------------------------------------------- */public interface UserService { /** * 登录验证 * * @param loginId 登录ID * @param loginPwd 登录密码 * @return */ boolean login(String loginId, String loginPwd);}

接口实现 UserServiceImpl

在包 service右击 - New - Package,类包名称为 impl,然后在包impl右击 - New - Java Class,新建类 UserServiceImpl

UserServiceImpl.java 文件代码如下:

package net.work100.training.stage2.login.demo.service.impl;import net.work100.training.stage2.login.demo.dao.UserDao;import net.work100.training.stage2.login.demo.dao.impl.UserDaoImpl;import net.work100.training.stage2.login.demo.service.UserService;/** * 

Title: UserServiceImpl

*

Description:

* * @author liuxiaojun * @date 2020-02-09 11:22 * ------------------- History ------------------- * * 2020-02-09 liuxiaojun 初始创建 * ----------------------------------------------- */public class UserServiceImpl implements UserService { // 数据访问层的具体实现 private UserDao userDao = new UserDaoImpl(); @Override public boolean login(String loginId, String loginPwd) { return userDao.login(loginId, loginPwd) != null; }}

2.4.实现Web控制器

在包 web.controller右击 - New - Java Class,新建一个 LoginController 控制器。

LoginController.java 代码如下:

package net.work100.training.stage2.login.demo.web.controller;import net.work100.training.stage2.login.demo.service.UserService;import net.work100.training.stage2.login.demo.service.impl.UserServiceImpl;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/** * 

Title: LoginController

*

Description: 登录控制器

* * @author liuxiaojun * @date 2020-02-09 11:36 * ------------------- History ------------------- * * 2020-02-09 liuxiaojun 初始创建 * ----------------------------------------------- */public class LoginController extends HttpServlet { private UserService userService = new UserServiceImpl(); @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String loginId = req.getParameter("loginId"); String loginPwd = req.getParameter("loginPwd"); boolean success = userService.login(loginId, loginPwd); // 登录失败 if (!success) { req.getRequestDispatcher("/fail.jsp").forward(req, resp); } // 登录成功 else { req.getRequestDispatcher("/success.jsp").forward(req, resp); } }}

因 LoginController 需要扩展继承 HttpServlet,所以我们需要在 pom.xml 文件中引入依赖的类包 javax.servlet-api

3.网站实现

3.1.构建网站目录结构

a91a8da2b9d9109910e8a92311a9e7da.png

目录结构解释

af41b9a27b191037a09a1e55135d4228.png

目录结构

3.2.网站配置文件

WEB-INF/web.xml 配置文件代码如下:

<?xml version="1.0" encoding="UTF-8"?>login-demoLoginControllernet.work100.training.stage2.login.demo.web.controller.LoginControllerLoginController/login

3.3.登录页

index.jsp 文件代码如下:

    登录    

3.4.登录成功页

success.jsp 文件代码如下:

    成功登录成功

3.5.登录失败页

fail.jsp 文件代码如下:

    失败登录失败

4.测试运行

4.1.配置Tomcat

打开 Run/Debug Configurations,点击 + - Tomcat Server - Local ,然后点击 OK 确认

b6092ceac567e5fb75b881e429449d34.png

添加 Tomcat Server

Tomcat-Server 命名 login-demo,选择安装好的 Application Server

3ce7af4703a8627970c9f43f78ff300f.png

添加 Tomcat Server

切换到 Deployment 选项卡,添加 Artifact,有两种方式:

方式一

点击 + - Artifact

251fa70bb97d1d5d8c2a031a8174e251.png

添加 Artifact 方式1

弹出画面中选择 login-demo:war exploded

aa2c349fb21e5d846398ecb8f8ba8158.png

选择附加

方式二

右下角选择 Fix

7e785dfb2e6a9c9f324c6e76dd0fd870.png

添加 Artifact 方式2

弹出画面中选择 login-demo:war exploded

9b18bb32d7bd874f247b8c0108fc26cd.png

选择附加

设置 Application context/,即为根目录:

7503776cca9230efe8961fffdc9ebfea.png

配置 Application context

4.2.运行

点击下图 运行 按钮:

ec794a59440a742b95bffeb02c042b72.png

运行

运行成功后将打开浏览器,或者您手动打开浏览器,输入地址:

http://localhost:8080/

运行效果如下图:

fd15eeefda6cb84900835c0d2322baf9.png

登录

表单输入以下错误的登录数据:

502cc43facee253ed0626d0e681c379d.png

错误数据

页面将转向 登录失败 页面,如下图:

559f8ace529ac8c1d058ebdb3a81633a.png

登录失败

表单输入以下正确的登录数据:

018b5fe429349652ab1c9e7ab797e455.png

正确数据

页面将转向 登录成功 页面,如下图:

98d89017c92453445849a72b79022b21.png

登录成功

5.总结

如上详细讲解了 三层 + MVC 架构的典型实现方式,课件将每个步骤都进行了截图,请认真阅读文档并实践练习。

通过练习做到深刻理解三层架构及MVC架构,同时熟练掌握 IntelliJ IDEA 构建 Maven 项目的详细步骤。

后续的章节将不再对通过 IntelliJ IDEA 构建 Maven 项目的步骤进行讲解,将主要以代码实现为讲解内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值