1、设计数据库表结构
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
package com.duyi.entity;
import java.io.Serializable;
import java.util.Date;
public class Film implements Serializable {//实现可序列化
private static final long serialVersionUID = -2442860671614507423L;
private long id;
private String film_id; // filmId 驼峰也可 需要额外配置
private String fname;
private String director;
private String role;
private String ftype;
private String country;
private int length;
private String synopsis;
private Date release_time;
private String poster_path;
//构造函数以及get、set函数省略
}
FilmDao.java
package com.duyi.dao;
import com.duyi.entity.Film;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface FilmDao {
@Select("select id,film_id,fname,director,role,ftype,country,length,synopsis,release_time,poster_path from film")
public List<Film> findAll();
}
3、编写控制层和视图层
FilmVo.java
package com.duyi.vo;
//视图层对象,用来展示给用户
public class FilmVo {
private String filmId;
private String fname;
private String director;
private String poster_path;
//构造函数、get、set函数省略
}
FilmService.java
package com.duyi.service;
import com.duyi.dao.FilmDao;
import com.duyi.entity.Film;
import com.duyi.vo.FilmVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class FilmService {
@Autowired
private FilmDao filmDao;
public List<FilmVo> findAll() {
List<Film> filmList = filmDao.findAll();
System.out.println(filmList.size());
List<FilmVo> result = new ArrayList<>();
for (Film film : filmList) {
FilmVo vo = new FilmVo(film.getFilm_id(), film.getFname(), film.getDirector(), film.getPoster_path());
result.add(vo);
}
return result;
}
}
FilmController.java
package com.duyi.controller;
import com.duyi.service.FilmService;
import com.duyi.vo.FilmVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
public class FilmController {
@Autowired
private FilmService filmService;
@RequestMapping("filmList")
@ResponseBody
public List<FilmVo> findAll(){
return filmService.findAll();
}
}
4、编写页面
因为要使用静态资源,所以先配置资源的路径
springmvc.xml
<!-- 静态资源配置 读取权限-->
<mvc:resources mapping="/img/**" location="/img/"/>
<mvc:resources mapping="/css/**" location="/css/"/>
<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%> 再引入
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>