SpringBoot结合jpa,监听器、thymeleaf实现监听网站的访问量
1、导入依赖、进行相关配置
添加jpa、thymeleaf、jdbc和java-connector的相关依赖。
(这里没有添加版本号是因为加了spring-boot-starter-parent,可以省略一些常用依赖的版本号)
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
application.properties
### mysql连接信息
spring.datasource.url=jdbc:mysql://localhost:3306/mydb2019?serverTimezone=UTC
spring.datasource.username=xxxx
spring.datasource.password=xxxxxxx
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
### thymeleaf模板配置
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.cache=false
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
2、创建监听表
监听表要实现的功能很简单,只是记录访问次数。
3、编写实体类
实体类对应监听表。具体如下:
Listener类:
/*
* ye
* 监听表
* 2020.10.15
*
* */
import javax.persistence.*;
@Entity
@Table(name = "listener")
public class Listener {
@Id
private String id;
private Integer quantity;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Integer getQuantity() {
return quantity;
}
public void setQuantity(Integer quantity) {
this.quantity = quantity;
}
@Override
public String toString() {
return "Listener{" +
"id=" + id +
", quantity=" + quantity +
'}';
}
}
4、编写业务层接口
业务层实现基本的数据表操作即可
import com.example.demojpa.model.Listener;
import java.util.List;
/*
* ye
* 2020.10.15
* 业务层接口
* */
public interface ListenerService {
List<Listener> findAll();
Listener findById(String id);
Listener save(Listener listener);
void delete(String id);
}
5、编写业务层接口实现类
实现业务层接口
import com.example.demojpa.model.Listener;
import com.example.demojpa.repository.ListenerRepository;
import com.example.demojpa.service.ListenerService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/*
* ye
* 2020.10.15
* 业务层接口实现类
* */
@Service
public class ListenerServiceImpl implements ListenerService {
@Resource
private ListenerRepository listenerRepository;
@Override
public List<Listener> findAll() {
return listenerRepository.findAll();
}
@Override
public Listener findById(String id) {
return listenerRepository.findById(id).orElse(null);
}
@Override
public Listener save(Listener listener) {
return listenerRepository.save(listener);
}
@Override
public void delete(String id) {
listenerRepository.deleteById(id);
}
6、编写监听器
编写监听器,监听请求
import com.example.demojpa.model.Listener;
import com.example.demojpa.service.ListenerService;
import javax.annotation.Resource;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
/*
* ye
* 2020.10.15
* 监听器
* */
@WebListener
public class PhoneListener implements ServletRequestListener {
@Resource
private ListenerService listenerService;
@Override
public void requestDestroyed(ServletRequestEvent servletRequestEvent){
System.out.println("```````````````````请求listener销毁");
}
@Override
public void requestInitialized(ServletRequestEvent servletRequestEvent){
System.out.println("```````````````````````````````请求listener创建啊");
Listener listener = listenerService.findById("1");
//每次访问数量加1,并保存到数据表
listener.setQuantity(listener.getQuantity() + 1);
listenerService.save(listener);
}
}
7、编写控制器
控制器实现对视图的控制
import com.example.demojpa.model.Listener;
import com.example.demojpa.service.ListenerService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
/*
* ye
* 2020.10.15
* 控制层
* */
@Controller
public class IndexController {
@Resource
private ListenerService listenerService;
@RequestMapping("/count")
public String count(Model model){
Listener listener = listenerService.findById("1");
String msg = "这是第"+listener.getQuantity()+"次访问网站!";
model.addAttribute("count",msg);
return "count";
}
}
8、编写HTML文件,展示内容
count.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<html lang="en">
<head>
<title>count</title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
</head>
<body>
<div style="text-align: center">
<h1 th:text="${count}"></h1>
</div>
</body>
</html>
9、测试
输入访问地址
点击刷新
当然,你输入任何 http://localhost:8080/ 的端口它都能够监听的。
测试成功!