【WEEK4】 【DAY2】整合SSM框架之功能实现—总览、添加数据【中文版】

2024.3.19 Tuesday

7.4.查询全部书籍功能

7.4.1.新建BookController.java

在这里插入图片描述

7.4.2.编写首页 index.jsp

package P17.controller;

import P17.project.Books;
import P17.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

@Controller
@RequestMapping("/book")
public class BookController {
//controller调用service层
    @Autowired
    @Qualifier("BookServiceImplement")
    private BookService bookService;

    //查询全部的书籍,并返回到一个书籍展示页面
    @RequestMapping("/allBook")
    public String list(Model model){
        List<Books> list = bookService.queryAllBook();  //调用业务层的方法,查询到所有的书籍
        model.addAttribute("list",list);    //返回前端查询
        return "allBook";  //返回到allBook.jsp
    }
}

7.4.2.1.最初版(验证代码逻辑正确)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>首页</title>
  </head>
  <body>
  <h3>
    <%--${}内取的是绝对地址--%>
    <a href="${pageContext.request.contextPath}/book/allBook">进入书籍展示页</a>
  </h3>
  </body>
</html>

7.4.2.2.最终版(查询书籍功能)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>

    <title>首页</title>
    <style>
      a{  <%--特指修改标题名称为a的--%>
        text-decoration: none;  <%--将标签a标题的默认下划线取消--%>
        color: black; <%--修改标题颜色成黑色--%>
        font-size: 18px;  <%--修改标题的字体大小--%>
      }
      h3{<%--标签选择器:修改页面中所有的标签样式--%>
        <%--指定的是能出现标题的那些字的“空间”长宽、位置--%>
        width: 180px; <%--宽度是单个字符的10倍,所以一行能容纳10个字--%>
        height: 38px;
        margin: 100px auto; <%--外边距100px,auto居中--%>
        text-align: center; <%--文本居中--%>
        line-height: 38px;  <%--行高等于字体高--%>
        background: aquamarine;
        border-radius: 5px;
      }
    </style>

  </head>
  <body>
  <h3>
    <%--${}内取的是绝对地址--%>
    <a href="${pageContext.request.contextPath}/book/allBook">进入书籍展示页</a>
  </h3>
  </body>
</html>

参考链接:https://zhuanlan.zhihu.com/p/352965852

这里是引用

7.4.3.新建书籍列表页面 allBook.jsp

在这里插入图片描述

7.4.3.1.最初版(验证代码逻辑正确)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>书籍展示页</title>
</head>
<body>
<h1>书籍展示</h1>
</body>
</html>

7.4.3.2.最终版(查询书籍功能)

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>书籍展示页</title>
    <%--BootStrap美化页面--%>
    <%--导入在线BootStrap--%>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.2.3/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container"> <%--容器--%>

    <div class="row clearfix">  <%--标记栏,清除浮动--%>
        <div class="col-md-12 column">
            <div class="page-header">   <!--为标签为h1的内容增加空间(和其他部分分隔)-->
                <h1>
                    <small>书籍列表——显示所有书籍</small>
                </h1>
            </div>
        </div>
    </div>

    <div class="row clearfix">
        <div class="col-md-12 column">
            <table class="table table-hover table-striped"> <%--鼠标漂浮在某行上方时加深颜色--%>
                <thead>
                    <tr>    <%--表格抬头--%>
                        <th>书籍编号</th>
                        <th>书籍名称</th>
                        <th>书籍数量</th>
                        <th>书籍详情</th>
                    </tr>
                </thead>

                <%--书籍从数据库中查询出来,从这个list中遍历出来,使用foreach--%>
                <tbody>
                    <%--c:forEach会自动导入标签(第一行)--%>
                    <c:forEach var="book" items="${list}">
                        <tr>
                            <td>${book.bookID}</td>
                            <td>${book.bookName}</td>
                            <td>${book.bookCounts}</td>
                            <td>${book.detail}</td>
                        </tr>
                    </c:forEach>
                </tbody>
            </table>
        </div>
    </div>

</div>

</body>
</html>

参考的资料等:新的Bootstrap国内高速CDN

7.4.4.记得配置tomcat,导入lib

在这里插入图片描述
在这里插入图片描述
(保存图片的时候没注意分辨率,现在看来太糊了…)

7.4.5.运行

7.4.5.1.最初版(验证代码逻辑正确)

http://localhost:8080/SSMbuild_war_exploded/
在这里插入图片描述
点击后:http://localhost:8080/SSMbuild_war_exploded/book/allBook
在这里插入图片描述

7.4.5.2.最终版(查询书籍功能)

http://localhost:8080/SSMbuild_war_exploded/
在这里插入图片描述
http://localhost:8080/SSMbuild_war_exploded/book/allBook
在这里插入图片描述

7.5.添加书籍功能

7.5.1.修改BookController.java

