1、设计数据库表结构
    image.png
    Film表

    字段名 含义 类型
    id 主键(自增) bigint
    film_id 电影唯一id varchar
    fname 电影名称 varchar
    director 导演 varchar
    role 主演 varchar
    ftype 电影类型 varchar
    country 制片国家/地区 varchar
    length 片长(单位:分钟) int
    synopsis 剧情介绍 varchar
    release_time 上映时间 date
    poster_path 海报地址 varchar

    2、编写实体类、配置⽂件sql以及DAO
    Film.java

    1. package com.duyi.entity;
    2. import java.io.Serializable;
    3. import java.util.Date;
    4. public class Film implements Serializable {//实现可序列化
    5. private static final long serialVersionUID = -2442860671614507423L;
    6. private long id;
    7. private String film_id; // filmId 驼峰也可 需要额外配置
    8. private String fname;
    9. private String director;
    10. private String role;
    11. private String ftype;
    12. private String country;
    13. private int length;
    14. private String synopsis;
    15. private Date release_time;
    16. private String poster_path;
    17. //构造函数以及get、set函数省略
    18. }

    FilmDao.java

    1. package com.duyi.dao;
    2. import com.duyi.entity.Film;
    3. import org.apache.ibatis.annotations.Select;
    4. import java.util.List;
    5. public interface FilmDao {
    6. @Select("select id,film_id,fname,director,role,ftype,country,length,synopsis,release_time,poster_path from film")
    7. public List<Film> findAll();
    8. }

    3、编写控制层和视图层
    FilmVo.java

    1. package com.duyi.vo;
    2. //视图层对象,用来展示给用户
    3. public class FilmVo {
    4. private String filmId;
    5. private String fname;
    6. private String director;
    7. private String poster_path;
    8. //构造函数、get、set函数省略
    9. }

    FilmService.java

    1. package com.duyi.service;
    2. import com.duyi.dao.FilmDao;
    3. import com.duyi.entity.Film;
    4. import com.duyi.vo.FilmVo;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.stereotype.Service;
    7. import java.util.ArrayList;
    8. import java.util.List;
    9. @Service
    10. public class FilmService {
    11. @Autowired
    12. private FilmDao filmDao;
    13. public List<FilmVo> findAll() {
    14. List<Film> filmList = filmDao.findAll();
    15. System.out.println(filmList.size());
    16. List<FilmVo> result = new ArrayList<>();
    17. for (Film film : filmList) {
    18. FilmVo vo = new FilmVo(film.getFilm_id(), film.getFname(), film.getDirector(), film.getPoster_path());
    19. result.add(vo);
    20. }
    21. return result;
    22. }
    23. }

    FilmController.java

    1. package com.duyi.controller;
    2. import com.duyi.service.FilmService;
    3. import com.duyi.vo.FilmVo;
    4. import org.springframework.beans.factory.annotation.Autowired;
    5. import org.springframework.stereotype.Controller;
    6. import org.springframework.web.bind.annotation.RequestMapping;
    7. import org.springframework.web.bind.annotation.ResponseBody;
    8. import java.util.List;
    9. @Controller
    10. public class FilmController {
    11. @Autowired
    12. private FilmService filmService;
    13. @RequestMapping("filmList")
    14. @ResponseBody
    15. public List<FilmVo> findAll(){
    16. return filmService.findAll();
    17. }
    18. }

    4、编写页面
    因为要使用静态资源,所以先配置资源的路径
    springmvc.xml

    1. <!-- 静态资源配置 读取权限-->
    2. <mvc:resources mapping="/img/**" location="/img/"/>
    3. <mvc:resources mapping="/css/**" location="/css/"/>
    4. <mvc:resources mapping="/js/**" location="/js/"/>

    还有⼀种解决方式 是default-servlet-handler
    FilmController.java

        @RequestMapping("home")
        public String home(Model model){
            System.out.println("接收首页请求");
            List<FilmVo> filmVoList=filmService.findAll();
            model.addAttribute("filmVoList",filmVoList);
            return "home";
        }
    

    home.jsp
    JSTL = JavaServer Pages Standard Tag Library java服务端页面的标准化标签库
    pom.xml

    <!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl -->
        <dependency>
          <groupId>org.apache.taglibs</groupId>
          <artifactId>taglibs-standard-impl</artifactId>
          <version>1.2.5</version>
          <scope>runtime</scope>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-spec -->
        <dependency>
          <groupId>org.apache.taglibs</groupId>
          <artifactId>taglibs-standard-spec</artifactId>
          <version>1.2.5</version>
        </dependency>
    

    使用前要引入依赖(pom), 然后在页面中用<%@ taglib%> 再引入
    核心标签库 有13个,分为4类
    1)表达式控制标签 : out set remove catch
    2)流程控制标签: if choose when otherwise
    3)循环标签:forEach forTokens
    4)URL操作标签: import url redirect



    var 当前遍历到的元素
    items 被迭代的集合
    begin 遍历的起始位置
    end 遍历的终止位置
    step 指步长i++的含义默认是1 i=i+2 就是2
    varStatus 当前遍历到元素的状态
    属性值:index(索引位置) count first last(是否是第⼀个或最后⼀个)

    home.jsp
    核心部分(不加样式)

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <html>
        <head>
            <title>Title</title>
        </head>
        <body>
            <table>
                <tr>
                    <c:forEach var="filmVo" items="${filmVoList}" begin="0" end="7">
                        <td>
                            <div>
                                <img src="${pageContext.request.contextPath}${filmVo.poster_path}">
                                <p>${filmVo.fname}</p>
                                <p>${filmVo.director}</p>
                            </div>
                        </td>
                    </c:forEach>
                </tr>
            </table>
        </body>
    </html>
    

    加简单样式版本

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <html>
        <head>
            <title>Title</title>
        </head>
        <body>
            <table style="width: 80vw; margin: 0 auto; background: #000;">
                <tr>
                    <c:forEach var="filmVo" items="${filmVoList}" begin="0" end="3">
                        <td>
                            <div style="width: 250px; margin: 10px;">
                                <a href="filmInfo?film_id=${filmVo.filmId}">
                                    <img src="${pageContext.request.contextPath}${filmVo.poster_path}"
                                     style="width: 250px;height: 380px"/>
                                </a>
                                <div class="piao">
                                    <a href="filmInfo?film_id=${filmVo.filmId}" >
                                        <p style="color: white;top:50px">${filmVo.fname}</p>
                                        <p style="color: #fff;top: 50px">导演:${filmVo.director}</p>
                                    </a>
                                </div>
                            </div>
                        </td>
                    </c:forEach>
                </tr>
                <tr>
                    <c:forEach var="filmVo" items="${filmVoList}" begin="4" end="7">
                        <td>
                            <div style="width: 250px; margin: 10px;">
                                <a href="filmInfo?film_id=${filmVo.filmId}">
                                    <img src="${pageContext.request.contextPath}${filmVo.poster_path}"
                                         style="width: 250px;height: 380px"/>
                                </a>
                                <div class="piao">
                                    <a href="filmInfo?film_id=${filmVo.filmId}">
                                        <p style="color: white;top:50px">${filmVo.fname}</p>
                                        <p style="color: #fff;top: 50px">导演:${filmVo.director}</p>
                                    </a>
                                </div>
                            </div>
                        </td>
                    </c:forEach>
                </tr>
            </table>
        </body>
    </html>
    

    如果希望项目启动时,能够直接跳转到home请求,可以在当前默认的index.jsp中增加如下代码

    <html>
        <body>
            <h2>Hello World!</h2>
            <jsp:forward page="home"/>
        </body>
    </html>