• 四、Maven-单一架构案例(业务功能:显示奏折列表,业务功能:显示奏折详情)



    第七节 业务功能:显示奏折列表

    1、流程图

    iamge

    2、创建组件

    ①创建 WorkServlet

    [1]创建 Java 类

    刚开始是空的,还没有写方法:

    在这里插入图片描述

    
    public class WorkServlet extends ModelBaseServlet {
        
        private MemorialsService memorialsService = new MemorialsServiceImpl();
        
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    [2]注册
    <servlet>
        <servlet-name>workServletservlet-name>
        <servlet-class>com.atguigu.imperial.court.servlet.module.WorkServletservlet-class>
    servlet>
    <servlet-mapping>
        <servlet-name>workServletservlet-name>
        <url-pattern>/workurl-pattern>
    servlet-mapping>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    ②创建 MemorialsService

    [1]接口

    images

    [2]实现类

    images

    public class MemorialsServiceImpl implements MemorialsService {
    
        private MemorialsDao memorialsDao = new MemorialsDaoImpl();
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3、WorkServlet 方法

    在这里插入图片描述

    protected void showMemorialsDigestList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        // 1、调用 Service 方法查询数据
        List<Memorials> memorialsList = memorialsService.getAllMemorialsDigest();
    
        // 2、将查询得到的数据存入请求域
        request.setAttribute("memorialsList", memorialsList);
    
        // 3、渲染视图
        String templateName = "memorials-list";
        processTemplate(templateName, request, response);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    4、MemorialsService 方法

    images

    @Override
    public List<Memorials> getAllMemorialsDigest() {
        return memorialsDao.selectAllMemorialsDigest();
    }
    
    • 1
    • 2
    • 3
    • 4

    5、MemorialsDao 方法

    images

    
    @Override
    public List<Memorials> selectAllMemorialsDigest() {
    
        String sql = "select memorials_id memorialsId,\n" +
                "       memorials_title memorialsTitle,\n" +
                "       concat(left(memorials_content, 10), \"...\") memorialsContentDigest,\n" +
                "       emp_name memorialsEmpName,\n" +
                "       memorials_create_time memorialsCreateTime,\n" +
                "       memorials_status memorialsStatus\n" +
                "from t_memorials m left join  t_emp e on m.memorials_emp=e.emp_id;";
    
        return getBeanList(sql, Memorials.class);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    6、页面显示

    images

    ①页面上的样式声明

    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    ②用户登录信息部分

    
    <div>
        <span th:if="${session.loginInfo.empPosition == 'emperor'}">恭请皇上圣安span>
        <span th:if="${session.loginInfo.empPosition == 'minister'}"><span th:text="${session.loginInfo.empName}">XXXspan>大人请安span>
        <a th:href="@{/auth?method=logout}">退朝a>
    div>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    ③数据展示信息部分

    
    <table>
        <thead>
            <tr>
                <th>奏折标题th>
                <th>内容摘要th>
                <th>上疏大臣th>
                <th>上疏时间th>
                <th>奏折状态th>
                <th>奏折详情th>
            tr>
        thead>
        <tbody th:if="${#lists.isEmpty(memorialsList)}">
            <tr>
                <td colspan="6">没有人上过折子td>
            tr>
        tbody>
        <tbody th:if="${not #lists.isEmpty(memorialsList)}">
            <tr th:each="memorials : ${memorialsList}">
                <td th:switch="${memorials.memorialsStatus}">
                    <span th:text="${memorials.memorialsTitle}" th:case="0" style="color: red;">奏折标题span>
                    <span th:text="${memorials.memorialsTitle}" th:case="1" style="color: blue;">奏折标题span>
                    <span th:text="${memorials.memorialsTitle}" th:case="2">奏折标题span>
                td>
                <td th:switch="${memorials.memorialsStatus}">
                    <span th:text="${memorials.memorialsContentDigest}" th:case="0" style="color: red;">内容摘要span>
                    <span th:text="${memorials.memorialsContentDigest}" th:case="1" style="color: blue;">内容摘要span>
                    <span th:text="${memorials.memorialsContentDigest}" th:case="2">内容摘要span>
                td>
                <td th:switch="${memorials.memorialsStatus}">
                    <span th:text="${memorials.memorialsEmpName}" th:case="0" style="color: red;">上疏大臣span>
                    <span th:text="${memorials.memorialsEmpName}" th:case="1" style="color: blue;">上疏大臣span>
                    <span th:text="${memorials.memorialsEmpName}" th:case="2">上疏大臣span>
                td>
                <td th:switch="${memorials.memorialsStatus}">
                    <span th:text="${memorials.memorialsCreateTime}" th:case="0" style="color: red;">上疏时间span>
                    <span th:text="${memorials.memorialsCreateTime}" th:case="1" style="color: blue;">上疏时间span>
                    <span th:text="${memorials.memorialsCreateTime}" th:case="2">上疏时间span>
                td>
                <td th:switch="${memorials.memorialsStatus}">
                    <span th:case="0" style="color: red;">未读span>
                    <span th:case="1" style="color: blue;">已读span>
                    <span th:case="2">已批示span>
                td>
    
                <td>
                    <a th:href="@{/work?method=detail}">奏折详情a>
                td>
            tr>
        tbody>
    table>
    
    • 1
    • 2
    • 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
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    7、和登录成功对接

    images

    protected void login(
            HttpServletRequest request,
            HttpServletResponse response)
            throws ServletException, IOException {
    
        try {
            // 1、获取请求参数
            String loginAccount = request.getParameter("loginAccount");
            String loginPassword = request.getParameter("loginPassword");
    
            // 2、调用 EmpService 方法执行登录逻辑
            Emp emp = empService.getEmpByLoginAccount(loginAccount, loginPassword);
    
            // 3、通过 request 获取 HttpSession 对象
            HttpSession session = request.getSession();
    
            // 4、将查询到的 Emp 对象存入 Session 域
            session.setAttribute(ImperialCourtConst.LOGIN_EMP_ATTR_NAME, emp);
    
            // 5、前往指定页面视图
            // 前往临时页面
            // String templateName = "temp";
            // processTemplate(templateName, request, response);
    
            // 前往正式的目标地址
            response.sendRedirect(request.getContextPath() + "/work?method=showMemorialsDigestList");
    
        } catch (Exception e) {
            e.printStackTrace();
    
            // 6、判断此处捕获到的异常是否是登录失败异常
            if (e instanceof LoginFailedException) {
                // 7、如果是登录失败异常则跳转回登录页面
                // ①将异常信息存入请求域
                request.setAttribute("message", e.getMessage());
    
                // ②处理视图:index
                processTemplate("index", request, response);
    
            }else {
                // 8、如果不是登录异常则封装为运行时异常继续抛出
                throw new RuntimeException(e);
    
            }
    
        }
    
    }
    
    • 1
    • 2
    • 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
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    第八节 业务功能:显示奏折详情

    1、流程图

    images

    2、调整奏折列表页面的超链接

    <a th:href="@{/work(method='showMemorialsDetail',memorialsId=${memorials.memorialsId})}">奏折详情a>
    
    • 1

    3、WorkServlet 方法

    iamges

    protected void showMemorialsDetail(
            HttpServletRequest request,
            HttpServletResponse response)
            throws ServletException, IOException {
    
        // 1、从请求参数读取 memorialsId
        String memorialsId = request.getParameter("memorialsId");
    
        // 2、根据 memorialsId 从 Service 中查询 Memorials 对象
        Memorials memorials = memorialsService.getMemorialsDetailById(memorialsId);
    
        // 3、将 Memorials 对象存入请求域
        request.setAttribute("memorials", memorials);
    
        // 4、解析渲染视图
        String templateName = "memorials_detail";
        processTemplate(templateName, request, response);
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    4、MemorialsService 方法

    images

        @Override
        public Memorials getMemorialsDetailById(String memorialsId) {
    
            return memorialsDao.selectMemorialsById(memorialsId);
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5、MemorialsDao 方法

    images

    @Override
    public Memorials selectMemorialsById(String memorialsId) {
    
        String sql = "select memorials_id memorialsId,\n" +
                "       memorials_title memorialsTitle,\n" +
                "       memorials_content memorialsContent,\n" +
                "       emp_name memorialsEmpName,\n" +
                "       memorials_create_time memorialsCreateTime,\n" +
                "       memorials_status memorialsStatus,\n" +
                "       feedback_time feedbackTime,\n" +
                "       feedback_content feedbackContent\n" +
                "from t_memorials m left join  t_emp e on m.memorials_emp=e.emp_id " +
                "where memorials_id=?;";
    
        return getSingleBean(sql, Memorials.class, memorialsId);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    6、详情页

    在这里插入图片描述

    
    <div>
        <span th:if="${session.loginInfo.empPosition == 'emperor'}">恭请皇上圣安span>
        <span th:if="${session.loginInfo.empPosition == 'minister'}"><span th:text="${session.loginInfo.empName}">XXXspan>大人请安span>
        <a th:href="@{/auth?method=logout}">退朝a>
    div>
    
    <table>
        <tr>
            <td>奏折标题td>
            <td th:text="${memorials.memorialsTitle}">td>
        tr>
        <tr>
            <td>上疏大臣td>
            <td th:text="${memorials.memorialsEmpName}">td>
        tr>
        <tr>
            <td>上疏时间td>
            <td th:text="${memorials.memorialsCreateTime}">td>
        tr>
        <tr>
            <td>奏折内容td>
            <td th:text="${memorials.memorialsContent}">td>
        tr>
        <tr th:if="${memorials.memorialsStatus == 2}">
            <td>批复时间td>
            <td th:text="${memorials.feedbackTime}">td>
        tr>
        <tr th:if="${memorials.memorialsStatus == 2}">
            <td>批复时间td>
            <td th:text="${memorials.feedbackContent}">td>
        tr>
    table>
    
    <div th:if="${memorials.memorialsStatus != 2}">
        <form th:action="@{/work}" method="post">
    
            <input type="hidden" name="method" value="feedBack" />
            <input type="hidden" name="memorialsId" th:value="${memorials.memorialsId}"/>
    
            <textarea name="feedbackContent">textarea>
    
            <button type="submit">御批button>
    
        form>
    div>
    
    <a th:href="@{/work?method=showMemorialsDigestList}">返回列表a>
    
    • 1
    • 2
    • 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
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    7、更新状态

    ①业务逻辑规则

    一份未读奏折,点击查看后,需要从未读变成已读。

    ②WorkServlet 方法

    iamges

    增加判断:

    protected void showMemorialsDetail(
            HttpServletRequest request,
            HttpServletResponse response)
            throws ServletException, IOException {
    
        // 1、从请求参数读取 memorialsId
        String memorialsId = request.getParameter("memorialsId");
    
        // 2、根据 memorialsId 从 Service 中查询 Memorials 对象
        Memorials memorials = memorialsService.getMemorialsDetailById(memorialsId);
    
        // **********************补充功能**********************
        // 获取当前奏折对象的状态
        Integer memorialsStatus = memorials.getMemorialsStatus();
        
        // 判断奏折状态
        if (memorialsStatus == 0) {
            // 更新奏折状态:数据库修改
            memorialsService.updateMemorialsStatusToRead(memorialsId);
    
            // 更新奏折状态:当前对象修改
            memorials.setMemorialsStatus(1);
        }
        // **********************补充功能**********************
    
        // 3、将 Memorials 对象存入请求域
        request.setAttribute("memorials", memorials);
    
        // 4、解析渲染视图
        String templateName = "memorials_detail";
        processTemplate(templateName, request, response);
    
    }
    
    • 1
    • 2
    • 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

    ③MemorialsService 方法

    images

    @Override
    public void updateMemorialsStatusToRead(String memorialsId) {
        memorialsDao.updateMemorialsStatusToRead(memorialsId);
    }
    
    • 1
    • 2
    • 3
    • 4

    ④MemorialsDao 方法

    images

    @Override
    public void updateMemorialsStatusToRead(String memorialsId) {
        String sql = "update t_memorials set memorials_status=1 where memorials_id=?";
        update(sql, memorialsId);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    安卓玩机-----反编译apk 修改apk 去广告 去弹窗等操作中的一些常识
    day-08 基于Linux的网络编程(套接字和标准I/O、分离I/O流、epoll、多线程服务器)
    07 单件(Singleton)模式
    MLAPI系列 - 04 - 网络变量和网络序列化【网络同步】
    阿里云SLB负载均衡产品基本概念与购买流程
    百度搜索业务交付无人值守实践与探索
    港股将迎“最牛十元店“,名创优品能借IPO突围?
    云服务器和物理服务器的区别在哪
    java计算机毕业设计ssm教师贴心宝的设计与实现
    【校招VIP】前端操作系统之存储管理加密
  • 原文地址:https://blog.csdn.net/m0_52896752/article/details/126259400