package P17.controller;

import P17.project.Books;
import P17.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.awt.print.Book;
import java.util.List;

@Controller
@RequestMapping("/book")
public class BookController {
//controller调用service层
    @Autowired
    @Qualifier("BookServiceImplement")
    private BookService bookService;

    //查询全部的书籍,并返回到一个书籍展示页面
    @RequestMapping("/allBook")
    public String list(Model model){
        List<Books> list = bookService.queryAllBook();  //调用业务层的方法,查询到所有的书籍
        model.addAttribute("list",list);    //返回前端查询
        return "allBook";  //返回到allBook.jsp
    }

    //跳转到增加书籍页面
    @RequestMapping("/toAddBook")
    public String toAddPaper(){
        return "addBook";
    }

    //添加书籍的请求
    @RequestMapping("/addBook")
    public String addBook(Books books){
        System.out.println("addBook=>"+books);  //打印日志
        bookService.addBook(books);
        return "redirect:/book/allBook";    //重定向到@RequestMapping("/allBook")请求
    }
}

7.5.2.修改allBook.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>书籍展示页</title>
    <%--BootStrap美化页面--%>
    <%--导入在线BootStrap--%>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.2.3/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container"> <%--容器--%>

    <div class="row clearfix">  <%--标记栏,清除浮动--%>
        <div class="col-md-12 column">
            <div class="page-header">   <!--为标签为h1的内容增加空间(和其他部分分隔)-->
                <h1>
                    <small>书籍列表——显示所有书籍</small>
                </h1>
            </div>
        </div>

        <div class="row">
            <div class="col-md-4 column">
                <%--应该添加一个请求->由BookController.java进行处理--%>
                <a class="btn btn-primary" href="${pageContext.request.contextPath}/book/toAddBook">新增书籍</a>
                <%--建立一个按钮--%>
            </div>
        </div>

    </div>

    <div class="row clearfix">
        <div class="col-md-12 column">
            <table class="table table-hover table-striped"> <%--鼠标漂浮在某行上方时加深颜色--%>
                <thead>
                    <tr>    <%--表格抬头--%>
                        <th>书籍编号</th>
                        <th>书籍名称</th>
                        <th>书籍数量</th>
                        <th>书籍详情</th>
                    </tr>
                </thead>

                <%--书籍从数据库中查询出来,从这个list中遍历出来,使用foreach--%>
                <tbody>
                    <%--c:forEach会自动导入标签(第一行)--%>
                    <c:forEach var="book" items="${list}">
                        <tr>
                            <td>${book.bookID}</td>
                            <td>${book.bookName}</td>
                            <td>${book.bookCounts}</td>
                            <td>${book.detail}</td>
                        </tr>
                    </c:forEach>
                </tbody>
            </table>
        </div>
    </div>

</div>

</body>
</html>

7.5.3.新建页面 addBook.jsp

在这里插入图片描述

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>
<head>
    <title>新增书籍</title>
    <%--    <meta name="viewport" content="width=device-width, initial-scale=1.0">--%>
    <%--BootStrap美化页面--%>
    <%--导入在线BootStrap--%>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.2.3/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>

<div class="container"> <%--容器--%>

    <div class="row clearfix">  <%--标记栏,清除浮动--%>
        <div class="col-md-12 column">
            <div class="page-header">   <!--为标签为h1的内容增加空间(和其他部分分隔)-->
                <h1>
                    <small>新增书籍</small>
                </h1>
            </div>
        </div>
    </div>
    <%--书籍表单--%>
    <form action="${pageContext.request.contextPath}/book/addBook" method="post">
        书籍名称:<input type="text" name="bookName"><br><br><br>
        书籍数量:<input type="text" name="bookCounts"><br><br><br>
        书籍详情:<input type="text" name="detail"><br><br><br>
        <input type="submit" value="添加">
        <%--以上添加书籍的操作应该能被识别->修改BookController.java--%>
    </form>

</div>
</body>
</html>

7.5.4.运行

7.5.4.1.遇到过的问题

  1. 最开始遇到的问题(好像没改什么,突然就解决了)
    在这里插入图片描述
  2. 404 在这里插入图片描述原因:在这个路径addBook后多加了},导致“添加书籍”点击“提交”后路径变为http://localhost:8080/SSMbuild_war_exploded/book/addBook%7D在这里插入图片描述
  3. 400在这里插入图片描述
    原因:没有把所有信息填写完全
    在这里插入图片描述

7.5.4.2.最终版

http://localhost:8080/SSMbuild_war_exploded/(主页没变化)
http://localhost:8080/SSMbuild_war_exploded/book/allBook
在这里插入图片描述
http://localhost:8080/SSMbuild_war_exploded/book/toAddBook
在这里插入图片描述
点击“提交”后返回了
http://localhost:8080/SSMbuild_war_exploded/book/allBook
在这里插入图片描述